[Haskell-cafe] Request for a Simple Pretty Printing library

2006-12-13 Thread Neil Mitchell

Hi,

I've been using the HughesPJ pretty printing library, but I need a new
combinator:

wrap :: String - Doc - String - Doc
wrap prepend doc append = ...

The semantics of this would be that the text is prepended and appended
to the doc when rendered, but does not alter the pretty printing at
all. The idea of this is to support printing with HTML rendering:

wrap span class='keyword' (text case) /span

The HughesPJ library is 1000 lines long, so will be quite a lot of
work to change this to get it working properly. Is there a simpler
pretty printing library, with source code available somewhere? Ideally
using the same interface.

Of course, if anyone knows how to make this combinator using the
existing library, or using another existing library, I'd appreciate
it.

Thanks

Neil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Request for a Simple Pretty Printing library

2006-12-13 Thread Tomasz Zielonka
On Wed, Dec 13, 2006 at 08:58:25PM +, Neil Mitchell wrote:
 I've been using the HughesPJ pretty printing library, but I need a new
 combinator:
 
 wrap :: String - Doc - String - Doc
 wrap prepend doc append = ...
 
 The semantics of this would be that the text is prepended and appended
 to the doc when rendered, but does not alter the pretty printing at
 all. The idea of this is to support printing with HTML rendering:
 
 wrap span class='keyword' (text case) /span
 
 The HughesPJ library is 1000 lines long, so will be quite a lot of
 work to change this to get it working properly.

I am not sure it will work, but it's sufficiently easy to try.
Look at the innards of HughesPJ, especially the TextBeside data
constructor. Its second parameter is an Int holding the length
of the text. Perhaps if you created TextBeside with your HTML
markup, but with 0 length field, things would be laid out properly.

Something like:

wrap prepend doc append =
zeroText prepend  doc  zeroText append
zeroText s = textBeside_ (Str s) 0 Empty

Best regards
Tomasz
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Request for a Simple Pretty Printing library

2006-12-13 Thread Doaitse Swierstra

The Prettyprint library you can download from:

http://www.cs.uu.nl/wiki/HUT/Download

and is described on:

http://www.cs.uu.nl/wiki/HUT/PrettyPrintingCombinators

contains amongst others the following code:

data Doc= Empty
| Char Char -- invariant: char is not '\n'
| Text !Int String  -- invariant: text doesn't  
contain '\n'
| Line !Bool-- True = when undone by  
group, do not insert a space

| Cat Doc Doc
| Nest !Int Doc
| Union Doc Doc -- invariant: first lines of  
first doc longer than the first lines of the second doc

| Column  (Int - Doc)
| Nesting (Int - Doc)

text  = Empty
text s  = Text (length s) s

so if you define now:

wrap l t r = Text 0 l | text t | Text 0 r

you should be set and done,

 Doaitse Swierstra


On Dec 13, 2006, at 10:31 PM, Tomasz Zielonka wrote:

On Wed, Dec 13, 2006 at 08:58:25PM +, Neil Mitchell wrote:
I've been using the HughesPJ pretty printing library, but I need a  
new

combinator:

wrap :: String - Doc - String - Doc
wrap prepend doc append = ...

The semantics of this would be that the text is prepended and  
appended

to the doc when rendered, but does not alter the pretty printing at
all. The idea of this is to support printing with HTML rendering:

wrap span class='keyword' (text case) /span

The HughesPJ library is 1000 lines long, so will be quite a lot of
work to change this to get it working properly.


I am not sure it will work, but it's sufficiently easy to try.
Look at the innards of HughesPJ, especially the TextBeside data
constructor. Its second parameter is an Int holding the length
of the text. Perhaps if you created TextBeside with your HTML
markup, but with 0 length field, things would be laid out properly.

Something like:

wrap prepend doc append =
zeroText prepend  doc  zeroText append
zeroText s = textBeside_ (Str s) 0 Empty

Best regards
Tomasz
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe





___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Request for a Simple Pretty Printing library

2006-12-13 Thread Neil Mitchell

Hi


Something like:

wrap prepend doc append =
zeroText prepend  doc  zeroText append
zeroText s = textBeside_ (Str s) 0 Empty


Thanks, that works great!

Is there likely to be any support for adding this to the standard
library? I'd rather not have to fork a version of HughesPJ to get this
feature.

Thanks

Neil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Request for a Simple Pretty Printing library

2006-12-13 Thread Donald Bruce Stewart
doaitse:
 The Prettyprint library you can download from:
 
 http://www.cs.uu.nl/wiki/HUT/Download
 

I've added uulib to the libraries page:


http://haskell.org/haskellwiki/Libraries_and_tools/Compiler_tools#Pretty_printing


But this makes me wonder: how many other top secret utrecht libraries
aren't also documented on the libraries page?

No one will know to use them, if they're not on haskell.org libraries page! :) 

http://haskell.org/haskellwiki/Libraries_and_tools

-- Don
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe