Unicode
يوفر وحدة Unicode
وظائف أساسية لإدارة أحرف Unicode والسلاسل. تشمل التحقق من الصحة، وتحديد الفئة، والتطبيع، وتحويل الحالة، وتقسيم الجرافيم، مما يمكّن من التعامل الفعال مع بيانات Unicode.
Unicode
— Moduleيوفر نموذج Unicode
وظائف أساسية لإدارة أحرف Unicode والسلاسل. ويشمل التحقق من الصحة، وتحديد الفئة، والتطبيع، وتحويل الحالة، وتقسيم الجرافيم، مما يمكّن من التعامل الفعال مع بيانات Unicode.
Unicode.julia_chartransform
— FunctionUnicode.julia_chartransform(c::Union{Char,Integer})
قم بتحويل حرف Unicode (Char
) أو نقطة الشيفرة (Integer
) c
إلى الحرف أو نقطة الشيفرة "المكافئة" المقابلة، وفقًا للتكافؤ المخصص المستخدم داخل محلل جوليا (بالإضافة إلى تطبيع NFC).
على سبيل المثال، يتم التعامل مع 'µ'
(U+00B5 ميكرو) على أنه مكافئ لـ 'μ'
(U+03BC مو) بواسطة محلل جوليا، لذا فإن julia_chartransform
يقوم بإجراء هذا التحويل مع ترك الأحرف الأخرى دون تغيير:
julia> Unicode.julia_chartransform('µ')
'μ': Unicode U+03BC (الفئة Ll: حرف، صغير)
julia> Unicode.julia_chartransform('x')
'x': ASCII/Unicode U+0078 (الفئة Ll: حرف، صغير)
julia_chartransform
مفيد بشكل أساسي لتمريره إلى دالة Unicode.normalize
من أجل محاكاة التطبيع المستخدم بواسطة محلل جوليا:
julia> s = "µö"
"µö"
julia> s2 = Unicode.normalize(s, compose=true, stable=true, chartransform=Unicode.julia_chartransform)
"μö"
julia> collect(s2)
2-element Vector{Char}:
'μ': Unicode U+03BC (الفئة Ll: حرف، صغير)
'ö': Unicode U+00F6 (الفئة Ll: حرف، صغير)
julia> s2 == string(Meta.parse(s))
true
تم تقديم هذه الدالة في جوليا 1.8.
Unicode.isassigned
— FunctionUnicode.isassigned(c) -> Bool
ارجع true
إذا كانت الحرف أو العدد الصحيح المعطى هو نقطة كود يونيكود مخصصة.
أمثلة
julia> Unicode.isassigned(101)
true
julia> Unicode.isassigned('\x01')
true
Unicode.isequal_normalized
— Functionisequal_normalized(s1::AbstractString, s2::AbstractString; casefold=false, stripmark=false, chartransform=identity)
ارجع ما إذا كانت s1
و s2
سلاسل يونيكود متكافئة بشكل قنوني. إذا كان casefold=true
، يتم تجاهل الحالة (يتم تنفيذ طي الحالة في يونيكود)؛ إذا كان stripmark=true
، يتم إزالة العلامات التشكيلية وغيرها من الأحرف المجمعة.
كما هو الحال مع Unicode.normalize
، يمكنك أيضًا تمرير دالة عشوائية عبر كلمة chartransform
(تحويل نقاط الشيفرة Integer
إلى نقاط الشيفرة) لأداء تطبيع مخصص، مثل Unicode.julia_chartransform
.
تمت إضافة دالة isequal_normalized
في Julia 1.8.
أمثلة
على سبيل المثال، يمكن إنشاء السلسلة "noël"
بطريقتين متكافئتين بشكل قنوني في يونيكود، اعتمادًا على ما إذا كانت "ë"
تتكون من نقطة شيفرة واحدة U+00EB أو من الحرف ASCII 'e'
متبوعًا بحرف U+0308 المدمج.
julia> s1 = "noël"
"noël"
julia> s2 = "noël"
"noël"
julia> s1 == s2
false
julia> isequal_normalized(s1, s2)
true
julia> isequal_normalized(s1, "noel", stripmark=true)
true
julia> isequal_normalized(s1, "NOËL", casefold=true)
true
Unicode.normalize
— FunctionUnicode.normalize(s::AbstractString; keywords...)
Unicode.normalize(s::AbstractString, normalform::Symbol)
قم بتطبيع السلسلة s
. بشكل افتراضي، يتم تنفيذ التركيب القياسي (compose=true
) دون ضمان استقرار إصدار Unicode (compat=false
)، مما ينتج عنه أقصر سلسلة مكافئة ممكنة ولكن قد يقدم أحرف تركيب غير موجودة في إصدارات Unicode السابقة.
بدلاً من ذلك، يمكن تحديد أحد "الأشكال العادية" الأربعة من معيار Unicode: يمكن أن يكون normalform
هو :NFC
، :NFD
، :NFKC
، أو :NFKD
. تقوم الأشكال العادية C (التركيب القياسي) وD (التحلل القياسي) بتحويل تمثيلات بصرية متطابقة مختلفة لنفس السلسلة المجردة إلى شكل قياسي واحد، مع كون الشكل C أكثر إحكامًا. تقوم الأشكال العادية KC وKD أيضًا بتوحيد "المكافئات التوافقية": حيث تقوم بتحويل الأحرف التي تشبه مجرّدًا ولكنها متميزة بصريًا إلى اختيار قياسي واحد (على سبيل المثال، تقوم بتوسيع الروابط إلى الأحرف الفردية)، مع كون الشكل KC أكثر إحكامًا.
بدلاً من ذلك، يمكن الحصول على تحكم أدق وتحولات إضافية عن طريق استدعاء Unicode.normalize(s; keywords...)
، حيث يتم تحديد أي عدد من خيارات الكلمات الرئيسية المنطقية التالية (التي تكون جميعها افتراضية على false
باستثناء compose
):
compose=false
: عدم إجراء التركيب القياسيdecompose=true
: إجراء التحلل القياسي بدلاً من التركيب القياسي (compose=true
يتم تجاهله إذا كان موجودًا)compat=true
: يتم توحيد المكافئات التوافقيةcasefold=true
: إجراء طي الحالة Unicode، على سبيل المثال، لمقارنة السلاسل غير الحساسة للحالةnewline2lf=true
،newline2ls=true
، أوnewline2ps=true
: تحويل تسلسلات الأسطر المختلفة (LF، CRLF، CR، NEL) إلى حرف تغذية سطر (LF) أو فصل الأسطر (LS) أو فصل الفقرات (PS)، على التواليstripmark=true
: إزالة العلامات التشكيلية (مثل النبرات)stripignore=true
: إزالة الأحرف "التي يمكن تجاهلها افتراضيًا" في Unicode (مثل الواصل الناعم أو علامة الاتجاه من اليسار إلى اليمين)stripcc=true
: إزالة أحرف التحكم؛ يتم تحويل علامات التبويب الأفقية وتغذيات الشكل إلى مسافات؛ يتم أيضًا تحويل الأسطر الجديدة إلى مسافات ما لم يتم تحديد علامة تحويل الأسطر الجديدةrejectna=true
: إلقاء خطأ إذا تم العثور على نقاط رمزية غير مخصصةstable=true
: فرض استقرار إصدار Unicode (عدم إدخال أحرف مفقودة من إصدارات Unicode السابقة)
يمكنك أيضًا استخدام الكلمة الرئيسية chartransform
(التي تكون افتراضية على identity
) لتمرير دالة تعيّن نقاط الرموز Integer
إلى نقاط الرموز، والتي يتم استدعاؤها على كل حرف في s
أثناء معالجته، من أجل إجراء تطبيع إضافي عشوائي. على سبيل المثال، من خلال تمرير chartransform=Unicode.julia_chartransform
، يمكنك تطبيق بعض تطبيع الأحرف الخاصة بـ Julia التي يتم تنفيذها بواسطة Julia عند تحليل المعرفات (بالإضافة إلى تطبيع NFC: compose=true, stable=true
).
على سبيل المثال، يتوافق NFKC مع الخيارات compose=true, compat=true, stable=true
.
أمثلة
julia> "é" == Unicode.normalize("é") #LHS: Unicode U+00e9, RHS: U+0065 & U+0301
true
julia> "μ" == Unicode.normalize("µ", compat=true) #LHS: Unicode U+03bc, RHS: Unicode U+00b5
true
julia> Unicode.normalize("JuLiA", casefold=true)
"julia"
julia> Unicode.normalize("JúLiA", stripmark=true)
"JuLiA"
تتطلب حجة الكلمة الرئيسية chartransform
Julia 1.8.
Unicode.graphemes
— Functiongraphemes(s::AbstractString) -> GraphemeIterator
إرجاع مُكرِّر على السلاسل الفرعية لـ s
التي تتوافق مع الحروف الممتدة في السلسلة، كما هو محدد بواسطة Unicode UAX #29. (تقريبًا، هذه هي ما يدركه المستخدمون كأحرف فردية، على الرغم من أنها قد تحتوي على أكثر من نقطة رمز واحدة؛ على سبيل المثال، حرف مدمج مع علامة تمييز هو حرف واحد.)
graphemes(s::AbstractString, m:n) -> SubString
يُرجع SubString
من s
يتكون من الحروف المرسومة من m
إلى n
في السلسلة s
، حيث الحجة الثانية m:n
هي نطاق عددي AbstractUnitRange
.
بشكل فضفاض، هذا يتوافق مع "الحروف" المدركة من قبل المستخدم من m:n
في السلسلة. على سبيل المثال:
julia> s = graphemes("exposé", 3:6)
"posé"
julia> collect(s)
5-element Vector{Char}:
'p': ASCII/Unicode U+0070 (category Ll: Letter, lowercase)
'o': ASCII/Unicode U+006F (category Ll: Letter, lowercase)
's': ASCII/Unicode U+0073 (category Ll: Letter, lowercase)
'e': ASCII/Unicode U+0065 (category Ll: Letter, lowercase)
'́': Unicode U+0301 (category Mn: Mark, nonspacing)
يتكون هذا من النقاط البرمجية من 3 إلى 7 (Char
s) في "exposé"
، لأن الحرف المرسوم "é"
هو في الواقع نقطتين برمجيتين Unicode (حرف 'e'
يليه حرف الجمع ذو التشكيل الحاد U+0301).
لأن العثور على حدود الحروف المرسومة يتطلب تكرارًا على محتويات السلسلة، فإن دالة graphemes(s, m:n)
تتطلب وقتًا يتناسب مع طول السلسلة (عدد النقاط البرمجية) قبل نهاية السلسلة الفرعية.
تتطلب حجة m:n
في graphemes
Julia 1.9.