大多数语言都没有这个,所以我会非常惊讶的发现它在OCaml中。 Apache使用mime.types
文件来处理它 - 你可以在那里寻找提示。这是最常用的方式 - 将扩展映射到mimetypes的巨大表格。您可以在OCaml的实现很容易:
let mimetype_of_extension = function
| "txt" | "log" -> "text/plain"
| "html" | "htm" -> "text/html"
| "zip" | "application/zip"
...
另一种方法是看文件的内容,但你基本上需要了解的各种文件格式。
这就是说,它并没有多大帮助,因为所有语言的源文件通常被视为text/plain
。他们无法通过mimetype区分;因此我真的不知道你的get_language_from_mime_type
函数是干什么的。
但是,各种源文件的文件名扩展名或多或少是标准化的,所以如果您知道扩展名,您将会知道该语言。获取扩展名与从文件名开始翻录上一段时间一样简单。
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;;
好吧,好吧,除了Brainfuck和OCaml以外,任何语言都可以。在那之后,很容易 - “c”是一个C程序,就像“h”一样; “ml”是OCaml;等等。
OP已经依赖于GtkSourceView,所以他可能想要一个返回类型列表中的类型的函数.../share/mime/types,它由GtkSourceView或其依赖项之一安装。该文件列出了“text/x-erlang”,“text/x-eiffel”等等(只是通过“e”s)。这个文件中没有列出这些类型的规范扩展。 – 2010-06-04 08:53:30
我认为get_language_from_mime_type是用于最终从配置文件eiffel.lang,erlang.lang,...中的.../share/gtksourceview-2.0/language-specs中获得语法描述(突出显示,...) – 2010-06-04 08:56:21
@PascalCuoq - 您的权利,这些是我想查找的MIME类型 - 这是否意味着我必须自己创建一个大型查找表,然后根据文件扩展名返回MIME类型? – 2010-06-04 09:54:11