Actionscript - استخدام التعبير العادي وTextFormat لتصميم النص بين علامات HTML

StackOverflow https://stackoverflow.com/questions/9519857

سؤال

أعاني من هذه المشكلة منذ فترة:

لدي سلسلة تحتوي على HTML وأستخدم تعبيرًا عاديًا للحصول على الأحرف بين العلامات.ثم أحاول تطبيق TextFormat على تلك الأحرف.

تكمن المشكلة في أنني أستخدم خاصية "htmlText" الخاصة بـ TextField بدلاً من خاصية "النص" الخاصة بها (لأنني لا أريد أن تكون علامات HTML مرئية).لذلك، فهرس الأحرف الذي تم إرجاعه من التعبير العادي غير صحيح، عندما أقوم بتطبيق TextFormat.

فيما يلي بعض نماذج التعليمات البرمجية التي توضح المشكلة:

var txt:String = "<b>Sample</b> string with bold text";

var tf:TextField = new TextField();
addChild(tf);
tf.htmlText = txt;

var format:TextFormat = new TextFormat();
format.bold = true;

var regExp:RegExp = /<b>(.*?)<\/b>/g;
var match:Object = regExp.exec(txt);
while (match != null) {
    tf.setTextFormat(format, match.index, match.index + match[0].length);
    match = regExp.exec(txt);
}

هذا يعطيني:

"سلسلة عينة بنص غامق"

بدلا من المطلوب:

"عينة سلسلة بنص غامق"

لأن match[0].length سبعة أحرف طويلة جدًا، بسبب علامات HTML <b></b>.

مالذي استطيع فعله حيال هذا؟شكرًا!

هل كانت مفيدة؟

المحلول

باستخدام TextField.htmlText، <b> يجب أن توفر العلامات نصًا غامقًا، دون الحاجة إلى TextFormat.bold أو regexp، بشرط تضمين الخطوط الصحيحة (أو استخدام خطوط الجهاز).

لكنني أعلم أن هناك أحيانًا مشكلات تتعلق بدعم HTML في TextFields مع معالجة الخطوط، وربما يكون موقفك الفعلي أكثر تعقيدًا من المثال الذي يحتوي على نص غامق.في هذه الحالة أوصي باستخدام ورقة الأنماط التنسيق بدلاً من التحرير والسرد regexp/TextFormat.إلى جانب مشكلة عدم تطابق الإزاحة التي واجهتها، أعتقد أن الجمع بين الطريقتين المختلفتين لتنسيق النص - HTML وTextFormat - ينطوي على خطر ظهور مشكلات أخرى، بينما من المفترض استخدام نص HTML وStyleSheet معًا.

لقد بدأت في كتابة مثال لاستخدام StyleSheet/htmlText، ولكن منذ ذلك الحين <b> يجب أن تعمل على أي حال، دون التصميم، أصبحت غريبة بعض الشيء، لذلك خدشتها.ولكن اسمحوا لي أن أعرف إذا كنت بحاجة إلى رمز المثال.

نصائح أخرى

tf.setTextFormat(format, match.index, match.index + match[1].length); 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top