Un marqueur (tag en anglais) est un mot-clef remarquable dans un fichier texte, que le rédacteur ou le lecteur est susceptible de vouloir rechercher. La caractéristique lui conférant cette qualité dépend de la nature du texte qui le contient.
Dans un programme informatique, un marqueur correspond à un identifiant, en général une fonction, une constante, une macro-définition, une classe, ou tout autre élément pertinent de la grammaire du langage de programmation.
Dans certains fichiers de documentation exclusivement en texte brut, un marqueur peut correspondre aux têtes de chapitre ou à l'intitulé des rubriques. D'une manière générale, tout ce qui est susceptible d'être intégré à un index peut faire office de marqueur.
Des logiciels permettent d'extraire de manière automatique les marqueurs d'un ensemble de fichiers. Ils constituent alors un ou plusieurs fichiers de marqueurs, qui contiennent l'ensemble des marqueurs trouvés lors de l'analyse des fichiers textes.
Parallèlement, de nombreux logiciels savent utiliser les fichiers de marqueurs pour rendre service à l'utilisateur. Plus particulièrement, la majorité les éditeurs de texte et des EDI comprennent les fichiers de marqueurs et proposent des facilités pour les exploiter. Ils permettent par exemple à un programmeur informatique de se déplacer facilement et rapidement dans le code source d'un programme.
Pour un programme informatique, un fichier de marqueurs peut être généré à partir du code source (généralement par un programme externe à l'éditeur de texte). Le programmeur peut ensuite se déplacer dans son programme grâce à cet index. Par exemple, lorsqu'il veut consulter la définition d'une fonction foo, il peut, si son éditeur de texte le permet, sauter d'une commande au clavier ou d'un clic de souris, directement à la ligne où foo est définie, même si cette définition se trouve dans un autre fichier que celui en cours d'édition.
Note : un fichier de marqueurs doit être préalablement généré.
vim -t main
Les fichiers de marqueurs sont en général des fichiers textes, constitués de lignes dont chacune désigne un marqueur. Ces lignes ont habituellement le format suivant :
NomDuTag Séparateur FichierQuiLeContient Séparateur LigneEtColonne
Souvent, des informations supplémentaires sont ajoutées :
NomDuTag Séparateur FichierQuiLeContient Séparateur LigneEtColonne Terminateur InformationsSupplémentaires
Ces lignes sont parfois précédées d'un en-tête donnant des informations sur le contenu du fichier de marqueur. On peut notamment y trouver l'encodage du fichier et un drapeau indiquant si les marqueurs sont triés ou non.
Le tri des marqueurs revêt une importance particulière, car un fichier de marqueurs convenablement trié (au sens binaire et non au sens alphanumérique) autorise une recherche, dite dichotomique, qui est bien plus efficace qu'une recherche linéaire. Le critère de performance est sensible avec de gros fichiers de marqueurs. Par exemple, la génération des marqueurs du sources du noyau Linux dans sa version 2.4.19 produit un fichier de plus de 30 Mo.
Parmi les informations supplémentaires, on peut trouver :
Ctags était un programme Unix écrit par Steve Kirkendall. Il ne supporte que le C.
Exuberant ctags (lien) est une évolution de ctags écrite par Darren Hiebert à partir de 1996, et distribué sous les termes de la licence GNU. Exuberant signifie en anglais abondance. Ce terme est en rapport avec la quantité de marqueurs qu'il est censé générer. Ctags supporte plus de 30 langages, et il est très facile de rajouter le support pour un autre langage.
Etags dépend d'Emacs, et supporte de nombreux langages de programmation.
Jtags (lien) est un programme spécialisé pour le langage Java, écrit en Java.
ptags.py est un programme spécialisé pour le langage Python, écrit en Python.
ptags est un programme spécialisé pour le langage Perl, écrit en Perl.
gnatxref est un programme spécialisé pour le langage Ada.
tcltags est un programme spécialisé pour le langage Tcl.