November 2, 2010 at 12:03[AS3] Truncate a TextField with a maxLines

Here is a snippet to set a maximum lines to a TextField and truncate the end of the text with a “…” :

function truncate(textfield:TextField, maxLines:int):void
{
	// the alternative text
	var alt:String = "...";

	// if the text displayed has more lines than wished
	if (textfield.numLines > maxLines)
	{
		// index of the last char of the last line to display
		var char:int = textfield.getLineOffset(maxLines) - 1;

		// remove the length of the alternative text
		char -= alt.length;

		// get the last non space char index
		char = textfield.text.substring(0, char + 1).search(/\S\s*$/);

		// set the new text into the textfield
		textfield.text = textfield.text.substring(0, char) + alt;
	}
}

Using TextFieldAutoSize.LEFT and this code :

truncate(titleTxt, 1);
descTxt.y = titleTxt.height;
truncate(descTxt, 3);

You get this result :

Written by Rémi.T under Coding.
Tags: , .
3 comments »

September 9, 2010 at 10:31FlashDevelop : Snippets et arguments dynamiques

Le moteur de snippets de FlashDevelop permet d’utiliser des “arguments dynamiques” dont je n’ai réussi à trouver qu’un petit paragraphe dans la doc.

Par exemple, insérez ce code dans un snippet :

$$(Description=ValeurA,ValeurB,ValeurC)

Et au moment de son utilisation, vous obtiendrez une popup permettant de choisir la valeur à insérer :

Voici une version améliorée du snippet for qui montre bien l’usage et les possibilités offertes par les arguments dynamiques :

for (var $$(Iterations=i):int = $$(StartAt=0); $$(Iterations) < $$(Count=n); $$(Iterations)++) $(CSLB){
    $(EntryPoint)
}

Avec tout ça, j’ai amélioré mon snippet perso. Il permet d’insérer des séparateurs comme décrits dans les conventions de codage d’Adobe. Et c’est un bon exemple d’arguments non obligatoire (une virgule après l’espace, et des espaces après chaque valeur) :

//--------------------------------------------------------------------------
//
//  $$(IsOverriden=,Overriden )$$(Access=,Public ,Private ,Protected )$$(IsStatic=,Class )$$(Type=Properties,Methods,Constants)
//
//--------------------------------------------------------------------------
$(EntryPoint)

Dernière chose : tout ceci fonctionne aussi avec les templates de fichiers.

Enjoy :)

Written by Rémi.T under Coding.
Tags: , .
1 comment »

July 7, 2009 at 15:01[AS3] Levenshtein distance

La distance de Leventshtein est un algorithme imaginé en 1965 par Vladimir Levenshtein qui permet de définir le nombre d’opérations minimum nécessaires pour transformer une chaine de caractères en une autre.  Et qui permet donc de calculer la différence entre deux chaines.

Utilisé en ActionScript notamment pour l’API de Mouse Gesture Recognition :

mouse-gesture-recognition

Je réfléchit en ce moment à l’utilisation de ce script pour un moteur d’apriori dans une intelligence artificielle :

intelligence-artificielle-as3

Voici une implémentation ActionScript3.0 trouvée sur snipplr.com :

function levenshteinDistance(s1:String,s2:String):int
{
	var m:int = s1.length;
	var n:int = s2.length;
	var matrix:Array = new Array();
	var line:Array;
	var i:int;
	var j:int;
	for (i = 0; i <= m; i++)
	{
		line=new Array();
		for (j = 0; j <= n; j++)
		{
			if (i != 0) line.push(0)
			else line.push(j);
		}
		line[0] = i;
		matrix.push(line);
	}
	var cost:int;
	for (i = 1; i <= m; i++)
		for (j = 1; j <= n; j++)
		{
			if (s1.charAt(i - 1) == s2.charAt(j - 1)) cost = 0;
			else cost = 1;
			matrix[i][j] = Math.min(matrix[i - 1][j] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j - 1] + cost);
		}
	return matrix[m][n];
}
Written by Rémi.T under Coding.
Tags: .
Add a comment »