diff --git a/.gitignore b/.gitignore index 372ffe6..4a68951 100644 --- a/.gitignore +++ b/.gitignore @@ -69,6 +69,8 @@ configure~ /install-sh /missing /stamp-h1 +*.tar.gz +*.zip # Generated pkg-config file unicorn.pc @@ -77,5 +79,5 @@ unicorn.pc *.pyc # Generated files -*.tar.gz -*.zip +unicorn.c +unicorn.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 597c0ea..01ab7af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.22) -project(unicorn VERSION 1.0.2 LANGUAGES C) +project(unicorn VERSION 1.0.3 LANGUAGES C) include(CheckIncludeFile) diff --git a/README.md b/README.md index 67c3b42..9d7469a 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ It's written in C99 and only requires a few features from libc which are listed ## MISRA C:2012 Compliance -Unicorn honors all Mandatory, most Required, and most Advisory rules defined by MIRSA C:2012. +Unicorn honors all Mandatory, most Required, and most Advisory rules defined by MIRSA C:2012 and its amendments. Deviations are [documented here](https://RailgunLabs.com/unicorn/manual/misra-compliance/). You are encouraged to audit Unicorn and verify its level of conformance is acceptable. diff --git a/configure.ac b/configure.ac index 77f647d..8e1d281 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([unicorn], [1.0.2]) +AC_INIT([unicorn], [1.0.3]) AM_INIT_AUTOMAKE([foreign]) AC_PROG_CC AC_PROG_CPP diff --git a/generate.pyz b/generate.pyz index 135fcad..c00abbd 100755 --- a/generate.pyz +++ b/generate.pyz @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # Unicorn - Embeddable Unicode Library -# Copyright (c) 2021-2024 Railgun Labs, LLC - All Rights Reserved +# Copyright (c) 2021-2025 Railgun Labs, LLC - All Rights Reserved # # All information contained herein is and remains the property of Railgun Labs. # The intellectual and technical concepts contained herein are proprietary to @@ -144,7 +144,7 @@ def cL(fi,struct,function): for eo in ek.keys(): source+=' {' for eC in eJ: - source+='UINT32_C({0}),'.format(eo.eB[eC.id]) + source+='{0}u,'.format(eo.eB[eC.id]) size+=eC.ea.c() source+='},\n' source+=' };\n\n' @@ -153,7 +153,7 @@ def cL(fi,struct,function): if index%8==0: source+='\n' source+=' ' - source+='UINT16_C(%d), '%value + source+='%d, '%value size+=2 source+='\n' source+=' };\n\n' @@ -162,7 +162,7 @@ def cL(fi,struct,function): if index%8==0: source+='\n' source+=' ' - source+='UINT16_C(%d), '%value + source+='%d, '%value size+=2 source+='\n' source+=' };\n\n' @@ -753,9 +753,9 @@ class cU(Feature): source+='UNICHAR_C(0x{:04X}), '.format(eS) size+=4 source+='};\n\n' - header=f'#define CASING_IN_TABLE(C) (((C) & UINT16_C({dI})) == UINT16_C({dI}))\n' - header+='#define GET_CASED_VALUE(C) ((C) & UINT16_C(0x3FFF))\n' - header+=f'#define CASING_DIFF INT32_C({ey})\n' + header=f'#define CASING_IN_TABLE(C) (((C) & (uint16_t){dI}) == (uint16_t){dI})\n' + header+='#define GET_CASED_VALUE(C) ((C) & (uint16_t)0x3FFF)\n' + header+=f'#define CASING_DIFF {ey}\n' header+='extern const unichar unicorn_simple_case_mappings[{0}];\n'.format(len(et)) assert len(et)<65535,'cannot use unsigned 16-bit integer anymore' fg=cL(eG,'CharCaseData','unicorn_get_character_casing') @@ -778,8 +778,8 @@ class cm(Feature): mappings=fg['characterFlags'] file.close() dX=fi.get(dW[0]) - header+='#define IS_CASED UINT32_C({0})\n'.format(u) - header+='#define IS_CASE_IGNORABLE UINT32_C({0})\n'.format(v) + header+='#define IS_CASED {0}u\n'.format(u) + header+='#define IS_CASE_IGNORABLE {0}u\n'.format(v) for fb,flags in mappings.items(): fi.eb(int(fb,16),dX,flags) return fe(source=source,header=header,size=size) @@ -829,8 +829,8 @@ class cp(Feature): fi.eb(fb,dX,cf) for fb,offset in aw: fi.set(fb,ay,offset) - header+='#define UNICORN_CHAR_NEEDS_NORMALIZATION UINT32_C({0})\n'.format(ce) - header+='#define UNICORN_CHAR_CHANGES_WHEN_CASEFOLDED UINT32_C({0})\n'.format(cf) + header+='#define UNICORN_CHAR_NEEDS_NORMALIZATION {0}u\n'.format(ce) + header+='#define UNICORN_CHAR_CHANGES_WHEN_CASEFOLDED {0}u\n'.format(cf) fd='#define UNICORN_FEATURE_CASEFOLD_DEFAULT\n' return fe(source,header,fd,size) class az(Feature): @@ -966,7 +966,7 @@ class ds(Feature): if index%8==0: source+='\n' source+=' ' - source+='UINT8_C(0x{:02X}), '.format(eS) + source+='(uint8_t)0x{:02X}, '.format(eS) source+='\n' source+='};\n\n' if fh.optimize==er.el: @@ -1017,7 +1017,7 @@ class aL(Feature): header+=' unichar codepoint;\n' header+=' unichar composed_codepoint;\n' header+='};\n' - header+='#define CHAR_IS_COMPOSABLE UINT32_C({0})\n'.format(cd) + header+='#define CHAR_IS_COMPOSABLE {0}u\n'.format(cd) header+='extern const struct CanonicalCompositionPair uni_canonical_comp_pairs[{0}];\n'.format(len(ct)) header+='\n' fd='#define UNICORN_FEATURE_NFC\n' @@ -1138,7 +1138,7 @@ class aV(Feature): for dR,en in enumerate(dO): if dR%4==0: source+='\n ' - source+='UINT32_C(0x{:08X}), '.format(en) + source+='0x{:08X}u, '.format(en) size+=4 source+='};\n\n' source+='const struct CollationNode unicorn_collation_mappings_trie[] = {\n' @@ -1147,20 +1147,20 @@ class aV(Feature): ep=len(eN.eF)<<24|eN.ev aT=eN.dY aU=eN.cy - source+=f' {{ UINT32_C({ep}), UINT16_C({aT}), UINT16_C({aU}) }},\n' + source+=f' {{ {ep}u, {aT}, {aU} }},\n' size+=8 source+='};\n\n' header=fg.header header+=aP header+='#define UNICORN_MAX_COLLATION {0}\n'.format(de+1) - header+='#define INLINE_CE_FLAG UINT32_C({0})\n'.format(db) - header+='#define IN_WEIGHT_TABLE_FLAG UINT32_C({0})\n'.format(cv) - header+='#define IN_TRIE_FLAG UINT32_C({0})\n'.format(cw) - header+='#define CONTINUATION_FLAG UINT32_C({0})\n'.format(cx) + header+='#define INLINE_CE_FLAG {0}u\n'.format(db) + header+='#define IN_WEIGHT_TABLE_FLAG {0}u\n'.format(cv) + header+='#define IN_TRIE_FLAG {0}u\n'.format(cw) + header+='#define CONTINUATION_FLAG {0}u\n'.format(cx) header+='#define LONGEST_INITIAL_SUBSTRING {0}\n'.format(aQ) - header+='#define UNICORN_IN_COLLATION_TABLE(NODE) ((NODE)->collation_mappings_offset > UINT16_C(0))\n' - header+='#define GET_NODE_CODE_POINT(NODE) ((NODE)->codepoint_and_childcount & UINT32_C(0x1FFFFF))\n' - header+='#define GET_NODE_CHILD_COUNT(NODE) ((NODE)->codepoint_and_childcount >> UINT32_C(24))\n' + header+='#define UNICORN_IN_COLLATION_TABLE(NODE) ((NODE)->collation_mappings_offset > (uint16_t)0)\n' + header+='#define GET_NODE_CODE_POINT(NODE) ((NODE)->codepoint_and_childcount & 0x1FFFFFu)\n' + header+='#define GET_NODE_CHILD_COUNT(NODE) ((NODE)->codepoint_and_childcount >> 24u)\n' header+='struct CollationNode {\n' header+=' uint32_t codepoint_and_childcount;\n' header+=' uint16_t collation_mappings_offset;\n' @@ -1297,7 +1297,7 @@ def be(args,ff): header+='#define UNICODE_VERSION_MINOR {0}\n'.format(dj[1]) header+='#define UNICODE_VERSION_PATCH {0}\n'.format(dj[2]) if fh.optimize==er.el: - header+='#define UNICORN_OPTIMIZE_FOR_SPEED\n' + header+='#define UNICORN_OPTIMIZE_FOR_SPEED // cppcheck-suppress misra-c2012-2.5\n' else: header+='#define UNICORN_OPTIMIZE_FOR_SIZE\n' if fh.algorithms.dU&ed.bq: @@ -1432,7 +1432,7 @@ def main(args): file=ff.open('code.h') bj=file.read().decode('utf-8-sig') file.close() - copyright='/*\n * Unicorn: Embeddable Unicode algorithms software library.\n * Copyright (c) 2024 Railgun Labs, LLC\n *\n * This file is part of Unicorn, distributed under the Railgun\n * Limited Public License. For the full terms see the included\n * LICENSE file. If you did not receive a LICENSE file then\n * contact us at .\n */\n\n// The Unicorn source code has been amalgamated into a monolithic source\n// and header file. As part of the amalgamation process all code comments\n// and extraneous white space have been removed.\n//\n// The amalgamation is intended for consumption, not development. The\n// unamalgamated source code can be obtained by purchasing a license\n// from Railgun Labs at https://RailgunLabs.com/unicorn/license.\n\n' + copyright='/*\n * Unicorn: Embeddable Unicode algorithms software library.\n * Copyright (c) 2025 Railgun Labs, LLC\n *\n * This file is part of Unicorn, distributed under a non-commercial use software\n * license. For the full terms see the included LICENSE file. If you did not\n * receive a LICENSE file or you would like to purchase a commercial license,\n * contact us at .\n */\n\n// The Unicorn source code has been amalgamated into a monolithic source\n// and header file. As part of the amalgamation process all code comments\n// and extraneous white space have been removed.\n//\n// The amalgamation is intended for consumption, not development. The\n// unamalgamated source code can be obtained by purchasing a license\n// from Railgun Labs at https://RailgunLabs.com/unicorn/license.\n\n' filename=os.path.join(args.output_dir,'unicorn.c') fp=open(filename,'w',encoding='utf-8',newline='\n') fp.write(copyright) diff --git a/man/uni_big.3 b/man/uni_big.3 index b825777..3126c35 100644 --- a/man/uni_big.3 +++ b/man/uni_big.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_BIG \- big endian byte order .SH LIBRARY @@ -7,7 +7,7 @@ Embeddable Unicode Algorithms (libunicorn, -lunicorn) .nf .B #include .PP -.B #define UNI_BIG 0x10 +.B #define UNI_BIG 0x10u .fi .SH DESCRIPTION Text attribute bit flag that indicates the text is encoded in big endian byte order. diff --git a/man/uni_caseconv.3 b/man/uni_caseconv.3 index 6f11975..f9a9d72 100644 --- a/man/uni_caseconv.3 +++ b/man/uni_caseconv.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_caseconv \- perform case conversion .SH LIBRARY diff --git a/man/uni_caseconvchk.3 b/man/uni_caseconvchk.3 index a608060..c73c28c 100644 --- a/man/uni_caseconvchk.3 +++ b/man/uni_caseconvchk.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_caseconvchk \- check case status .SH LIBRARY diff --git a/man/uni_casefold.3 b/man/uni_casefold.3 index d79c117..75c1b63 100644 --- a/man/uni_casefold.3 +++ b/man/uni_casefold.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_casefold \- perform case folding .SH LIBRARY diff --git a/man/uni_casefoldchk.3 b/man/uni_casefoldchk.3 index 34de8ac..8de202a 100644 --- a/man/uni_casefoldchk.3 +++ b/man/uni_casefoldchk.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_casefoldchk \- check case fold status .SH LIBRARY diff --git a/man/uni_casefoldcmp.3 b/man/uni_casefoldcmp.3 index 9312098..a7ffb12 100644 --- a/man/uni_casefoldcmp.3 +++ b/man/uni_casefoldcmp.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_casefoldcmp \- case-insensitive string comparison .SH LIBRARY diff --git a/man/uni_ccc.3 b/man/uni_ccc.3 index 6e9b704..17afcdc 100644 --- a/man/uni_ccc.3 +++ b/man/uni_ccc.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_ccc \- canonical combining class .SH LIBRARY diff --git a/man/uni_collate.3 b/man/uni_collate.3 index c31e242..727b404 100644 --- a/man/uni_collate.3 +++ b/man/uni_collate.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_collate \- compare strings for sorting .SH LIBRARY diff --git a/man/uni_compress.3 b/man/uni_compress.3 index 07a2313..2603f44 100644 --- a/man/uni_compress.3 +++ b/man/uni_compress.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_compress \- compress text .SH LIBRARY diff --git a/man/uni_convert.3 b/man/uni_convert.3 index c13f57e..78af6bd 100644 --- a/man/uni_convert.3 +++ b/man/uni_convert.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_convert \- convert encoding forms .SH LIBRARY diff --git a/man/uni_decompress.3 b/man/uni_decompress.3 index 40cd344..5b892ca 100644 --- a/man/uni_decompress.3 +++ b/man/uni_decompress.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_decompress \- decompress text .SH LIBRARY diff --git a/man/uni_encode.3 b/man/uni_encode.3 index ebeb7dc..2a6aa25 100644 --- a/man/uni_encode.3 +++ b/man/uni_encode.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_encode \- encode a scalar value .SH LIBRARY diff --git a/man/uni_gc.3 b/man/uni_gc.3 index bc293f4..792971c 100644 --- a/man/uni_gc.3 +++ b/man/uni_gc.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_gc \- general category .SH LIBRARY diff --git a/man/uni_getucdversion.3 b/man/uni_getucdversion.3 index 87cff6f..9029834 100644 --- a/man/uni_getucdversion.3 +++ b/man/uni_getucdversion.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_getucdversion \- unicode standard version .SH LIBRARY diff --git a/man/uni_getversion.3 b/man/uni_getversion.3 index 446d2c0..f6cdc5a 100644 --- a/man/uni_getversion.3 +++ b/man/uni_getversion.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_getversion \- library version .SH LIBRARY diff --git a/man/uni_is.3 b/man/uni_is.3 index 094c620..7ed4642 100644 --- a/man/uni_is.3 +++ b/man/uni_is.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_is \- binary property value .SH LIBRARY diff --git a/man/uni_little.3 b/man/uni_little.3 index 5d78c76..c8d7b02 100644 --- a/man/uni_little.3 +++ b/man/uni_little.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_LITTLE \- little endian byte order .SH LIBRARY @@ -7,7 +7,7 @@ Embeddable Unicode Algorithms (libunicorn, -lunicorn) .nf .B #include .PP -.B #define UNI_LITTLE 0x20 +.B #define UNI_LITTLE 0x20u .fi .SH DESCRIPTION Text attribute bit flag that indicates the text is encoded in little endian byte order. diff --git a/man/uni_native.3 b/man/uni_native.3 index 384759e..8257ff2 100644 --- a/man/uni_native.3 +++ b/man/uni_native.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_NATIVE \- native endian byte order .SH LIBRARY diff --git a/man/uni_next.3 b/man/uni_next.3 index b1e534a..6dc5706 100644 --- a/man/uni_next.3 +++ b/man/uni_next.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_next \- decode a scalar value .SH LIBRARY @@ -59,7 +59,7 @@ int main(void) } else { - printf("U+%04X\n", cp); // print scalar + printf("U+%04X\\n", cp); // print scalar } } return 0; diff --git a/man/uni_nextbrk.3 b/man/uni_nextbrk.3 index 4b88be9..b5aed6e 100644 --- a/man/uni_nextbrk.3 +++ b/man/uni_nextbrk.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_nextbrk \- compute next boundary .SH LIBRARY @@ -39,7 +39,7 @@ int main(void) unisize index = 0; while (uni_nextbrk(UNI_GRAPHEME, string, -1, UNI_UTF8, &index) == UNI_OK) { - printf("%d\n", index); // prints '1', '2', '3', '4', 7', '10' + printf("%d\\n", index); // prints '1', '2', '3', '4', 7', '10' } return 0; } diff --git a/man/uni_norm.3 b/man/uni_norm.3 index fa2b78d..386d604 100644 --- a/man/uni_norm.3 +++ b/man/uni_norm.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_norm \- normalize text .SH LIBRARY diff --git a/man/uni_normchk.3 b/man/uni_normchk.3 index 5957cfc..a292350 100644 --- a/man/uni_normchk.3 +++ b/man/uni_normchk.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_normchk \- normalization check .SH LIBRARY diff --git a/man/uni_normcmp.3 b/man/uni_normcmp.3 index 41308d3..31f4b9c 100644 --- a/man/uni_normcmp.3 +++ b/man/uni_normcmp.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_normcmp \- canonical equivalence .SH LIBRARY diff --git a/man/uni_normqchk.3 b/man/uni_normqchk.3 index 85db3d3..85c0c59 100644 --- a/man/uni_normqchk.3 +++ b/man/uni_normqchk.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_normqchk \- normalization quick check .SH LIBRARY diff --git a/man/uni_nulify.3 b/man/uni_nulify.3 index ce86a07..b551477 100644 --- a/man/uni_nulify.3 +++ b/man/uni_nulify.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_NULIFY \- null terminated output .SH LIBRARY @@ -7,7 +7,7 @@ Embeddable Unicode Algorithms (libunicorn, -lunicorn) .nf .B #include .PP -.B #define UNI_NULIFY 0x80 +.B #define UNI_NULIFY 0x80u .fi .SH DESCRIPTION Text attribute bit flag that indicates that the output buffer must be null terminated by the implementation. diff --git a/man/uni_numval.3 b/man/uni_numval.3 index 4df6162..3e591e3 100644 --- a/man/uni_numval.3 +++ b/man/uni_numval.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_numval \- numeric property .SH LIBRARY diff --git a/man/uni_prev.3 b/man/uni_prev.3 index a98cfc8..bf54c24 100644 --- a/man/uni_prev.3 +++ b/man/uni_prev.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_prev \- decode the previous scalar value .SH LIBRARY diff --git a/man/uni_prevbrk.3 b/man/uni_prevbrk.3 index 4779f3b..f55dde1 100644 --- a/man/uni_prevbrk.3 +++ b/man/uni_prevbrk.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_prevbrk \- compute preceding boundary .SH LIBRARY diff --git a/man/uni_scalar.3 b/man/uni_scalar.3 index 10b867d..d5c0f42 100644 --- a/man/uni_scalar.3 +++ b/man/uni_scalar.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_SCALAR \- unicode scalar value .SH LIBRARY @@ -7,7 +7,7 @@ Embeddable Unicode Algorithms (libunicorn, -lunicorn) .nf .B #include .PP -.B #define UNI_SCALAR 0x1 +.B #define UNI_SCALAR 0x1u .fi .SH DESCRIPTION Text attribute bit flag that indicates the text is encoded as Unicode scalar values. diff --git a/man/uni_seterrfunc.3 b/man/uni_seterrfunc.3 index 9082d27..8858525 100644 --- a/man/uni_seterrfunc.3 +++ b/man/uni_seterrfunc.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_seterrfunc \- receive diagnostic events .SH LIBRARY diff --git a/man/uni_setmemfunc.3 b/man/uni_setmemfunc.3 index 55de3ff..6b23f80 100644 --- a/man/uni_setmemfunc.3 +++ b/man/uni_setmemfunc.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_setmemfunc \- custom memory allocator .SH LIBRARY diff --git a/man/uni_sortkeycmp.3 b/man/uni_sortkeycmp.3 index 274b182..836c1d2 100644 --- a/man/uni_sortkeycmp.3 +++ b/man/uni_sortkeycmp.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_sortkeycmp \- compare sort keys .SH LIBRARY diff --git a/man/uni_sortkeymk.3 b/man/uni_sortkeymk.3 index 6cd8055..406e246 100644 --- a/man/uni_sortkeymk.3 +++ b/man/uni_sortkeymk.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_sortkeymk \- make sort key .SH LIBRARY diff --git a/man/uni_tolower.3 b/man/uni_tolower.3 index 2c0693f..b4356c4 100644 --- a/man/uni_tolower.3 +++ b/man/uni_tolower.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_tolower \- simple lower case mapping .SH LIBRARY diff --git a/man/uni_totitle.3 b/man/uni_totitle.3 index 13405e4..216fe76 100644 --- a/man/uni_totitle.3 +++ b/man/uni_totitle.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_totitle \- simple title case mapping .SH LIBRARY diff --git a/man/uni_toupper.3 b/man/uni_toupper.3 index 540effb..47ff7a1 100644 --- a/man/uni_toupper.3 +++ b/man/uni_toupper.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_toupper \- simple upper case mapping .SH LIBRARY diff --git a/man/uni_trust.3 b/man/uni_trust.3 index 4954d76..8a03b43 100644 --- a/man/uni_trust.3 +++ b/man/uni_trust.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_TRUST \- well-formed text .SH LIBRARY @@ -7,7 +7,7 @@ Embeddable Unicode Algorithms (libunicorn, -lunicorn) .nf .B #include .PP -.B #define UNI_TRUST 0x40 +.B #define UNI_TRUST 0x40u .fi .SH DESCRIPTION Text attribute bit flag that indicates that the encoded text is well-formed. diff --git a/man/uni_utf16.3 b/man/uni_utf16.3 index 6040ed3..b01c254 100644 --- a/man/uni_utf16.3 +++ b/man/uni_utf16.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_UTF16 \- UTF-16 encoding form .SH LIBRARY @@ -7,7 +7,7 @@ Embeddable Unicode Algorithms (libunicorn, -lunicorn) .nf .B #include .PP -.B #define UNI_UTF16 0x4 +.B #define UNI_UTF16 0x4u .fi .SH DESCRIPTION Text attribute bit flag that indicates the text is encoded as UTF-16. diff --git a/man/uni_utf32.3 b/man/uni_utf32.3 index fef746d..8d0d653 100644 --- a/man/uni_utf32.3 +++ b/man/uni_utf32.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_UTF32 \- UTF-32 encoding form .SH LIBRARY @@ -7,7 +7,7 @@ Embeddable Unicode Algorithms (libunicorn, -lunicorn) .nf .B #include .PP -.B #define UNI_UTF32 0x8 +.B #define UNI_UTF32 0x8u .fi .SH DESCRIPTION Text attribute bit flag that indicates text is encoded as UTF-32. diff --git a/man/uni_utf8.3 b/man/uni_utf8.3 index 78b941d..4e5f9a5 100644 --- a/man/uni_utf8.3 +++ b/man/uni_utf8.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME UNI_UTF8 \- UTF-8 encoding form .SH LIBRARY @@ -7,7 +7,7 @@ Embeddable Unicode Algorithms (libunicorn, -lunicorn) .nf .B #include .PP -.B #define UNI_UTF8 0x2 +.B #define UNI_UTF8 0x2u .fi .SH DESCRIPTION Text attribute bit flag that indicates the text is encoded as UTF-8. diff --git a/man/uni_validate.3 b/man/uni_validate.3 index 1f3edcf..fa4c59d 100644 --- a/man/uni_validate.3 +++ b/man/uni_validate.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uni_validate \- validate text .SH LIBRARY diff --git a/man/uniattr.3 b/man/uniattr.3 index d33bd2e..97031b4 100644 --- a/man/uniattr.3 +++ b/man/uniattr.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uniattr \- text attributes .SH LIBRARY diff --git a/man/unibp.3 b/man/unibp.3 index eca4f6d..34e6cf4 100644 --- a/man/unibp.3 +++ b/man/unibp.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unibp \- binary properties .SH LIBRARY diff --git a/man/unibreak.3 b/man/unibreak.3 index 05d6754..4bf6a33 100644 --- a/man/unibreak.3 +++ b/man/unibreak.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unibreak \- detectable text elements .SH LIBRARY diff --git a/man/unicaseconv.3 b/man/unicaseconv.3 index 19b2da6..e0c19d7 100644 --- a/man/unicaseconv.3 +++ b/man/unicaseconv.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unicaseconv \- case conversion operations .SH LIBRARY diff --git a/man/unicasefold.3 b/man/unicasefold.3 index abb4837..6cb318c 100644 --- a/man/unicasefold.3 +++ b/man/unicasefold.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unicasefold \- case folding operations .SH LIBRARY diff --git a/man/unichar.3 b/man/unichar.3 index e98d606..884c6db 100644 --- a/man/unichar.3 +++ b/man/unichar.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unichar \- code point .SH LIBRARY diff --git a/man/unicorn.3 b/man/unicorn.3 index 70c6dab..f76aeeb 100644 --- a/man/unicorn.3 +++ b/man/unicorn.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unicorn.h \- public interface for the Unicorn library .SH LIBRARY diff --git a/man/unierrfunc.3 b/man/unierrfunc.3 index ad76f82..1a955ed 100644 --- a/man/unierrfunc.3 +++ b/man/unierrfunc.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unierrfunc \- diagnostic function .SH LIBRARY diff --git a/man/unigc.3 b/man/unigc.3 index 672a094..9a144fe 100644 --- a/man/unigc.3 +++ b/man/unigc.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unigc \- general category .SH LIBRARY diff --git a/man/unimemfunc.3 b/man/unimemfunc.3 index f797f2a..b1c3581 100644 --- a/man/unimemfunc.3 +++ b/man/unimemfunc.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unimemfunc \- memory allocation function .SH LIBRARY diff --git a/man/uninormchk.3 b/man/uninormchk.3 index 1cf09b5..7690d6b 100644 --- a/man/uninormchk.3 +++ b/man/uninormchk.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uninormchk \- quick check constants .SH LIBRARY diff --git a/man/uninormform.3 b/man/uninormform.3 index dee57e4..f42d99f 100644 --- a/man/uninormform.3 +++ b/man/uninormform.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uninormform \- unicode normalization forms .SH LIBRARY diff --git a/man/unisize.3 b/man/unisize.3 index f2dc9a8..71848e6 100644 --- a/man/unisize.3 +++ b/man/unisize.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unisize \- code unit count .SH LIBRARY diff --git a/man/unistat.3 b/man/unistat.3 index 83822e4..ce39555 100644 --- a/man/unistat.3 +++ b/man/unistat.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unistat \- status code .SH LIBRARY diff --git a/man/unistrength.3 b/man/unistrength.3 index 1f31423..b208b6f 100644 --- a/man/unistrength.3 +++ b/man/unistrength.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME unistrength \- collation comparison levels .SH LIBRARY diff --git a/man/uniweighting.3 b/man/uniweighting.3 index 2e885f5..2162e16 100644 --- a/man/uniweighting.3 +++ b/man/uniweighting.3 @@ -1,4 +1,4 @@ -.TH "UNICORN" "3" "Dec 18th 2024" "Unicorn 1.0.2" +.TH "UNICORN" "3" "Jan 19th 2025" "Unicorn 1.0.3" .SH NAME uniweighting \- collation weighting algorithm .SH LIBRARY diff --git a/misra-compliance.html b/misra-compliance.html new file mode 100644 index 0000000..e2f572b --- /dev/null +++ b/misra-compliance.html @@ -0,0 +1,263 @@ +Misra C Compliance Report

