فارسی نویسی در گادو انجین - (متنهای پویا)
سه شنبه, ۲۵ اسفند ۱۳۹۴، ۰۶:۳۳ ب.ظ
در ادامهی بخش قبل، اگر گیمی داشته باشیم که متنهای آن به صورت پیشفرض، یا ثابت نباشند با مشکل مواجه میشویم، برای مثال، زمانی که کاربر نام خود را وارد میکند، یا همانند بازی "حروف ریز" که کاربر متن آن را به صورت تصادفی انتخاب میکند...
برای این مورد، حقیر درحد توان و معلوماتم قطعه کدی نوشتهام که امیدوارم به کار شما نیز بیاید (البته اگر شخصی بدین منظور سورس گودوت را ویرایش کند یا راه حلی بهتر ارائه نماید لطف بزرگی در حق بنده حقیر و دوستداران این انجین انجام داده است) :
میتوانید قطعه کد را از اینجا دانلود کنید یا در ادامه مطلب مشاهده فرمایید.
برای این مورد، حقیر درحد توان و معلوماتم قطعه کدی نوشتهام که امیدوارم به کار شما نیز بیاید (البته اگر شخصی بدین منظور سورس گودوت را ویرایش کند یا راه حلی بهتر ارائه نماید لطف بزرگی در حق بنده حقیر و دوستداران این انجین انجام داده است) :
میتوانید قطعه کد را از اینجا دانلود کنید یا در ادامه مطلب مشاهده فرمایید.
extends Node2D
var persiaWords = [
"آ","ﺎ","آ","ﺎ",
"ا","ﺎ","ا","ﺎ",
"ب","ﺐ","ﺑ","ﺒ",
"پ","ﭗ","ﭘ","ﭙ",
"ت","ﺖ","ﺗ","ﺘ",
"ث","ﺚ","ﺛ","ﺜ",
"ج","ﺞ","ﺟ","ﺠ",
"چ","ﭻ","ﭼ","ﭽ",
"ح","ﺢ","ﺣ","ﺤ",
"خ","ﺦ","ﺧ","ﺨ",
"د","ﺪ","د","ﺪ",
"ذ","ﺬ","ذ","ﺬ",
"ر","ﺮ","ر","ﺮ",
"ز","ﺰ","ز","ﺰ",
"ژ","ﮋ","ژ","ﮋ",
"س","ﺲ","ﺳ","ﺴ",
"ش","ﺶ","ﺷ","ﺸ",
"ص","ﺺ","ﺻ","ﺼ",
"ض","ﺾ","ﺿ","ﻀ",
"ط","ﻂ","ﻃ","ﻄ",
"ظ","ﻆ","ﻇ","ﻈ",
"ع","ﻊ","ﻋ","ﻌ",
"غ","ﻎ","ﻏ","ﻐ",
"ف","ﻒ","ﻓ","ﻔ",
"ق","ﻖ","ﻗ","ﻘ",
"ک","ﮏ","ﮐ","ﮑ",
"گ","ﮓ","ﮔ","ﮕ",
"ل","ﻞ","ﻟ","ﻠ",
"م","ﻢ","ﻣ","ﻤ",
"ن","ﻦ","ﻧ","ﻨ",
"و","ﻮ","و","ﻮ",
"ه","ﻪ","ﻫ","ﻬ",
"ی","ﯽ","ﯾ","ﯿ",
"ﻻ","ﻼ","ﻻ","ﻼ"]
var persia=["آ","ا","ب","پ","ت","ث","ج","چ","ح","خ","د","ذ","ر","ز","ژ","س","ش","ص","ض","ط","ظ","ع","غ","ف","ق","ک","گ","ل","م","ن","و","ه","ی"]
var special = ["آ","ا","د","ذ","ر","ز","ژ","و",
" ","",".","+","-",")","(","*","&","^","%","$",
"#","@","!","~","`","\"","\\","|","}","{","0","9",
"8","7","6","5","4","3","2","1","0","?","/",">",
"<","ء",":","،","ٍ","ٌ","ً","ّ","ِ","َ","؛",",","=","_","[","]","«","»","ـ"]
func specialno(text):
for i in range(special.size()):
if(text==special[i]):
return true
return false
func specialChar( letter ):
for i in range( 8, special.size() ):
if( special[ i ] == letter ):
if ( i == 0 ):
return -2
else:
return (-i)-2
return -1
func persiaSet(end,array):
var text = ""
var no
var pos
for i in range( end ):
pos = specialChar( array[ i ] )
print(pos)
for j in range(persia.size()):
if(persia[ j ]==array[ i ]):
pos=j
break
if ( i == 0 ):
if( i == end - 1 ):
no = 0
else:
no = 2
elif( specialno(array[ i - 1 ]) ):
if( i != end - 1):
if( specialChar( array[ i + 1 ] ) < -1):
no = 0
else:
no = 2
else:
no = 0
else:
if(i != end-1):
if( specialChar( array[ i + 1 ] ) < -1):
no = 1
else:
no = 3
else:
no = 1
if (pos >= 0):
text = persiaWords[(pos*4)+no]+text
else:
text = special[abs(pos+2)]+text
return text
pass
func _ready():
var SampleText = ")متن 1: این متن »نمونهای« است برای بررسی \"صحت حروفچینی\" _*+گودوتانجین+*_ ("
get_node("Label").set_text(persiaSet(SampleText.length(),SampleText))
get_node("Label 2").set_text(SampleText)
pass
var persiaWords = [
"آ","ﺎ","آ","ﺎ",
"ا","ﺎ","ا","ﺎ",
"ب","ﺐ","ﺑ","ﺒ",
"پ","ﭗ","ﭘ","ﭙ",
"ت","ﺖ","ﺗ","ﺘ",
"ث","ﺚ","ﺛ","ﺜ",
"ج","ﺞ","ﺟ","ﺠ",
"چ","ﭻ","ﭼ","ﭽ",
"ح","ﺢ","ﺣ","ﺤ",
"خ","ﺦ","ﺧ","ﺨ",
"د","ﺪ","د","ﺪ",
"ذ","ﺬ","ذ","ﺬ",
"ر","ﺮ","ر","ﺮ",
"ز","ﺰ","ز","ﺰ",
"ژ","ﮋ","ژ","ﮋ",
"س","ﺲ","ﺳ","ﺴ",
"ش","ﺶ","ﺷ","ﺸ",
"ص","ﺺ","ﺻ","ﺼ",
"ض","ﺾ","ﺿ","ﻀ",
"ط","ﻂ","ﻃ","ﻄ",
"ظ","ﻆ","ﻇ","ﻈ",
"ع","ﻊ","ﻋ","ﻌ",
"غ","ﻎ","ﻏ","ﻐ",
"ف","ﻒ","ﻓ","ﻔ",
"ق","ﻖ","ﻗ","ﻘ",
"ک","ﮏ","ﮐ","ﮑ",
"گ","ﮓ","ﮔ","ﮕ",
"ل","ﻞ","ﻟ","ﻠ",
"م","ﻢ","ﻣ","ﻤ",
"ن","ﻦ","ﻧ","ﻨ",
"و","ﻮ","و","ﻮ",
"ه","ﻪ","ﻫ","ﻬ",
"ی","ﯽ","ﯾ","ﯿ",
"ﻻ","ﻼ","ﻻ","ﻼ"]
var persia=["آ","ا","ب","پ","ت","ث","ج","چ","ح","خ","د","ذ","ر","ز","ژ","س","ش","ص","ض","ط","ظ","ع","غ","ف","ق","ک","گ","ل","م","ن","و","ه","ی"]
var special = ["آ","ا","د","ذ","ر","ز","ژ","و",
" ","",".","+","-",")","(","*","&","^","%","$",
"#","@","!","~","`","\"","\\","|","}","{","0","9",
"8","7","6","5","4","3","2","1","0","?","/",">",
"<","ء",":","،","ٍ","ٌ","ً","ّ","ِ","َ","؛",",","=","_","[","]","«","»","ـ"]
func specialno(text):
for i in range(special.size()):
if(text==special[i]):
return true
return false
func specialChar( letter ):
for i in range( 8, special.size() ):
if( special[ i ] == letter ):
if ( i == 0 ):
return -2
else:
return (-i)-2
return -1
func persiaSet(end,array):
var text = ""
var no
var pos
for i in range( end ):
pos = specialChar( array[ i ] )
print(pos)
for j in range(persia.size()):
if(persia[ j ]==array[ i ]):
pos=j
break
if ( i == 0 ):
if( i == end - 1 ):
no = 0
else:
no = 2
elif( specialno(array[ i - 1 ]) ):
if( i != end - 1):
if( specialChar( array[ i + 1 ] ) < -1):
no = 0
else:
no = 2
else:
no = 0
else:
if(i != end-1):
if( specialChar( array[ i + 1 ] ) < -1):
no = 1
else:
no = 3
else:
no = 1
if (pos >= 0):
text = persiaWords[(pos*4)+no]+text
else:
text = special[abs(pos+2)]+text
return text
pass
func _ready():
var SampleText = ")متن 1: این متن »نمونهای« است برای بررسی \"صحت حروفچینی\" _*+گودوتانجین+*_ ("
get_node("Label").set_text(persiaSet(SampleText.length(),SampleText))
get_node("Label 2").set_text(SampleText)
pass
۹۴/۱۲/۲۵