Actionscript - usando expressões regulares e TextFormat para o estilo de texto entre as tags de HTML
-
14-11-2019 - |
Pergunta
Eu estive lutando com este problema por um tempo:
Eu tenho uma seqüência de caracteres que contém HTML e eu estou usando uma expressão regular para obter os caracteres entre as marcas.Eu sou, em seguida, tentar aplicar um TextFormat para esses caracteres.
O problema é que estou usando o TextField do "htmlText" a propriedade em vez de sua propriedade "texto" (porque eu não quero que os códigos HTML para ser visível).Assim, o índice de caractere que é retornado a partir da expressão regular é incorreta, quando eu aplicar o TextFormat.
Aqui está um exemplo de código que ilustra o problema:
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);
}
Isso me dá:
"Exemplo de seqüência de caracteres com texto em negrito"
em vez do desejado:
"Exemplo string com o texto em negrito"
porque match[0].length
é de sete caracteres muito longa, devido ao tags HTML <b></b>
.
O que posso fazer sobre isso?Obrigado!
Solução
Usando TextField.htmlText, <b>
tags deve dar o texto em negrito, sem qualquer necessidade de TextFormat.negrito ou regexp, fornecido incorporar as fontes de direito (ou usar fontes de dispositivo).
Mas, eu sei que às vezes há problemas com o suporte a HTML no TextFields em combinação com manipulação de fontes, e, talvez, a sua situação real é mais complexo do que o exemplo com o texto em negrito.Nesse caso eu recomendaria usar Folha de estilos formatação em vez de regexp/TextFormat de combinação.Para além do problema com o deslocamento de incompatibilidade que você já encontrou, eu acredito que a combinação das duas abordagens diferentes para a formatação de texto HTML e TextFormat - corre o risco de dar outros problemas, enquanto que o uso de HTML, texto e de folha de Estilos são feitos para serem usados juntos.
Eu comecei a escrever um exemplo de uso de Folha de estilo/htmlText, mas desde que <b>
deve funcionar de qualquer maneira, sem estilo, ele ficou um pouco estranho, então eu escovava.Mas deixe-me saber se você precisar de código de exemplo.
Outras dicas
tf.setTextFormat(format, match.index, match.index + match[1].length);