الفرق بين المراجعتين لصفحة: «Ruby/Encoding/Converter/primitive convert»

من موسوعة حسوب
< Ruby‏ | Encoding‏ | Converter
لا ملخص تعديل
طلا ملخص تعديل
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 2: سطر 2:
يحوّل التابع <code>primitive_convert</code> ترميز جميع المحتويات المخزَّنة مؤقتًا (buffer) في مخزن معين أو مجال محدد منها -من ترميز المصدر إلى ترميز الوجهة- ثم يضع الناتج في مخزَّن محدَّد.
يحوّل التابع <code>primitive_convert</code> ترميز جميع المحتويات المخزَّنة مؤقتًا (buffer) في مخزن معين أو مجال محدد منها -من ترميز المصدر إلى ترميز الوجهة- ثم يضع الناتج في مخزَّن محدَّد.


يحذف التّابع <code>primitive_convert</code> الجزء المحوّل من المخزن source_buffer المصدر، ويضعه في المخزن destination_buffer الوجهة أو يخزنِّه مؤقتًا في كائن من الصنف<code>[[Ruby/Encoding/Converter|Encoding::Converter]]</code> بعد تحويله بالتأكيد.
يحذف التّابع <code>primitive_convert</code> الجزء المحوّل من المخزن <code>source_buffer</code> المصدر، ويضعه في المخزن <code>destination_buffer</code> الوجهة أو يخزنِّه مؤقتًا في كائن من الصنف<code>[[Ruby/Encoding/Converter|Encoding::Converter]]</code> بعد تحويله بالتأكيد.


يوقف التّابع <code>primitive_convert</code> عملية التحويل عند تحقّق أحد الشّروط التالية:
يوقف التّابع <code>primitive_convert</code> عملية التحويل عند تحقّق أحد الشّروط التالية:
* وجود سلسلة بايت غير صالحة (invalid_byte_sequence:) في المخزن source_buffer المصدر  . يُعيد التابعان <code>[[Ruby/Encoding/Converter/primitive errinfo|primitive_errinfo]]</code> <code>[[Ruby/Encoding/Converter/last error|وlast_error]]</code> تفاصيل الخطأ.
* وجود سلسلة بايت غير صالحة (<code>invalid_byte_sequence:</code>) في المخزن <code>source_buffer</code> المصدر . يُعيد التابعان <code>[[Ruby/Encoding/Converter/primitive errinfo|primitive_errinfo]]</code> و <code>[[Ruby/Encoding/Converter/last error|last_error]]</code> تفاصيل الخطأ.
* نهايةٌ غير متوقعةٍ (incomplete_input:) للمخزن source_buffer المصدر، إذ يحدث هذا فقط عندما يكون partial_input: غير محدد. يُعيد التابعان <code>[[Ruby/Encoding/Converter/primitive errinfo|primitive_errinfo]]</code> و<code>[[Ruby/Encoding/Converter/last error|last_error]]</code>تفاصيل الخطأ.
* نهايةٌ غير متوقعةٍ (<code>incomplete_input:</code>) للمخزن <code>source_buffer</code> المصدر، إذ يحدث هذا فقط عندما يكون <code>partial_input:</code> غير محدد. يُعيد التابعان <code>[[Ruby/Encoding/Converter/primitive errinfo|primitive_errinfo]]</code> و <code>[[Ruby/Encoding/Converter/last error|last_error]]</code> تفاصيل الخطأ.
* محرفٌ غير قابلٍ لإعادة التمثيل (‎:undefined_conversion) في الترميز الهدف، يُعيد التابعان <code>[[Ruby/Encoding/Converter/primitive errinfo|primitive_errinfo]]</code> و <code>[[Ruby/Encoding/Converter/last error|last_error]]</code> تفاصيل الخطأ.
* محرفٌ غير قابلٍ لإعادة التمثيل (‎<code>:undefined_conversion</code>) في الترميز الهدف، يُعيد التابعان <code>[[Ruby/Encoding/Converter/primitive errinfo|primitive_errinfo]]</code> و <code>[[Ruby/Encoding/Converter/last error|last_error]]</code> تفاصيل الخطأ.
* بعد توليد بعض المخرجات، وقبل انتهاء المدخلات (after_output:)، إذ يحدث هذا فقط عندما يُحدَّد <code>after_output:</code>.
* بعد توليد بعض المخرجات، وقبل انتهاء المدخلات (<code>after_output:</code>)، إذ يحدث هذا فقط عندما يُحدَّد <code>after_output:</code>.
* امتلاءالمخزن destination_buffer الوجهة (destination_buffer_full:)، إذ يحدث هذا فقط عندما لا تساوي قيمة المعامل <code>destination_bytesize</code> القيمة <code>nil</code>.
* امتلاءالمخزن <code>destination_buffer</code> الوجهة (<code>destination_buffer_full:</code>)، إذ يحدث هذا فقط عندما لا تساوي قيمة المعامل <code>destination_bytesize</code> القيمة <code>nil</code>.
* كون المخزن source_buffer المصدر فارغًا (source_buffer_empty:)، يحدث هذا فقط عندما يُحدّد partial_input:.
* كون المخزن <code>source_buffer</code> المصدر فارغًا (<code>source_buffer_empty:</code>)، يحدث هذا فقط عندما يُحدّد <code>partial_input:</code>.
* انتهاء عملية التحويل (finished:).
* انتهاء عملية التحويل (<code>finished:</code>).


