大多數語言都沒有這個,所以我會非常驚訝的發現它在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