From: Martin Jambon <martin.jambon@ens-lyon.org>
To: ohl@physik.uni-wuerzburg.de
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Format: Fortran (&c.) style continuation lines?
Date: Thu, 08 Apr 2010 10:53:25 -0700 [thread overview]
Message-ID: <4BBE1815.3070403@ens-lyon.org> (raw)
In-Reply-To: <20100408105828.3626347A7A@wthp058.physik.uni-wuerzburg.de>
Thorsten Ohl (TP2) wrote:
> Hi,
>
> for ages, I've been using the following (somewhat hackish) approach to
> pretty printing source code that requires special lexical markers to
> allow statements that continue over more than one line. (e.g. in
> Fortran
>
> foo = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 &
> + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 &
> + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 &
> + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 &
> + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 &
> + 1 + 1 + 1 + 1 + 1 + 1 + 1
>
> and in /bin/sh we have the same with "\\" instead of "&"):
>
> open Format;;
>
> let continuing = ref true;;
>
> let wrap_newline () =
> let out, flush, newline, space = get_all_formatter_output_functions
> () in
> let newline' () =
> if !continuing then
> out " &" 0 2;
> newline () in
> set_all_formatter_output_functions out flush newline' space;;
>
> let nl () =
> continuing := false;
> print_newline ();
> continuing := true;;
>
> let _ =
> wrap_newline ();;
>
> (* Nonsensical example: *)
> for statement = 1 to 3 do
> printf " @[<2>foo = 1";
> for i = 1 to 100 do
> printf "@, + 1"
> done;
> nl ()
> done;;
>
> The requirement to end each statement with "nl ()" is tedious in real
> world applications and the use of the global variable "continuing"
> violates my sense of aesthetics...
>
> Is there a more idiomatic approach that I'm missing?
Given the imperative nature of the Format module interface, your solution
seems right to me. Maybe you'll output up to 2 bytes beyond the margin but I
guess that's ok.
You may also consider using easy-format, which offers a functional interface
on top of Format. The programmer's job is to create a tree containing strings
and parameters while the actual printing is done by a single function call.
That said, easy-format does not support custom newline strings although I
could add the feature. Link: http://martin.jambon.free.fr/easy-format.html
Martin
--
http://mjambon.com/
prev parent reply other threads:[~2010-04-08 17:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-08 10:58 Thorsten Ohl (TP2)
2010-04-08 17:53 ` Martin Jambon [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BBE1815.3070403@ens-lyon.org \
--to=martin.jambon@ens-lyon.org \
--cc=caml-list@yquem.inria.fr \
--cc=ohl@physik.uni-wuerzburg.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).