== البنية العامة ==
== البنية العامة ==
سطر 24: سطر 24:




</syntaxhighlight>يحدد المعاملان <code>destination_byteoffset</code> و <code>destination_bytesize</code> مكان ومجال إضافة الناتج المحوَّل في المخزن destination_buffer بدقة.
</syntaxhighlight>يحدد المعاملان <code>destination_byteoffset</code> و <code>destination_bytesize</code> مكان ومجال إضافة الناتج المحوَّل في المخزن <code>destination_buffer</code> بدقة.


== المعاملات ==
== المعاملات ==
سطر 44: سطر 44:


العناصر المتاحة لقيمة المعامل <code>opt</code> هي:
العناصر المتاحة لقيمة المعامل <code>opt</code> هي:
* إن اسُعمل النوع <code>hash</code>، فيمكن أن يتكون من::
* إن اسُعمل النوع <code>hash</code>، فيمكن أن يتكون من:
** partial_input => true: قد يكون المخزن المصدر جزءًا من مصدرٍ أكبر.
** <code>partial_input => true</code>: قد يكون المخزن المصدر جزءًا من مصدرٍ أكبر.
** after_output => true: يوقف التحويل بعد توليد قسم من المخرجات وقبل انتهاء المدخلات.
** <code>after_output => true</code>: يوقف التحويل بعد توليد قسم من المخرجات وقبل انتهاء المدخلات.


* أما إن استعمل النوع <code>integer</code>، فيمكن أن يتكون من::
* أما إن استعمل النوع <code>integer</code>، فيمكن أن يتكون من::
** Encoding::Converter::PARTIAL_INPUT
** <code>Encoding::Converter::PARTIAL_INPUT</code>
** Encoding::Converter::AFTER_OUTPUT
** <code>Encoding::Converter::AFTER_OUTPUT</code>
النتائج المحتملة:
النتائج المحتملة:
* invalid_byte_sequence:
* <code>invalid_byte_sequence:</code>
* incomplete_input:
* <code>incomplete_input:</code>
* undefined_conversion:
* <code>undefined_conversion:</code>
* after_output:
* <code>after_output:</code>
* destination_buffer_full:
* <code>destination_buffer_full:</code>
* source_buffer_empty:
* <code>source_buffer_empty:</code>
* finished:
* <code>finished:</code>


