1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| /* Fonction qui coupe une chaine html qui reconstitue la struture html pour qu'elle soit cohérent */
/* sText_ : Texte à couper */
/* nIndex_ : (nIdex_)ieme caractère de la chaine où il faut couper la chaine */
function cutAt(sText_:String , nIndex_:Number):String {
var sTemp:String = (sText_.charAt(0) == "<") ? sText_ : ("<p>"+sText_+"</p>");
var aOpened:Array = new Array();
var bInTag:Boolean = false;
var bOpened:Boolean = false;
var nCount:Number = 0;
var sTag:String = "";
var sWord:String = "";
var sResult:String = "";
for(var i:Number = 0; i < sTemp.length; i++) {
var sChar:String = sTemp.charAt(i);
if(nCount < nIndex_) {
switch(sChar) {
case "<" :
sResult += sWord;
sWord = "";
sTag = "";
bInTag = true;
bOpened = (sTemp.charAt(i+1) != "/");
break;
case ">" :
if(bOpened) {
if(sTag.toUpperCase() != "BR") {
var aTag:Array = sTag.split(" ");
aOpened.unshift(aTag[0].toString());
}
}
else {
var n:Number = 0;
var cpt:Number = 0;
while((n == 0) && (aOpened.length > 0)) {
cpt++;
var sClosedTag:String = sTag.substr(1, sTag.length-1);
if(aOpened[n].toString() == sClosedTag) {
aOpened.shift();
n++;
} else {
aOpened.shift();
}
}
}
bInTag = false;
sResult += "<" + sTag + ">";
break;
default :
if(bInTag) {
sTag += sChar;
} else {
sWord += sChar;
nCount++;
}
break;
}
} else {
sResult += sWord;
i = sTemp.length;
while (aOpened.length != 0) {
var sCurrentTag:String = aOpened[0].toString()
if(sCurrentTag.toUpperCase() != "BR") {
sResult += "<" + aOpened[0] + "/>";
} else {
sResult += "</" + aOpened[0] + ">";
}
aOpened.shift();
}
}
}
return sResult;
}
/* Retoune le nombre de caractères "non html" de la chaine */
function getNoHtmlCharactersNumber(sText_):Number {
var sTemp:String = (sText_.charAt(0) == "<") ? sText_ : ("<p>"+sText_+"</p>");
var bInTag:Boolean = false;
var nResult:Number = 0;
for(var i:Number=0; i<sTemp.length; i++) {
var sChar:String = sTemp.charAt(i);
switch (sChar) {
case "<" :
bInTag = true;
break;
case ">" :
bInTag = false;
break;
default :
if(!bInTag) nResult++;
break;
}
}
return nResult;
}
var s:String = "<p>Mais pourquoi cela <b><i>ne</i> marche <i>pas</i></b> ???<br>Est-ce un <b><u>bug</u><b> ?</p>";
var tf:TextField = this.createTextField("tf", 0, 20, 20, 200, 50);
var tfMax:TextField = this.createTextField("tfMax", 1, 20, 100, 200, 50);
tf.html = tfMax.html = true;
tf.multiline = tfMax.multiline = true;
var nCpt:Number = 0;
var nCptMax:Number = getNoHtmlCharactersNumber(s);
this.onEnterFrame = function() {
tf.htmlText = cutAt(s, ++nCpt);
if(nCpt == nCptMax) {
delete this.onEnterFrame;
tfMax.htmlText = cutAt(s, nCptMax);
tf.htmlText = tfMax.htmlText;
}
} |
Partager