Browse thread
Syntax highlighting and Ocaml/PHP integration
-
Dario Teixeira
- Dave Benjamin
- Martin Jambon
- Adrien
- Dario Teixeira
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Dave Benjamin <dave@r...> |
| Subject: | Re: [Caml-list] Syntax highlighting and Ocaml/PHP integration |
Dario Teixeira wrote:
> I'm looking for a GPL-compatible syntax highlighting library with support
> for most common programming languages and markups. Obviously I would
> prefer a native Ocaml library, though something in C would also be
> acceptable due the relative ease of writing bindings.
I have had decent results opening a pipe to GNU source-highlight. I'm
mainly using it on JSON, so I can't vouch for its support of other
languages but it seems pretty comprehensive.
let pipe program input =
let (in_channel, out_channel) = Unix.open_process program in
output_string out_channel input;
close_out out_channel;
let result = ref [] in
begin
try
while true do
result := input_line in_channel :: !result
done
with End_of_file -> ()
end;
ignore (Unix.close_process (in_channel, out_channel));
String.concat "\n" (List.rev !result)
let pre_body = Pcre.regexp ~flags:[`DOTALL] ".*<pre>(.*)</pre>.*"
let source_highlight lang code =
let result = pipe ("source-highlight -s " ^ lang) code in
Pcre.replace ~rex:pre_body ~templ:"$1" result
Caveat: The "pipe" function above will block on large inputs due to
buffering deadlock. It should probably be rewritten using Unix.select.
Dave