== القيم المعادة ==
== القيم المعادة ==
سطر 66: سطر 66:
مثالٌ عن استخدام التابع <code>primitive_convert</code>:<syntaxhighlight lang="ruby">
مثالٌ عن استخدام التابع <code>primitive_convert</code>:<syntaxhighlight lang="ruby">
ec = Encoding::Converter.new("UTF-8", "UTF-16BE")
ec = Encoding::Converter.new("UTF-8", "UTF-16BE")
ret = ec.primitive_convert(src="pi", dst="", nil, 100)
ret = ec.primitive_convert(src="pi", dst="", nil, 100)
p [ret, src, dst] #=> [:finished, "", "\x00p\x00i"]
p [ret, src, dst] #=> [:finished, "", "\x00p\x00i"]


ec = Encoding::Converter.new("UTF-8", "UTF-16BE")
ec = Encoding::Converter.new("UTF-8", "UTF-16BE")
ret = ec.primitive_convert(src="pi", dst="", nil, 1)
ret = ec.primitive_convert(src="pi", dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "i", "\x00"]
p [ret, src, dst] #=> [:destination_buffer_full, "i", "\x00"]
ret = ec.primitive_convert(src, dst="", nil, 1)
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "", "p"]
p [ret, src, dst] #=> [:destination_buffer_full, "", "p"]
ret = ec.primitive_convert(src, dst="", nil, 1)
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "", "\x00"]
p [ret, src, dst] #=> [:destination_buffer_full, "", "\x00"]
ret = ec.primitive_convert(src, dst="", nil, 1)
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:finished, "", "i"]
p [ret, src, dst] #=> [:finished, "", "i"]


سطر 95: سطر 85:
* التّابع <code>[[Ruby/Encoding/Converter/primitive errinfo|primitive_errinfo]]</code>: يُعيد معلوماتٍ مهمّةً حول آخر خطأٍ حدث في مصفوفة مكونة من خمسة عناصر.
* التّابع <code>[[Ruby/Encoding/Converter/primitive errinfo|primitive_errinfo]]</code>: يُعيد معلوماتٍ مهمّةً حول آخر خطأٍ حدث في مصفوفة مكونة من خمسة عناصر.
* التّابع <code>[[Ruby/Encoding/Converter/asciicompat encoding|asciicompat_encoding]]</code>: يُعيد التّرميز المتوافق مع ASCII المقابل للترميز المعطى.
* التّابع <code>[[Ruby/Encoding/Converter/asciicompat encoding|asciicompat_encoding]]</code>: يُعيد التّرميز المتوافق مع ASCII المقابل للترميز المعطى.
* التّابع <code>[[Ruby/Encoding/Converter/destination encoding|destination_encoding]]</code>: يُعيد التّرميز الوجهة على شكل كائنٍ من الصنف Encoding.
* التّابع <code>[[Ruby/Encoding/Converter/destination encoding|destination_encoding]]</code>: يُعيد التّرميز الوجهة على شكل كائنٍ من الصنف <code>[[Ruby/Encoding|Encoding]]</code>.
* التّابع <code>[[Ruby/Encoding/Converter/source encoding|source_encoding]]</code>: يُعيد الترميز المصدر على شكل كائن من الصنف Encoding.
* التّابع <code>[[Ruby/Encoding/Converter/source encoding|source_encoding]]</code>: يُعيد الترميز المصدر على شكل كائن من الصنف <code>[[Ruby/Encoding|Encoding]]</code>.
* التّابع <code>[[Ruby/Encoding/Converter/insert output|insert_output]]</code>: يضيف سلسلةً نصيّةً إلى محوِّل التّرميز، إذ سيحويل ترميز هذه السلسلة إلى ترميز الوجهة نفسه وتوضع في نهاية مخرجات عملية التحويل.
* التّابع <code>[[Ruby/Encoding/Converter/insert output|insert_output]]</code>: يضيف سلسلةً نصيّةً إلى محوِّل التّرميز، إذ سيحويل ترميز هذه السلسلة إلى ترميز الوجهة نفسه وتوضع في نهاية مخرجات عملية التحويل.
* التّابع <code>[[Ruby/Encoding/Converter/finish|finish]]</code>: يُنهي محوّل الترميز، ويُعيد الجزء الأخير من السلسلة النصيّة التي يحول ترميزها حينذاك.
* التّابع <code>[[Ruby/Encoding/Converter/finish|finish]]</code>: يُنهي محوّل الترميز، ويُعيد الجزء الأخير من السلسلة النصيّة التي يحول ترميزها حينذاك.
سطر 104: سطر 94:
[[تصنيف:Ruby]]
[[تصنيف:Ruby]]
[[تصنيف:Ruby Method]]
[[تصنيف:Ruby Method]]
[[تصنيف:Ruby Encoding]]
[[تصنيف:Ruby Encoding::Converter]]
[[تصنيف:Ruby Encoding::Converter]]

المراجعة الحالية بتاريخ 10:43، 18 أكتوبر 2018

يحوّل التابع primitive_convert ترميز جميع المحتويات المخزَّنة مؤقتًا (buffer) في مخزن معين أو مجال محدد منها -من ترميز المصدر إلى ترميز الوجهة- ثم يضع الناتج في مخزَّن محدَّد.

يحذف التّابع primitive_convert الجزء المحوّل من المخزن source_buffer المصدر، ويضعه في المخزن destination_buffer الوجهة أو يخزنِّه مؤقتًا في كائن من الصنفEncoding::Converter بعد تحويله بالتأكيد.

يوقف التّابع primitive_convert عملية التحويل عند تحقّق أحد الشّروط التالية:

  • وجود سلسلة بايت غير صالحة (invalid_byte_sequence:) في المخزن source_buffer المصدر . يُعيد التابعان primitive_errinfo و last_error تفاصيل الخطأ.
  • نهايةٌ غير متوقعةٍ (incomplete_input:) للمخزن source_buffer المصدر، إذ يحدث هذا فقط عندما يكون partial_input: غير محدد. يُعيد التابعان primitive_errinfo و last_error تفاصيل الخطأ.
  • محرفٌ غير قابلٍ لإعادة التمثيل (‎:undefined_conversion) في الترميز الهدف، يُعيد التابعان primitive_errinfo و last_error تفاصيل الخطأ.
  • بعد توليد بعض المخرجات، وقبل انتهاء المدخلات (after_output:)، إذ يحدث هذا فقط عندما يُحدَّد after_output:.
  • امتلاءالمخزن destination_buffer الوجهة (destination_buffer_full:)، إذ يحدث هذا فقط عندما لا تساوي قيمة المعامل destination_bytesize القيمة nil.
  • كون المخزن source_buffer المصدر فارغًا (source_buffer_empty:)، يحدث هذا فقط عندما يُحدّد partial_input:.
  • انتهاء عملية التحويل (finished:).

البنية العامة

primitive_convert(source_buffer, destination_buffer)  symbol

primitive_convert(source_buffer, destination_buffer, destination_byteoffset)  symbol

primitive_convert(source_buffer, destination_buffer, destination_byteoffset, destination_bytesize)  symbol

primitive_convert(source_buffer, destination_buffer, destination_byteoffset, destination_bytesize, opt)  symbol

يحدد المعاملان destination_byteoffset و destination_bytesize مكان ومجال إضافة الناتج المحوَّل في المخزن destination_buffer بدقة.

المعاملات

source_buffer

يجب أن يكون سلسلةً نصيةً (string) أو قيمةً عدميةً (nil). تعني القيمة العدمية، إن أعطيت، سلسلةً نصيةً فارغةً.

destination_buffer

