From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <5764c029b688c1c0d24a2e97cd764f@gmail.com> X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 5489C7EE6B for ; Wed, 27 Nov 2013 13:52:40 +0100 (CET) Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of 5764c029b688c1c0d24a2e97cd764f@gmail.com) identity=pra; client-ip=209.85.214.46; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="5764c029b688c1c0d24a2e97cd764f@gmail.com"; x-sender="5764c029b688c1c0d24a2e97cd764f@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of 5764c029b688c1c0d24a2e97cd764f@gmail.com designates 209.85.214.46 as permitted sender) identity=mailfrom; client-ip=209.85.214.46; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="5764c029b688c1c0d24a2e97cd764f@gmail.com"; x-sender="5764c029b688c1c0d24a2e97cd764f@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-bk0-f46.google.com) identity=helo; client-ip=209.85.214.46; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="5764c029b688c1c0d24a2e97cd764f@gmail.com"; x-sender="postmaster@mail-bk0-f46.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmUDALnplVLRVdYulGdsb2JhbABZghsEvGSBHRYOAQEBAQcLCwkSKoIlAQEFJxkBGxwBAQMMBgULAwoJFggHCQMCAQIBDwIRAQUBCxEGDQEFAgKHagEDDwQBozSMWYMJhEcKGScNZIcoEQEFDIxlgSloB4QzA5YpgWuGRYYVg0xBgxeBPg X-IPAS-Result: AmUDALnplVLRVdYulGdsb2JhbABZghsEvGSBHRYOAQEBAQcLCwkSKoIlAQEFJxkBGxwBAQMMBgULAwoJFggHCQMCAQIBDwIRAQUBCxEGDQEFAgKHagEDDwQBozSMWYMJhEcKGScNZIcoEQEFDIxlgSloB4QzA5YpgWuGRYYVg0xBgxeBPg X-IronPort-AV: E=Sophos;i="4.93,782,1378850400"; d="scan'208";a="38206831" Received: from mail-bk0-f46.google.com ([209.85.214.46]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/RC4-SHA; 27 Nov 2013 13:52:39 +0100 Received: by mail-bk0-f46.google.com with SMTP id u15so3180943bkz.19 for ; Wed, 27 Nov 2013 04:52:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=Y//A19fM3p7Asion9alrqD+grRJPzklFfJzsR6fn5QU=; b=wyM6jBO/uEBLz9ndF74NPOzDjrxIF17sGmtdBoQMgqhI410Na9c03UkShdwXnKeAM4 g4CFcH6S9X0X0L+YwLUDptuXOiAo5oIa0lBLjIYU9eH1DqoyTcrrw/OhTolH4QA3zRLI sP+BXbXjt95tIG4oLvPvEVW/ZDcu5UZMF7Iv1Jno1xvpIHww0Jru1DvKvPbpz1arvINE R0I3kxNfpTixl2Wd3HP1lA5BlM5/QPCZRMJ+Ua904afrf6lGDmjUO16ydxhZHazDq3tJ bo4XZL5cRriGzT+qMRoreh+kYoJP+acD1MqSgh3U1GeR3o1aL7szK6h+xc0gl4WIbeX6 RTzQ== X-Received: by 10.205.98.69 with SMTP id cn5mr242520bkc.70.1385556759414; Wed, 27 Nov 2013 04:52:39 -0800 (PST) Received: from [172.27.6.192] ([213.106.240.92]) by mx.google.com with ESMTPSA id on10sm55486414bkb.13.2013.11.27.04.52.38 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 27 Nov 2013 04:52:39 -0800 (PST) Message-ID: <5295EB1C.7030107@gmail.com> Date: Wed, 27 Nov 2013 12:52:44 +0000 From: Matej Kosik <5764c029b688c1c0d24a2e97cd764f@gmail.com> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20131005 Icedove/17.0.9 MIME-Version: 1.0 To: Jeremie Dimino CC: "caml-list@inria.fr" References: <529370C0.9020801@gmail.com> In-Reply-To: X-Enigmail-Version: 1.6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Caml-list] [batteries] ... how to create (format) directives that do not take any arguments? On 27/11/13 11:54, Jeremie Dimino wrote: > On Mon, Nov 25, 2013 at 3:46 PM, Matej Kosik <5764c029b688c1c0d24a2e97cd764f@gmail.com > wrote: > > I would like to define custom directives, that would enable me to write code like e.g. this: > > Print.printf "regular %bold_on bold %bold_off regular %italic_on italic %italic_off"; > > [...] > Can somebody give me some advice how to create simple "parameterless format directives" (like those above)? > > > IIRC, this should work: > > let printer_bold_on k = k (fun oc -> output_string oc "blah") > > to define the format directive %bold_on. Thank you. This was what I was looking for. Now I can define something like this: let bold_is_open = ref false let printer_B k = k (fun oc -> if !bold_is_open then begin output_string oc ANSI.bold_off; bold_is_open := false end else begin output_string oc ANSI.bold_on; bold_is_open := true end ) and then: Print.printf p"foo %B%!bar%B baz" instead of print_string ("foo " ^ bold_on ^ "bar" ^ bold_off ^ "baz") So this is a progress. The only thing that adds friction is that I cannot leave out %! because if I did it, I would get a complain about unbound "print_Bbar" variable. Thus, where I non-identifier-character follows %B, I must put extra %! instruction. This is not too bad although still one step from ideal.