Editeur de texte

Description

Voila un petit éditeur de texte en FlashMX.
Il se base sur le principe du TextFormat de textField :
récupérer les propriétés du TextFormat de la sélection en cour, puis les modifier.

Il permet de mettre en gras, italique, souligner, indenter la ligne ou le bloc, pucer, centrer ou aligner a droite ou gauche, choisir l'interligne, la taille, la police, la couleur, d'ajouter un lien (et de le supprimer), de mémoriser un format, d'appliquer celui mémorisé, de gommer une partie du format, et d'appliquer des styles de format.

Comme il est n'est pas en FlashMX 2004, on ne bénéficiera pas des feuilles de styles qui auraient été bien pratique pour définir... le style ;-p

Source / Exemple :


function cleanFlash($source) {
    $source=str_replace('KERNING="0"','',$source);
    $source=str_replace('LETTERSPACING="0"','',$source);
    // ajuster les paragraphes
    $source=preg_replace("'<TEXTFORMAT([^>]*)><LI[^>]*>(.*?)</LI></TEXTFORMAT>'si","<li \$1>\$2</li>",$source);
    $source=preg_replace("'<TEXTFORMAT([^>]*)><P([^>]*)>(.*?)</P></TEXTFORMAT>'si","<p\$1\$2>\$3</p>",$source);
    $source=preg_replace("'<li([^>]*)>'i","<ul>
<li\$1>" ,$source);
    $source=preg_replace("'</li>'i","</li>
</ul>" ,$source);
    $source=preg_replace("'FACE=\"([^\"]*)\"'i","font-family:\$1;",$source);
    //$source=preg_replace("'LEADING=\"(\d+)\"'i","line-height:\$1px;",$source);
    //$source=preg_replace("'LEADING=\"(\d+)\"'i","line-height:1.\$1em;",$source);
    $source=preg_replace("'LEADING=\"(\d+)\"'i","",$source);
    $source=preg_replace("'SIZE=\"(\d+)\"'i","font-size:\$1px;",$source);
    $source=preg_replace("'COLOR=\"([^>]+)\"'i","color:\$1;",$source);
    $source=preg_replace("'ALIGN=\"([^\"]*)\"'i","text-align:\$1;",$source);
    $source=preg_replace("'BLOCKINDENT=\"(\d+)\"'i","margin-left:\$1px; margin-right:\$1px;",$source);
    $source=preg_replace("'INDENT=\"(\d+)\"'i","text-indent:\$1px;",$source);
    $source=preg_replace("'<FONT([^>]*)>'i","<span\$1>",$source);
    $source=preg_replace("'</FONT>'i","</span>",$source);
    // balise css clean
    $source=preg_replace("'<span ([^>]*)'i","<span style=\"\$1\"",$source);
    $source=preg_replace("'<p([^>]*)'i","
<p style=\"\$1\"",$source);
    $source=preg_replace("'<B>(.*?)</B>'si","<strong>\$1</strong>",$source);
    $source=preg_replace("'<I>(.*?)</I>'si","<em>\$1</em>",$source);
    $source=preg_replace("'<li([^>]*)'i","
<li style=\"\$1\"",$source);
    $source=preg_replace("'<li([^>]*)line-height'i","<li\$1margin-bottom",$source);
    // gommer les valeurs vides
    $source=preg_replace("'TARGET=\" *\"'i","",$source);
    $source=preg_replace("'style=\" *\"'i","",$source);
    $source=preg_replace("'style=\" +'","style=\"",$source);
    $source=preg_replace("'\040+'","\040",$source);
    $source=str_replace('</ul><ul>','',$source);
    $source=preg_replace("'<span([^>]*)></span>'",'',$source);
    // gommer les paragraphes inutiles pour des retour a la ligne
    $source=preg_replace("'<p *>(.*?)</p>'si","\$1<br />",$source);
    // gommer les valeurs par défaut :
    $source=preg_replace("'<p style=\"line-height:1.2em; text-align:LEFT;\">'i","<p>",$source);
   // $source=str_replace('<span style="font-family:Arial; font-size:12px; color:#333333;">','<span>',$source);
   // gommer les balises vides
    $source=str_replace('<strong></strong>','',$source);
    $source=preg_replace("'<span *>([^<]*)</span>'si","\$1",$source);
    $source=preg_replace("'<p>(.*?)</p>'si","\$1<br />",$source);
    $source=str_replace('<li style="margin-bottom:2px;">','<li>',$source);
    $source=preg_replace("'(\r\n|\n|\r)+'","\n",$source);
    return ($source);
}
function flashBack ($source) { // pour annuler le micro-encodage html de flash
    $source=str_replace("&quot;",'"', $source);
    $source=str_replace("&apos;","'", $source);
    $source=str_replace("&amp;","&", $source);
    $source=str_replace(">",">", $source);
    $source=str_replace("<","<", $source);
    //$source=str_replace('\\"','"', $source);
    //$source=str_replace("\\'","'", $source);
     $source=stripslashes ($source);
    return ($source);
}

Conclusion :


Merci a whitemagus pour sa première version (qui m'a mise sur la voie du textformat et non de l'insertion de balise).
Dans cette version le menu Fichiers ne me servait a rien, donc il ne fonctionne pas. Libre à vous de le faire marcher (comme whitemagus qui a utilisé les sharedobject).

Pti bug : l'interligne ne se met pas a jour lorsqu'on change la sélection (la valeur change, mais pas le chiffre lorsque l'on sélectionne autre chose)

Extension : si ca intéresse quelqu'un j'ai fait une moulinette PHP pour le texte HTML généré par flash, de manière à ce qu'il soit compatible w3c, et l'alléger (retirer les balises inutiles et les valeurs par défaut)

Enjoy

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.