대부분의 언어에는이 기능이 없으므로 OCaml에서이 언어를 찾을 수 있습니다. 아파치는 mime.types
파일을 가지고있다. 힌트를 찾을 수있다. 이것은 가장 일반적인 방법입니다 - 확장을 mimetype으로 매핑하는 거대한 테이블.
let mimetype_of_extension = function
| "txt" | "log" -> "text/plain"
| "html" | "htm" -> "text/html"
| "zip" | "application/zip"
...
또 다른 방법은 파일의 내용을 살펴 보는 것입니다,하지만 당신은 기본적으로 다양한 파일 형식에 대해 알아야 할 : 당신은 쉽게 OCaml의 그것을 구현할 수 있습니다.
모든 언어의 소스 파일이 일반적으로 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"는 "h"와 마찬가지로 C 프로그램입니다. "ml"은 OCaml이다.
OP에는 이미 GtkSourceView에 대한 종속성이 있으므로 GtkSourceView 또는 해당 종속성 중 하나에 의해 설치된 .../share/mime/types에 나열된 유형을 반환하는 함수가 필요합니다. 그 파일은 "text/x-erlang", "text/x-eiffel"등을 나열합니다. ("e"를 그냥지나칩니다.)이 파일에 나열된 유형의 표준 확장은 없습니다. –
get_language_from_mime_type은 궁극적으로 구성 파일 중 하나 인 eiffel.lang, erlang.lang ... .../share/gtksourceview-2.0/language-specs /에서 구문 설명 (강조 표시, ...)을 얻는 것입니다. –
@PascalCuoq - 귀하가 원하는 것은 마임 유형입니다.이 말은 내가 직접 큰 룩업 테이블을 만들고 파일 확장명을 기반으로 MIME 유형을 반환해야한다는 의미입니까? –