Actionscript - utilisation d'expressions régulières et TextFormat pour styliser le texte entre les balises HTML

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

Question

Je rencontre ce problème depuis un moment :

J'ai une chaîne contenant du HTML et j'utilise une expression régulière pour obtenir les caractères entre les balises.J'essaie ensuite d'appliquer un TextFormat à ces caractères.

Le problème est que j'utilise la propriété "htmlText" de TextField au lieu de sa propriété "text" (car je ne veux pas que les balises HTML soient visibles).Ainsi, l'index de caractères renvoyé par l'expression régulière est incorrect lorsque j'applique le TextFormat.

Voici un exemple de code qui illustre le problème :

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);
}

Cela me donne :

"Exemple de chaîne avec du texte en gras"

au lieu de celui souhaité :

"Échantillon chaîne avec du texte en gras"

parce que match[0].length est sept caractères trop long, à cause des balises HTML <b></b>.

Que puis-je faire à ce sujet ?Merci!

Était-ce utile?

La solution

En utilisant TextField.htmlText, <b> les balises doivent donner du texte en gras, sans avoir besoin de TextFormat.bold ou d'expression rationnelle, à condition que vous intégriez les bonnes polices (ou que vous utilisiez les polices de l'appareil).

Mais je sais qu'il y a parfois des problèmes avec la prise en charge HTML dans TextFields en combinaison avec la gestion des polices, et peut-être que votre situation réelle est plus complexe que l'exemple avec du texte en gras.Dans ce cas, je recommanderais d'utiliser Feuille de style formatage au lieu du combo regexp/TextFormat.Outre le problème de décalage de décalage que vous avez rencontré, je pense que la combinaison des deux approches différentes du formatage du texte - HTML et TextFormat - risque de poser d'autres problèmes, alors que l'utilisation du texte HTML et de StyleSheet est censée être utilisée ensemble.

J'ai commencé à écrire un exemple d'utilisation de StyleSheet/htmlText, mais depuis <b> ça devrait marcher de toute façon, sans style, c'est devenu un peu bizarre, alors je l'ai rayé.Mais faites-moi savoir si vous avez besoin d'un exemple de code.

Autres conseils

tf.setTextFormat(format, match.index, match.index + match[1].length); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top