La plupart des langues manquent de cela, donc je serais très surpris de le trouver dans OCaml. Apache le fait avec un fichier mime.types
- vous pouvez y chercher des indices. C'est la façon la plus habituelle - une énorme table qui mappe les extensions en mimetypes. Vous pouvez le mettre en œuvre en OCaml facilement:
let mimetype_of_extension = function
| "txt" | "log" -> "text/plain"
| "html" | "htm" -> "text/html"
| "zip" | "application/zip"
...
Une autre façon est de regarder le contenu du fichier, mais vous avez besoin essentiellement de connaître les différents formats de fichiers. Cela dit, cela ne vous aide pas beaucoup, puisque les fichiers sources de toutes les langues sont normalement traités comme text/plain
. Ils ne sont pas reconnaissables par le type mime; et donc je n'ai aucune idée de ce que fait votre fonction get_language_from_mime_type
.
Cependant, le nom de fichier extensions de divers fichiers source sont plus ou moins standardisés, donc si vous connaissez l'extension, vous connaîtrez la langue. Obtenir l'extension est aussi simple que d'extraire tout ce qui suit la dernière période du nom de fichier.
let extension_of_filename filename =
let pos = (String.rindex filename '.') + 1 in
let len = String.length filename in
let ext = String.create (len - pos) in
String.blit filename pos ext 0 (len - pos);
ext;;
Eh bien, d'accord, simple dans toutes les langues sauf Brainfuck et OCaml, au moins. Après cela, c'est facile - "c" est un programme C, comme "h"; "ml" est OCaml;
L'OP a déjà une dépendance sur GtkSourceView, donc il veut probablement une fonction qui retourne un type listé dans .../share/mime/types, qui est installé par GtkSourceView ou l'une de ses dépendances. Ce fichier liste "text/x-erlang", "text/x-eiffel", etc (juste en passant par les "e" s :) :) Il n'y a pas d'extensions canoniques pour ces types listés dans ce fichier cependant. –
Je pense que get_language_from_mime_type est pour finir obtenir une description syntaxique (en surbrillance, ...) de l'un des fichiers de configuration eiffel.lang, erlang.lang, ... dans .../share/gtksourceview-2.0/language-specs/ –
@PascalCuoq - Votre droite, ce sont les types mime que je veux rechercher - cela signifie-t-il que je vais devoir créer moi-même une grande table de recherche, et retourner le type mime basé sur l'extension de fichier? –