Misra C Compliance Report

+Project: Unicorn
+Project version: 1.0.3
+Guidelines: Misra C 2012
+Checking tool: Cppcheck Premium 24.11.0
+Date: 19 January 2025
+Result: Compliant
+
+

Violations

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GuidelineCategoryCompliance
Dir 1.1RequiredNot executed
Dir 2.1RequiredNot executed
Dir 3.1RequiredNot executed
Dir 4.1RequiredNot executed
Dir 4.2AdvisoryNot executed
Dir 4.3RequiredCompliant
Dir 4.4AdvisoryCompliant
Dir 4.5AdvisoryCompliant
Dir 4.6AdvisoryCompliant
Dir 4.7RequiredNot executed
Dir 4.8AdvisoryNot executed
Dir 4.9AdvisoryCompliant
Dir 4.10RequiredNot executed
Dir 4.11RequiredNot executed
Dir 4.12RequiredNot executed
Dir 4.13AdvisoryNot executed
Rule 1.1RequiredCompliant
Rule 1.2AdvisoryCompliant
Rule 1.3RequiredCompliant
Rule 1.4RequiredCompliant
Rule 1.5RequiredCompliant
Rule 2.1RequiredCompliant
Rule 2.2RequiredCompliant
Rule 2.3AdvisoryCompliant
Rule 2.4AdvisoryCompliant
Rule 2.5AdvisoryCompliant
Rule 2.6AdvisoryCompliant
Rule 2.7AdvisoryCompliant
Rule 2.8AdvisoryCompliant
Rule 3.1RequiredCompliant
Rule 3.2RequiredCompliant
Rule 4.1RequiredCompliant
Rule 4.2AdvisoryCompliant
Rule 5.1RequiredCompliant
Rule 5.2RequiredCompliant
Rule 5.3RequiredCompliant
Rule 5.4RequiredCompliant
Rule 5.5RequiredCompliant
Rule 5.6RequiredCompliant
Rule 5.7RequiredCompliant
Rule 5.8RequiredCompliant
Rule 5.9AdvisoryCompliant
Rule 6.1RequiredCompliant
Rule 6.2RequiredCompliant
Rule 6.3RequiredCompliant
Rule 7.1RequiredCompliant
Rule 7.2RequiredCompliant
Rule 7.3RequiredCompliant
Rule 7.4RequiredCompliant
Rule 7.5MandatoryCompliant
Rule 7.6RequiredCompliant
Rule 8.1RequiredCompliant
Rule 8.2RequiredCompliant
Rule 8.3RequiredCompliant
Rule 8.4RequiredCompliant
Rule 8.5RequiredCompliant
Rule 8.6RequiredCompliant
Rule 8.7AdvisoryCompliant
Rule 8.8RequiredCompliant
Rule 8.9AdvisoryCompliant
Rule 8.10RequiredCompliant
Rule 8.11AdvisoryCompliant
Rule 8.12RequiredCompliant
Rule 8.13AdvisoryCompliant
Rule 8.14RequiredCompliant
Rule 8.15RequiredCompliant
Rule 8.16AdvisoryCompliant
Rule 8.17AdvisoryCompliant
Rule 9.1MandatoryCompliant
Rule 9.2RequiredCompliant
Rule 9.3RequiredCompliant
Rule 9.4RequiredCompliant
Rule 9.5RequiredCompliant
Rule 9.6RequiredCompliant
Rule 9.7MandatoryCompliant
Rule 10.1RequiredCompliant
Rule 10.2RequiredCompliant
Rule 10.3RequiredCompliant
Rule 10.4RequiredCompliant
Rule 10.5AdvisoryCompliant
Rule 10.6RequiredCompliant
Rule 10.7RequiredCompliant
Rule 10.8RequiredCompliant
Rule 11.1RequiredCompliant
Rule 11.2RequiredCompliant
Rule 11.3RequiredCompliant
Rule 11.4AdvisoryCompliant
Rule 11.5AdvisoryCompliant
Rule 11.6RequiredCompliant
Rule 11.7RequiredCompliant
Rule 11.8RequiredCompliant
Rule 11.9RequiredCompliant
Rule 11.10RequiredCompliant
Rule 12.1AdvisoryCompliant
Rule 12.2RequiredCompliant
Rule 12.3AdvisoryCompliant
Rule 12.4AdvisoryCompliant
Rule 12.5MandatoryCompliant
Rule 12.6RequiredCompliant
Rule 13.1RequiredCompliant
Rule 13.2RequiredCompliant
Rule 13.3AdvisoryCompliant
Rule 13.4AdvisoryCompliant
Rule 13.5RequiredCompliant
Rule 13.6MandatoryCompliant
Rule 14.1RequiredCompliant
Rule 14.2RequiredCompliant
Rule 14.3RequiredCompliant
Rule 14.4RequiredCompliant
Rule 15.1AdvisoryCompliant
Rule 15.2RequiredCompliant
Rule 15.3RequiredCompliant
Rule 15.4AdvisoryCompliant
Rule 15.5AdvisoryCompliant
Rule 15.6RequiredCompliant
Rule 15.7RequiredCompliant
Rule 16.1RequiredCompliant
Rule 16.2RequiredCompliant
Rule 16.3RequiredCompliant
Rule 16.4RequiredCompliant
Rule 16.5RequiredCompliant
Rule 16.6RequiredCompliant
Rule 16.7RequiredCompliant
Rule 17.1RequiredCompliant
Rule 17.2RequiredCompliant
Rule 17.3MandatoryCompliant
Rule 17.4MandatoryCompliant
Rule 17.5AdvisoryCompliant
Rule 17.6MandatoryCompliant
Rule 17.7RequiredCompliant
Rule 17.8AdvisoryCompliant
Rule 17.9MandatoryCompliant
Rule 17.10RequiredCompliant
Rule 17.11AdvisoryCompliant
Rule 17.12AdvisoryCompliant
Rule 17.13RequiredCompliant
Rule 18.1RequiredCompliant
Rule 18.2RequiredCompliant
Rule 18.3RequiredCompliant
Rule 18.4AdvisoryCompliant
Rule 18.5AdvisoryCompliant
Rule 18.6RequiredCompliant
Rule 18.7RequiredCompliant
Rule 18.8RequiredCompliant
Rule 18.9RequiredCompliant
Rule 18.10MandatoryCompliant
Rule 19.1MandatoryCompliant
Rule 19.2AdvisoryCompliant
Rule 20.1AdvisoryCompliant
Rule 20.2RequiredCompliant
Rule 20.3RequiredCompliant
Rule 20.4RequiredCompliant
Rule 20.5AdvisoryCompliant
Rule 20.6RequiredCompliant
Rule 20.7RequiredCompliant
Rule 20.8RequiredCompliant
Rule 20.9RequiredCompliant
Rule 20.10AdvisoryCompliant
Rule 20.11RequiredCompliant
Rule 20.12RequiredCompliant
Rule 20.13RequiredCompliant
Rule 20.14RequiredCompliant
Rule 21.1RequiredCompliant
Rule 21.2RequiredCompliant
Rule 21.3RequiredCompliant
Rule 21.4RequiredCompliant
Rule 21.5RequiredCompliant
Rule 21.6RequiredCompliant
Rule 21.7RequiredCompliant
Rule 21.8RequiredCompliant
Rule 21.9RequiredCompliant
Rule 21.10RequiredCompliant
Rule 21.11RequiredCompliant
Rule 21.12AdvisoryCompliant
Rule 21.13MandatoryCompliant
Rule 21.14RequiredCompliant
Rule 21.15RequiredCompliant
Rule 21.16RequiredCompliant
Rule 21.17RequiredCompliant
Rule 21.18MandatoryCompliant
Rule 21.19MandatoryCompliant
Rule 21.20MandatoryCompliant
Rule 21.21RequiredCompliant
Rule 21.22MandatoryCompliant
Rule 21.23RequiredCompliant
Rule 21.24RequiredCompliant
Rule 21.25RequiredCompliant
Rule 21.26RequiredCompliant
Rule 22.1RequiredCompliant
Rule 22.2MandatoryCompliant
Rule 22.3RequiredCompliant
Rule 22.4MandatoryCompliant
Rule 22.5MandatoryCompliant
Rule 22.6MandatoryCompliant
Rule 22.7RequiredCompliant
Rule 22.8RequiredCompliant
Rule 22.9RequiredCompliant
Rule 22.10RequiredCompliant
Rule 22.11RequiredCompliant
Rule 22.12MandatoryCompliant
Rule 22.13RequiredCompliant
Rule 22.14MandatoryCompliant
Rule 22.15RequiredCompliant
Rule 22.16RequiredCompliant
Rule 22.17RequiredCompliant
Rule 22.18RequiredCompliant
Rule 22.19RequiredCompliant
Rule 22.20MandatoryCompliant
Rule 23.1AdvisoryCompliant
Rule 23.2RequiredCompliant
Rule 23.3AdvisoryCompliant
Rule 23.4RequiredCompliant
Rule 23.5AdvisoryCompliant
Rule 23.6RequiredCompliant
Rule 23.7AdvisoryCompliant
Rule 23.8RequiredCompliant
+ + diff --git a/unicorn.bin b/unicorn.bin index 38cd624..690e2df 100644 Binary files a/unicorn.bin and b/unicorn.bin differ