Archives par mot-clé : Function List

Coder en Java avec Notepad++

Notepad++ est une des références en terme d’éditeur de texte à coloration syntaxique pour ouin-ouinWindows. La pléthore de fonctionnalités qu’il possède, et sa capacité à être étendu par de nombreux greffons, en font un outil presque incontournable. Bien entendu, il s’agit d’un logiciel Libre !

Malgré toutes ses années, le greffon Function List souffre toujours de petits manques, en particulier pour son utilisation avec les sources Java. Pour pallier ce problème, j’ai fini par écrire un certain nombre de règles (vive les expressions régulières !) afin de les ajouter dans son fichier de configuration C:Users…AppDataRoamingNotepad++pluginsconfigFunctionListRules.xml (en prenant soin de remplacer la balise « Language » déjà existante pour le langage Java).

<Language name="Java" imagelistpath="plugins\Config\Java.bmp">
	<CommList param1="//" param2="" />
	<CommList param1="/\*" param2="\*/" />
	<CommList param1='\"' param2='\"' />
	<Group name="CLASSES" subgroup="" icon="1" child="0" autoexp="0" matchcase="1" fendtobbeg="\}" bbegtobend="\{" keywords="">
		<Rules regexbeg="\w*\s*class\s+" regexfunc="\w+\s*" regexend="[^\{]*" bodybegin="" bodyend="" sep="" />
		<Rules regexbeg="\w*\s*static\s+class\s*" regexfunc="\w+\s*" regexend="[^\{]*" bodybegin="" bodyend="" sep="" />
	</Group>
	<Group name="CONSTANTS" subgroup="" icon="3" child="0" autoexp="0" matchcase="1" fendtobbeg="\}" bbegtobend="\{" keywords="">
		<Rules regexbeg="\w*\s*final\s+static\s+\w+\s*" regexfunc="\w+" regexend="\s*=" bodybegin="" bodyend=";" sep="" />
		<Rules regexbeg="\w*\s*final\s+static\s+\w+<.+>\s*" regexfunc="\w+" regexend="\s*=" bodybegin="" bodyend=";" sep="" />
	</Group>
	<Group name="VARIABLES" subgroup="" icon="3" child="0" autoexp="0" matchcase="1" fendtobbeg="\}" bbegtobend="\{" keywords="final|static">
		<Rules regexbeg="private\s+[\w\.\[\]]+\s+" regexfunc="\w+\s*" regexend="=*[^\(]*;" bodybegin="" bodyend="" sep="" />
		<Rules regexbeg="protected\s+[\w\.\[\]]+\s+" regexfunc="\w+\s*" regexend="=*[^\(]*;" bodybegin="" bodyend="" sep="" />
		<Rules regexbeg="public\s+[\w\.\[\]]+\s+" regexfunc="\w+\s*" regexend="=*[^\(]*;" bodybegin="" bodyend="" sep="" />
		<Rules regexbeg="protected\s+[\w\.\[\]]+<.+>\s+" regexfunc="\w+\s*" regexend="=*[^\(]*;" bodybegin="" bodyend="" sep="" />
		<Rules regexbeg="public\s+[\w\.\[\]]+<.+>\s+" regexfunc="\w+\s*" regexend="=*[^\(]*;" bodybegin="" bodyend="" sep="" />
		<Rules regexbeg="private\s+[\w\.\[\]]+<.+>\s+" regexfunc="\w+\s*" regexend="=*[^\(]*;" bodybegin="" bodyend="" sep="" />
	</Group>
	<Group name="METHODS" subgroup="" icon="4" child="0" autoexp="0" matchcase="1" fendtobbeg="\}" bbegtobend="\{" keywords="else|new|return">
		<Rules regexbeg="\w+\s*\[*\]*\s+" regexfunc="\w+\s*" regexend="\([^\(]*\)\s*" bodybegin="\{" bodyend="\}" sep="" />
		<Rules regexbeg="abstract\s*\w*\s*\w*\s*" regexfunc="\w+\s*" regexend="\([^\(]*\)\s*" bodybegin="" bodyend=";" sep="" />
		<Rules regexbeg="\w+\s*<.+>\s+" regexfunc="\w+\s*" regexend="\([^\(]*\)\s*" bodybegin="\{" bodyend="\}" sep="" />
		<Rules regexbeg="abstract\s*\w*\s*\w*\s*<.+>\s*" regexfunc="\w+\s*" regexend="\([^\(]*\)\s*" bodybegin="\{" bodyend="\}" sep="" />
	</Group>
</Language>

Il est à noter que ces règles sont directement éditables depuis Notepad++. Pour ce faire, le menu Compléments > Function List > Language Parsing Rules ouvre une boîte de dialogue facilitant l’ajout, la suppression et la modification de ces règles, ainsi que (et c’est là que réside tout son intérêt !) leur débogage via le bouton « Try! » .

En reprenant le fichier C:Program FilesNotepad++pluginsConfigC++.flb, qui n’est autre qu’une image BMP avec une extension bizarre… 😕 il est possible de définir de petites icônes pour chaque type d’objet. Le fichier est en effet constitué de 20 petites images de 16 pixels de côté, numérotées de 0 à 19. Ainsi, il est possible de modifier l’icône d’une balise « Group » en changeant le numéro d’image dans l’attribut icon de celle-ci. En revanche, chaque entrée trouvée par Function List conservera pour icône l’image numérotée 0, qui correspond à une petite feuille avec la lettre C… ce qui n’est pas très Java-friendly… Dans ce cas, pourquoi ne pas faire une copie du fichier C++.flb en tant que Java.bmp, et l’éditer avec l’outil Paint de ouin-ouinWindows ou un logiciel tel que Gimp ?

Fichier C++.flb modifié en Java.bmp
Le résultat sera, à n’en pas douter, du plus bel effet, sans compter le caractère indispensable que prendra votre liste de classes, de méthodes et autres variables !