1 ضمیمه
تغییر رنگ اعراب متون عربی
سلام، من هرچی ور رفتم و سرچ کردم چیز درست و در مونی پیدا نکردم، من تو RichTextBox متنو انتخاب میکنم و حرف حرف میخونمش ولی هیچ اعرابی پیدا نمیکنم، کسی کدی چیزی، یا روشی پیشنهادی هرچیزی که کمک کنه ارائه بده ممنون میشم.:لبخند:
ضمیمه 152662
for (int i = 0; i < textLength; i++){
var textRange = rtbQuranTranslate.Selection;
TextPointer start = quranRuns[0].ContentStart.GetPositionAtOffset(i);
TextPointer end = quranRuns[0].ContentStart.GetPositionAtOffset(i+1);
rtbQuranTranslate.Selection.Select(start, end);
if (rtbQuranTranslate.Selection.Text.Length == 0) continue;
if (rtbQuranTranslate.Selection.Text.Contains('ُ'))
{
textRange.ApplyPropertyValue(TextElement.Foregroun dProperty, new SolidColorBrush(Colors.Blue));
}
}
---------
فک کنم فهمیدم، من کاراکترها رو به صورت utf8 میخونم که هر کاراکتر 8 بیت هستش در حالی که کدهای فتحه و کسره و .... که مثلا مقدارشون 1500-1600 هستش یه عدد 2 بایتی هستش و باید از unicode استفاده کنم.؛ به نتیجه رسیدم اینجا پیوست میکنم :لبخند:
---------
مشکلی که الان دارم اینه که کاراکترها رو میخونم، درست هم میخونم، الف ب پ و... فتحه کسره تشدید و... ولی نمیتونم رنگشون رو تغییر بدم، کدم درست کار نمیکنه
private void ColorRtbText(){
string text = quranRuns[0].ContentStart.GetTextInRun(LogicalDirection.Forwar d);
int textLength = text.Length;
byte[] bytes = Encoding.Unicode.GetBytes(text);
for (int i = 0; i < textLength; i++)
{
TextPointer start = quranRuns[0].ContentStart.GetPositionAtOffset(i + 0, LogicalDirection.Forward);
TextPointer end = quranRuns[0].ContentStart.GetPositionAtOffset(i + 1, LogicalDirection.Backward);
var textRange = new TextRange(start, end);
byte[] characterByte = new byte[] { bytes[2 * i], bytes[2 * i + 1] };
int I = BitConverter.ToInt16(characterByte, 0); // int I = (bytes[2 * i + 1] << 8 | bytes[2 * i + 0]);
string S = Encoding.Unicode.GetString(characterByte);
//---
MessageBox.Show(">" + S + ">" + ">" + I + ">");
textRange.ApplyPropertyValue(TextElement.Foregroun dProperty, Brushes.Red);
}
}
نقل قول: تغییر رنگ اعراب متون عربی
کسی نظری؟ ایده یی راه حلی چیزی نداره؟ :گریه:
نقل قول: تغییر رنگ اعراب متون عربی
سلام
با RichTextBox کار نکردم اما یه تستی که کردم ، انگار حرف های "اِعراب" (مثل فتحه و ضمه و کسره و کلا کاراکترهای سجادوندی) را حداقل در تست کد من ، نمیتونه بصورت جداگانه انتخاب کنه (همراه با کلمه ای که اون اِعراب براش بکار برده شد ، انتخاب میکنه) :
<RichTextBox Name="MyRichTextBox" Loaded="MyRichTextBox_Loaded" Margin="10" Width="300" Height="150" FontSize="35">
<FlowDocument Name="myDoc">
<Paragraph>
<Run Text="تکرارِ متن"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
و
this.MyRichTextBox.Focus();
TextPointer myTextPointer1 = this.MyRichTextBox.Document.ContentStart.GetPositi onAtOffset(1, LogicalDirection.Backward);
TextPointer myTextPointer2 = this.MyRichTextBox.Document.ContentStart.GetPositi onAtOffset(7, LogicalDirection.Backward);
TextRange textRange = new TextRange(myTextPointer1, myTextPointer2);
this.MyRichTextBox.Selection.Select(myTextPointer1 , myTextPointer2);
textRange.ApplyPropertyValue(TextElement.Foregroun dProperty, Brushes.Red);
منتظر جواب دوستان باشید .
نقل قول: تغییر رنگ اعراب متون عربی
ساده ترین راه استفاده از فونت شخصی سازی شده هست که داخل اون فونت کاراکترهای موردنظر رو رنگی کنید.
نقل قول: تغییر رنگ اعراب متون عربی
ممنون از شما؛ خب من میتونم هر کاراکتر ( حرف و اعراب ) رو جدا جدا بخونم، مشکل اصلی اینه که نمیشه اعراب رو به صورت مجزا Select اش کرد؛ هر کاری هم کردم نشد که نشد، آخرش هم به نتیجه شما رسیدم.
اما بحث طراحی فونت، فک نکنم راه حلش این باشه، هر چند این باشه هم کار طراحی فونت در قد و قواره من نی، من فونت های زیادی رو تست کردم، تو همشون همین مشکل بود.
تو اندروید استدیو که دیدم ( حداقل تو نرمافزاراش APK ) این مشکل وجود نداره ( حتی با همون فونت هایی که من تو WPF باهاشون به مشکل خوردم )، چون فونت هایی که برا متن قرآن استفاده میشن، معلومن و بیشتر از 5-10 تا نیستن.
نقل قول: تغییر رنگ اعراب متون عربی
این روشو پیدا کردم، که دو تا متن رو روی هم قرار بدی ( کد فوق html هستش ولی خب میشه html رو هم تو wpf استفاده کرد )
1-متن با اعراب - قرمز ( پایین )
2-متن بدون اعراب سیاه ( بالا )
اینطوری متن با رنگ سیاه و اعراب با رنگ قرمز نمایش داده میشه ولی بنا به فونت مورد استفاده و اندازه صفحه، مشکلاتی ایجاد میکنه که بیخیالش شدم.
https://jsfiddle.net/8mfgmovj/
من نمیدونم چطوریه تو ورد میشه این کارو کرد، تو اندروید میشه اما تو این Visual Studio نمیشه:گریه:
نقل قول: تغییر رنگ اعراب متون عربی
نقل قول:
نوشته شده توسط
md3848
این روشو پیدا کردم، که دو تا متن رو روی هم قرار بدی ( کد فوق html هستش ولی خب میشه html رو هم تو wpf استفاده کرد )
1-متن با اعراب - قرمز ( پایین )
2-متن بدون اعراب سیاه ( بالا )
اینطوری متن با رنگ سیاه و اعراب با رنگ قرمز نمایش داده میشه ولی بنا به فونت مورد استفاده و اندازه صفحه، مشکلاتی ایجاد میکنه که بیخیالش شدم.
https://jsfiddle.net/8mfgmovj/
من نمیدونم چطوریه تو ورد میشه این کارو کرد، تو اندروید میشه اما تو این Visual Studio نمیشه:گریه:
بله ، روش جالبه .
فونت چه مشکلی بوجود میاره؟
اندازه ی فونت هر دو متن را به یک مقدار بگیرید دیگه .
نقل قول: تغییر رنگ اعراب متون عربی
اندازه متن با اعراب با متن بدون اعراب یکسان نمیشه، سر همین داستان میشه، با اکثر فونتا تست کردم، تو بعضیاشون این مشکل کم بود ولی بود!
نقل قول: تغییر رنگ اعراب متون عربی
نقل قول:
نوشته شده توسط
md3848
اندازه متن با اعراب با متن بدون اعراب یکسان نمیشه، سر همین داستان میشه، با اکثر فونتا تست کردم، تو بعضیاشون این مشکل کم بود ولی بود!
کد کامل تون را بذارید .
2 ضمیمه
نقل قول: تغییر رنگ اعراب متون عربی
این کد xaml که کنترل WebBrowser داخلش هستش ( نمایش فایل های وب در wpf ) :
<Grid> <WebBrowser Name="myWebBrowser"></WebBrowser>
</Grid>
کدهای html/css/js و کتابخونه jquery v1.7.2 هم در زیر پیوست کردم ( هر چند همون لینک بالا هم کفایت میکرد بنظرم )؛ فایل های فوق رو اضافه کردید به پروژه، قسمت Copy to output directory رو، روی Copy always تنظیمشون کنید :
ضمیمه 152837
اینم نتیجه، البته این دقیق نی ولی خب یه تست ساده که کردم نتیجش شد این، یه متن عربی طولانی رو تست کردم داستان شد
ضمیمه 152838
نقل قول: تغییر رنگ اعراب متون عربی
نقل قول:
نوشته شده توسط
md3848
این کد xaml که کنترل WebBrowser داخلش هستش ( نمایش فایل های وب در wpf ) :
<Grid> <WebBrowser Name="myWebBrowser"></WebBrowser>
</Grid>
.
.
.
من که ناهماهنگی ای ندیدم .
1 ضمیمه
نقل قول: تغییر رنگ اعراب متون عربی
اندازه صفحه رو تغییر بدید، هماهنگی! رو میبینید :لبخند:
نقل قول: تغییر رنگ اعراب متون عربی
خب مشکلو با یکم css بازی حل کردم :لبخند:، خصوصیت position: absolute رو به هر دو span اعمال کردم، اون لینکی که گزاشتم اینکارو نکرده بود:گریه:، منم توجه نکردم سر همین این مشکل ایجاد میشد:لبخندساده:؛ حالا باز ور برم ببینم چی میشه به نتیجه خوبی رسیدم پیوست میکنم.
3 ضمیمه
نقل قول: تغییر رنگ اعراب متون عربی
نقل قول:
نوشته شده توسط
SajjadKhati
سلام
با RichTextBox کار نکردم اما یه تستی که کردم ، انگار حرف های "اِعراب" (مثل فتحه و ضمه و کسره و کلا کاراکترهای سجادوندی) را حداقل در تست کد من ، نمیتونه بصورت جداگانه انتخاب کنه (همراه با کلمه ای که اون اِعراب براش بکار برده شد ، انتخاب میکنه) :
این مشکل تو کدنویسی html هم هستش :
کد HTML:
<div id="highlight">
<span style=" color: black; ">ک</span><span style="color: red;">َ</span><span style=" color: black; ">ت</span><span style="color: green;">َ</span><span style=" color: black; ">ب</span><span style="color: green;">َ</span>
</div>
ضمیمه 152860
------------------------
انواع روش ها :
0) تغییر مستقیم رنگ اعراب ها مقدور نی فلذا میریم سراغ روش های دیگه :
1) دوستمون گفتن فونت شخصی سازی شده ( فونت رنگی )
خب این روشو من یه تحقیق کوتاه کردم چیز جابیه ولی حالا حالا ها فک کنم کار داره، مشکلاتش :
1) همه جا پشتیبانی نمیشه، مثلا تو همین کروم تست کردم جواب نداد ( حالا شاید نکته ای چیزی داره که من رعایت نمیکنم )
2) تو هم که رنگی بودنش نمایش داده نمیشد.
3) تو ورد رنگی بودنشون نمایش داده میشه.
4) اما مشکل اصلی : الان من به ازای هر رنگی، باید یه فونت جداگونه طراحی کنم!؟ اینطوری که خیلی داستان میشه، من میخوام این قابلیت رو به کاربر بدم که بتونه رنگ متن و فونت، هر چی دلش خواست تنظیم کنه، نمیخوام محدودیتی از این جهت باشه.
در زیر 3 تا فونت رنگی قرار دادم، یکی پرچم، یکی نام سوره ها فک کنم، و دیگری متن عربی که 3 تا font family style داره : دانلود
ضمیمه 152865
با نرم افزار FontLab 7، فونت نبی، رو 4 تا از کاراکتر های پرانتز باز و بسته و فتحه و کسره رو رنگی کردم، نتیجه رو در زیر میبینید، در ضمن فقط رو فوتوشاپ اونم فقط فرمت فونت otf / ttf اونم فقط svg ییش جواب گرفتم :لبخند: ولی خب فک کنم داستان زیاد داره، به قسمت ترکیب تشدید و فتحه دقت کنید! بحث تغییر رنگ توسط کاربر رو هنوز راهی پیدا نکردم براش ( به غیر از این که شونصد تا فونت به رنگ های مختلف ایجاد کنم؛ منظورم یه روش بهتر از اینه، هنوز پیدا نکردم )
ضمیمه 152875
سوال : یه مشکل بزرگ، من تو WPF نتونستم از این فونت ها استفاده کنم، رنگ متن سیاه میشه، اصلا رنگی نشون داده نمیشه، چیکار کنم؟
2) نمایش 2 متن روی همدیگه که یکی متن بدون اعرابه و بالا قرار داره و رنگش سیاهه، یکی متن با اعراب و زیر قرار داره و قرمزه، اینطوری کاربر فک میکنه ( میبینه ) یه متنی رو که متنش سیاهه و اعرابش قرمز؛ مشکل این روش اینه که بایت فونت مورد استفاده بهینه باشه، مثلا فونتی داریم که یه اعراب از کاراکتراش حذف بشه، عرض متن تغییر میکنه و یا بعضا روی یه کلمه 2 تا اعراب داریم که اگه اعراب پایینی رو حذف کنیم، اعراب بالایی، میاد پایین و همون جای قبلی نمیمونه و جاش عوض میشه.
3) تبدیل متن به svg ( این الان به ذهنم رسید، میرم بررسی میکنم )
4) این بحث تغییر رنگ اعراب ها رو من فک کنم فقط تو اندروید دیدم، حالا نمیدونم اونجا این مشکل وجود نداره یا اونجا هم از روش جاگزینی چیزی استفاده میکنن، در این باره هم سعی میکنم تحقیق کنم ( البته اگه در موارد بالا به نتیجه نرسیدم )؛
نقل قول: تغییر رنگ اعراب متون عربی
اینکه wpf نمیتونه فونت رو به خوبی رندر کنه مربوط میشه به تکنولوژی رندر توی wpf و uwp که خوب کاملا مشخصه uwp امکانات بهتری رو داره
به عنوان راه حل من الان 2 تا چیز به ذهنم میرسه:
یک اینکه حروف رو بصورت کد اسکی و یونیکد و این جور داستان ها بخونی و تغییر رنگ بدی
دو اینکه از متن فرمت بندی شده استفاده کنی یه نمونه براتون مینویسم البته این مثال کل متن رو تغییر میده ولی بنظرم اگر کمی باهاش تمرین کنید شاید بتونید چیزی که میخواید رو بدست بیارید
private Drawing DrawMyText(string textString)
{
DrawingGroup drawingGroup = new DrawingGroup();
using (DrawingContext drawingContext = drawingGroup.Open())
{
FormattedText formattedText = new FormattedText(
textString,
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface("Comic Sans MS Bold"),
48,
System.Windows.Media.Brushes.Black // This brush does not matter since we use the geometry of the text.
);
Geometry textGeometry = formattedText.BuildGeometry(new System.Windows.Point(20, 0));
drawingContext.DrawRoundedRectangle(System.Windows .Media.Brushes.PapayaWhip, null, new Rect(new System.Windows.Size(formattedText.Width + 50, formattedText.Height + 5)), 5.0, 5.0);
drawingContext.DrawGeometry(System.Windows.Media.B rushes.Gold, new System.Windows.Media.Pen(System.Windows.Media.Brus hes.Maroon, 1.5), textGeometry);
return drawingGroup;
}
}
نحوه استفاده هم به این صورت هست که یه کنترل بزارید روی فرمتون (مثل textblock یا هر کنترل دیگه) :
xx.Background = new DrawingBrush(DrawMyText("مُحَمّد"));