حل بسيط لرأس واحد لدعم سلاسل utf8 في C وC++.
الوظائف المقدمة من string.h لرأس C ولكن مع بادئة utf8* بدلاً من البادئة str*:
مستندات وظيفة API
سلسلة. ح | utf8.h | مكتمل | مفهوم C++14 |
---|---|---|---|
strcat | utf8cat | ✔ | |
strchr | utf8chr | ✔ | ✔ |
com.strcmp | utf8cmp | ✔ | ✔ |
com.strcoll | utf8coll | ||
com.strcpy | utf8cpy | ✔ | |
com.strcspn | utf8cspn | ✔ | ✔ |
com.strdup | utf8dup | ✔ | |
com.strfry | utf8fry | ||
سترلين | utf8len | ✔ | ✔ |
com.sternlen | utf8nlen | ✔ | ✔ |
com.strncat | utf8ncat | ✔ | |
com.strncmp | utf8ncmp | ✔ | ✔ |
com.strncpy | utf8ncpy | ✔ | |
com.strndup | utf8ndup | ✔ | |
com.strpbrk | utf8pbrk | ✔ | ✔ |
com.strrchr | utf8rchr | ✔ | ✔ |
com.strsep | utf8sep | ||
com.strspn | utf8spn | ✔ | ✔ |
strstr | utf8str | ✔ | ✔ |
com.strtok | utf8tok | ||
com.strxfrm | utf8xfrm |
الوظائف المقدمة من strings.h لرأس C ولكن ببادئة utf8* بدلاً من البادئة str*:
سلاسل. ح | utf8.h | مكتمل | مفهوم C++14 |
---|---|---|---|
com.strcasecmp | utf8casecmp | ✔ | |
com.strncasecmp | utf8ncasecmp | ✔ | |
strcasestr | utf8casestr | ✔ |
الوظائف المتوفرة والفريدة من نوعها لـ utf8.h:
utf8.h | مكتمل | مفهوم C++14 |
---|---|---|
utf8codepoint | ✔ | ✔ |
utf8rcodepoint | ✔ | ✔ |
utf8size | ✔ | ✔ |
utf8size_lazy | ✔ | ✔ |
utf8nsize_lazy | ✔ | ✔ |
utf8valid | ✔ | ✔ |
utf8nvalid | ✔ | ✔ |
utf8makevalid | ✔ | |
utf8codepointsize | ✔ | ✔ |
utf8catcodepoint | ✔ | |
utf8isupper | ✔ | |
utf8islower | ✔ | |
utf8lwr | ||
utf8upr | ||
utf8lwrcodepoint | ✔ | |
utf8uprcodepoint | ✔ |
ما عليك سوى #include "utf8.h"
في التعليمات البرمجية الخاصة بك!
الأنظمة الأساسية المدعومة حاليًا هي Linux وmacOS وWindows.
المترجمات المدعومة حاليًا هي gcc، و clang، و cl.exe الخاص بـ MSVC، و clang-cl.exe.
تتطابق واجهة برمجة التطبيقات utf8.h مع واجهة برمجة التطبيقات string.h قدر الإمكان حسب التصميم. هناك بعض الاختلافات الرئيسية بالرغم من ذلك.
يستخدم utf8.h char8_t* في C++ 20 بدلاً من char*
في أي مكان في وثائق string.h أو strings.h حيث تشير إلى "البايتات" قمت بتغيير ذلك إلى نقاط ترميز utf8. على سبيل المثال، سيُرجع utf8len عدد نقاط تشفير utf8 في سلسلة utf8 - وهو ما لا يساوي بالضرورة عدد البايتات.
int utf8casecmp ( const void * src1 , const void * src2 );
قم بإرجاع أقل من 0، 0، أكبر من 0 إذا كان src1 < src2
، src1 == src2
، src1 > src2
على التوالي، غير حساس لحالة الأحرف.
void * utf8cat ( void * dst , const void * src );
قم بإلحاق سلسلة utf8 src
بسلسلة utf8 dst
.
void * utf8chr ( const void * src , utf8_int32_t chr );
ابحث عن التطابق الأول لـ utf8 codepoint chr
في سلسلة utf8 src
.
int utf8cmp ( const void * src1 , const void * src2 );
قم بإرجاع أقل من 0، 0، أكبر من 0 إذا كان src1 < src2
،
src1 == src2
, src1 > src2
على التوالي.
void * utf8cpy ( void * dst , const void * src );
انسخ سلسلة utf8 src
على الذاكرة المخصصة في dst
.
size_t utf8cspn ( const void * src , const void * reject );
عدد نقاط تشفير utf8 في سلسلة utf8 src
التي تتكون بالكامل
reject
نقاط تشفير utf8 التي ليست من سلسلة utf8.
void * utf8dup ( const void * src );
قم بتكرار سلسلة utf8 src
عن طريق الحصول على حجمها، malloc
مخزن مؤقت جديد
نسخ البيانات وإعادتها. أو 0 إذا فشل malloc
.
size_t utf8len ( const void * str );
عدد نقاط تشفير utf8 في سلسلة utf8 str
,
باستثناء بايت الإنهاء الفارغ.
size_t utf8nlen ( const void * str , size_t n );
يشبه utf8len
، باستثناء أنه يتم البحث فقط على الأكثر n
بايت من src
.
int utf8ncasecmp ( const void * src1 , const void * src2 , size_t n );
قم بإرجاع أقل من 0، 0، أكبر من 0 إذا كان src1 < src2
، src1 == src2
،
src1 > src2
على التوالي، غير حساس لحالة الأحرف. التحقق على الأكثر n
بايت من كل سلسلة utf8.
void * utf8ncat ( void * dst , const void * src , size_t n );
إلحاق سلسلة utf8 src
بسلسلة utf8 dst
،
الكتابة بحد أقصى n+1
بايت. يمكن أن ينتج utf8 غير صالح
سلسلة إذا وقع n
جزئيًا عبر نقطة ترميز utf8.
int utf8ncmp ( const void * src1 , const void * src2 , size_t n );
قم بإرجاع أقل من 0، 0، أكبر من 0 إذا كان src1 < src2
،
src1 == src2
, src1 > src2
على التوالي. التحقق على الأكثر n
بايت من كل سلسلة utf8.
void * utf8ncpy ( void * dst , const void * src , size_t n );
انسخ سلسلة utf8 src
على الذاكرة المخصصة في dst
.
نسخ على الأكثر n
بايت. إذا وقع n
بشكل جزئي عبر نقطة ترميز utf8، أو إذا لم يكن لدى dst
مساحة كافية لفاصل فارغ، فسيتم قطع السلسلة النهائية للحفاظ على صلاحية utf8.
void * utf8pbrk ( const void * str , const void * accept );
يحدد موقع التواجد الأول في str
utf8 لأي بايت في ملف utf8
accept
سلسلة utf8، أو 0 إذا لم يتم العثور على تطابق.
void * utf8rchr ( const void * src , utf8_int32_t chr );
ابحث عن آخر تطابق لـ utf8 codepoint chr
في سلسلة utf8 src
.
size_t utf8size ( const void * str );
عدد البايتات في سلسلة utf8 str
,
بما في ذلك بايت الإنهاء الفارغ.
size_t utf8size_lazy ( const void * str );
يشبه utf8size
، فيما عدا أنه يتم استبعاد البايت الذي ينتهي بالقيمة الخالية.
size_t utf8nsize_lazy ( const void * str , size_t n );
يشبه utf8size
، فيما عدا أنه يتم البحث فقط على الأكثر عن n
بايت من src
ويتم استبعاد البايت الذي ينتهي بالقيمة الخالية.
size_t utf8spn ( const void * src , const void * accept );
عدد نقاط تشفير utf8 في سلسلة utf8 src
التي تتكون بالكامل
accept
نقاط كود utf8 من سلسلة utf8 .
void * utf8str ( const void * haystack , const void * needle );
موضع needle
سلسلة utf8 في haystack
سلسلة utf8.
void * utf8casestr ( const void * haystack , const void * needle );
موضع needle
سلسلة utf8 في haystack
سلسلة utf8، غير حساس لحالة الأحرف.
void * utf8valid ( const void * str );
قم بإرجاع 0 عند النجاح، أو موضع نقطة تشفير utf8 غير الصالحة عند الفشل.
void * utf8nvalid ( const void * str , size_t n );
يشبه utf8valid
، باستثناء أنه يتم البحث فقط على n
بايت من src
.
int utf8makevalid ( void * str , utf8_int32_t replacement );
العودة 0 على النجاح. يجعل str
صالحة عن طريق استبدال التسلسلات غير الصالحة بنقطة replacement
مكونة من بايت واحد.
void * utf8codepoint ( const void * str , utf8_int32_t * out_codepoint );
يضبط out_codepoint على نقطة ترميز utf8 الحالية في str
، ويعيد عنوان نقطة ترميز utf8 التالية بعد العنوان الحالي في str
.
void * utf8rcodepoint ( const void * str , utf8_int32_t * out_codepoint );
يضبط out_codepoint على نقطة ترميز utf8 الحالية في str
، ويعيد عنوان نقطة ترميز utf8 السابقة قبل العنوان الحالي في str
.
size_t utf8codepointsize ( utf8_int32_t chr );
إرجاع حجم نقطة التشفير المحددة بالبايت.
void * utf8catcodepoint ( void * utf8_restrict str , utf8_int32_t chr , size_t n );
اكتب نقطة تشفير إلى السلسلة المعطاة، وأعد العنوان إلى المكان التالي بعد نقطة التشفير المكتوبة. قم بتمرير عدد البايتات المتبقية في المخزن المؤقت إلى n. إذا لم تكن هناك مساحة كافية لنقطة التشفير، فسترجع هذه الدالة قيمة فارغة.
int utf8islower ( utf8_int32_t chr );
إرجاع 1 إذا كان الحرف المحدد صغيرًا، أو 0 إذا لم يكن كذلك.
int utf8isupper ( utf8_int32_t chr );
إرجاع 1 إذا كان الحرف المحدد كبيرًا، أو 0 إذا لم يكن كذلك.
void utf8lwr ( void * utf8_restrict str );
قم بتحويل السلسلة المحددة إلى جميع نقاط التشفير الصغيرة.
void utf8upr ( void * utf8_restrict str );
قم بتحويل السلسلة المحددة إلى كافة نقاط التعليمات البرمجية الكبيرة.
utf8_int32_t utf8lwrcodepoint ( utf8_int32_t cp );
اجعل نقطة التشفير صغيرة الحجم إن أمكن.
utf8_int32_t utf8uprcodepoint ( utf8_int32_t cp );
اجعل نقطة الكود كبيرة الحجم إن أمكن.
ستقوم الوظائف المختلفة المتوفرة بإجراء مقارنات غير حساسة لحالة الأحرف، أو تحويل سلاسل utf8 من حالة إلى أخرى. نظرًا لاتساع نطاق الكود الموحد، وافتقار المؤلفين إلى فهم ما وراء نقاط التشفير اللاتينية حول ما إذا كانت حالة الأحرف تعني أي شيء، فإن الفئات التالية هي الفئات الوحيدة التي سيتم التحقق منها في التعليمات البرمجية غير الحساسة لحالة الأحرف:
هذا برنامج مجاني وغير مرتبط تم طرحه في المجال العام.
لأي شخص الحرية في نسخ هذا البرنامج أو تعديله أو نشره أو استخدامه أو تجميعه أو بيعه أو توزيعه، سواء في شكل كود مصدر أو في شكل ثنائي مجمع، لأي غرض، تجاري أو غير تجاري، وبأي وسيلة.
في الولايات القضائية التي تعترف بقوانين حقوق الطبع والنشر، يخصص مؤلف أو مؤلفو هذا البرنامج أي وجميع حقوق الطبع والنشر في البرنامج للملكية العامة. إننا نقوم بهذا التفاني لصالح الجمهور بشكل عام وعلى حساب ورثتنا وخلفائنا. نعتزم أن يكون هذا التفاني بمثابة تنازل صريح إلى الأبد عن جميع الحقوق الحالية والمستقبلية لهذا البرنامج بموجب قانون حقوق الطبع والنشر.
يتم توفير البرنامج "كما هو"، دون أي ضمان من أي نوع، صريحًا أو ضمنيًا، بما في ذلك، على سبيل المثال لا الحصر، ضمانات القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. لا يتحمل المؤلفون بأي حال من الأحوال المسؤولية عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في إجراء العقد أو الضرر أو غير ذلك، الناشئة عن أو خارج أو فيما يتعلق بالبرنامج أو الاستخدام أو المعاملات الأخرى في البرنامج.
لمزيد من المعلومات، يرجى الرجوع إلى http://unlicense.org/