From: "Nicolas Pouillard" <nicolas.pouillard@inria.fr>
To: "Jonathan Roewen" <jonathan.roewen@gmail.com>
Cc: OCaml <caml-list@yquem.inria.fr>
Subject: Re: [Caml-list] Format & breaking
Date: Sun, 9 Jul 2006 09:04:27 +0200 [thread overview]
Message-ID: <cd67f63a0607090004m4b40df6ft34f8b4d3828976d5@mail.gmail.com> (raw)
In-Reply-To: <ad8cfe7e0607081238pf7676c4s25e318bc1613fc39@mail.gmail.com>
On 7/8/06, Jonathan Roewen <jonathan.roewen@gmail.com> wrote:
> Hi,
>
> I have a small question about format module, and pretty-printing XHTML.
>
> Basically, I want to print something like:
>
> <div>
> <p>....</p>
> <p>....</p> // when content fits on a single line..
> <p> // when content doesn't fit on a single line...
> ....
> </p>
> </div>
>
> but I can't get it to generate that. I was reading about the
> structural hovboxes, but the behaviour it describes doesn't seem to
> work -- at least with xhtml tags.
>
> For example, the above would be printed as:
> <div>
> <p>....</p>
> <p>....</p> // when content fits on a single line..
> <p> // when content doesn't fit on a single line...
> ....</p></div>
>
> which is frustrating. Or else I'm just misunderstanding the semantics
> of the Format module, which wouldn't surprise me ;-)
>
To do that you need two boxes:
"@[<hv0>@[<hv2><p>@,...@]@,</p>@]"
Here a more complete example:
type xml = Elt of string * xml list | Pcdata of string
let pp = Format.fprintf
let rec print_elt f =
function
| Elt (tag, contents) ->
pp f "@[<hv0>@[<hv2><%s>@,%a@]@,</%s>@]"
tag print_list_elts contents tag
| Pcdata s ->
Format.pp_print_string f s
and print_list_elts f =
let rec loop =
function
| [] -> ()
| x::xs -> (pp f "@,"; print_elt f x; loop xs) in
function
| [] -> ()
| [x] -> print_elt f x
| x::xs -> (print_elt f x; loop xs)
let tree =
Elt ("div", [
Elt ("p", [Pcdata "a short text"]);
Elt ("p", [Pcdata "a
looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
text"])
])
let () = Format.printf "%a@." print_elt tree
Regards,
--
Nicolas Pouillard
prev parent reply other threads:[~2006-07-09 7:04 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-08 19:38 Jonathan Roewen
2006-07-09 7:04 ` Nicolas Pouillard [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=cd67f63a0607090004m4b40df6ft34f8b4d3828976d5@mail.gmail.com \
--to=nicolas.pouillard@inria.fr \
--cc=caml-list@yquem.inria.fr \
--cc=jonathan.roewen@gmail.com \
/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).