From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id D8F1BBBAF for ; Wed, 1 Oct 2008 17:28:28 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArgDAHYz40jAXQIniGdsb2JhbACTSgEBARUiqk6Bag X-IronPort-AV: E=Sophos;i="4.33,344,1220220000"; d="scan'208";a="15556279" Received: from concorde.inria.fr ([192.93.2.39]) by mail2-smtp-roc.national.inria.fr with ESMTP; 01 Oct 2008 17:28:28 +0200 Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id m91FSSu5028227 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Wed, 1 Oct 2008 17:28:28 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoEABs040jOe3NG/2dsb2JhbAC+T4Fq X-IronPort-AV: E=Sophos;i="4.33,344,1220220000"; d="scan'208";a="18002185" Received: from spoomusic.com ([206.123.115.70]) by mail1-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 01 Oct 2008 17:28:27 +0200 Received: (qmail 18284 invoked by uid 89); 1 Oct 2008 15:28:26 -0000 Received: from unknown (HELO ?192.168.1.99?) (98.165.129.233) by 0 with ESMTPS (DHE-RSA-AES256-SHA encrypted); 1 Oct 2008 15:28:26 -0000 Message-ID: <48E396DF.6080304@ramenlabs.com> Date: Wed, 01 Oct 2008 08:27:27 -0700 From: Dave Benjamin User-Agent: Mozilla-Thunderbird 2.0.0.16 (X11/20080724) MIME-Version: 1.0 To: Dario Teixeira Cc: caml-list@inria.fr Subject: Re: [Caml-list] Syntax highlighting and Ocaml/PHP integration References: <650721.83058.qm@web54605.mail.re2.yahoo.com> In-Reply-To: <650721.83058.qm@web54605.mail.re2.yahoo.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Miltered: at concorde with ID 48E3971C.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; syntax:01 ocaml:01 syntax:01 ocaml:01 bindings:01 pcre:01 regexp:01 flags:01 pcre:01 inputs:01 wrote:01 unix:01 unix:01 caml-list:01 benjamin:01 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] ".*
(.*)
.*" 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