سلسلة نصية تمثل المخزَّن المؤقت الذي سيوضع فيه ناتج عملية التحويل. بعد انتهاء عملية التحويل، يعاد حساب حجم المخزن destination_buffer ليصبح destination_byteoffset + عدد البايتات الفعلية الناتجة أو destination_bytesize (إن أعطي). يُضبَط أيضًا ترميز محتوى المخزن destination_buffer إلى الترميز destination_encoding.

destination_byteoffset

يحدد موضع البداية حيث سيُخزَّن الناتج المُحوَّل (بالبايت) بدءًا من بداية المخزن destination_buffer. يجب أن تكون عددًا صحيحًا (integer) أو قيمةً عدميةً. تعني القيمة العدمية نهاية المخزن destination_buffer أي أنَّ الناتج سيضاف في نهاية المخزَّن وفي المجال الذي يحدده المعامل destination_bytesize. القيمة الافتراضية لهذا المعامل هي: nil، إذا لم يُعطَ.

destination_bytesize

يحدد أكبر عدد من البايتات التي تمثل المجال الأقصى الذي سيُخزَّن فيه الناتج المُحوَّل في المخزن destination_buffer. يجب أن يكون عدد صحيحًا أو قيمة عدميَّة. تشير القيمة nil إلى عدم وجود حد أقصى لتخزين الناتج المحول. القيمة الافتراضية لهذا المعامل هي: nil، إذا لم يُعطَ.

opt

يجب أن يكون nil، أو hash، أو integer. تعني القيمة nil أنه لا يوجد رايات (flags). القيمة الافتراضية لهذا المعامل هي: nil، إذا لم يُعطَ.

العناصر المتاحة لقيمة المعامل opt هي:

  • إن اسُعمل النوع hash، فيمكن أن يتكون من:
    • partial_input => true: قد يكون المخزن المصدر جزءًا من مصدرٍ أكبر.
    • after_output => true: يوقف التحويل بعد توليد قسم من المخرجات وقبل انتهاء المدخلات.
  • أما إن استعمل النوع integer، فيمكن أن يتكون من::
    • Encoding::Converter::PARTIAL_INPUT
    • Encoding::Converter::AFTER_OUTPUT

النتائج المحتملة:

  • invalid_byte_sequence:
  • incomplete_input:
  • undefined_conversion:
  • after_output:
  • destination_buffer_full:
  • source_buffer_empty:
  • finished:

القيم المعادة

يعاد كائن من النوع symbol.

أمثلة

مثالٌ عن استخدام التابع primitive_convert:

ec = Encoding::Converter.new("UTF-8", "UTF-16BE")
ret = ec.primitive_convert(src="pi", dst="", nil, 100)
p [ret, src, dst] #=> [:finished, "", "\x00p\x00i"]

ec = Encoding::Converter.new("UTF-8", "UTF-16BE")
ret = ec.primitive_convert(src="pi", dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "i", "\x00"]
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "", "p"]
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:destination_buffer_full, "", "\x00"]
ret = ec.primitive_convert(src, dst="", nil, 1)
p [ret, src, dst] #=> [:finished, "", "i"]

انظر أيضًا

  • التّابع primitive_errinfo: يُعيد معلوماتٍ مهمّةً حول آخر خطأٍ حدث في مصفوفة مكونة من خمسة عناصر.
  • التّابع asciicompat_encoding: يُعيد التّرميز المتوافق مع ASCII المقابل للترميز المعطى.
  • التّابع destination_encoding: يُعيد التّرميز الوجهة على شكل كائنٍ من الصنف Encoding.
  • التّابع source_encoding: يُعيد الترميز المصدر على شكل كائن من الصنف Encoding.
  • التّابع insert_output: يضيف سلسلةً نصيّةً إلى محوِّل التّرميز، إذ سيحويل ترميز هذه السلسلة إلى ترميز الوجهة نفسه وتوضع في نهاية مخرجات عملية التحويل.
  • التّابع finish: يُنهي محوّل الترميز، ويُعيد الجزء الأخير من السلسلة النصيّة التي يحول ترميزها حينذاك.

مصادر