HPDF-1.4.4: Generation of PDF documents

Portabilityportable
Stabilityexperimental
Maintainermisc@NOSPAMalpheccar.org
Safe HaskellNone

Graphics.PDF.Typesetting

Contents

Description

Experimental typesetting. It is a work in progress

Synopsis

Types

Boxes

class Box a whereSource

A box is an object with dimensions and used in the typesetting process

Methods

boxWidthSource

Arguments

:: a

Box

-> PDFFloat

Width of the box

Box width

boxHeight :: a -> PDFFloatSource

Box height

boxDescent :: a -> PDFFloatSource

Distance between box bottom and box baseline

boxAscent :: a -> PDFFloatSource

Distance between box top and box baseline

Instances

class DisplayableBox a whereSource

A box that can be displayed

Methods

strokeBoxSource

Arguments

:: a

The box

-> PDFFloat

Horizontal position

-> PDFFloat

Vertical position (top of the box and NOT baseline)

-> Draw () 

Draw a box

Instances

data Letter s Source

A letter which can be anything. Sizes are widths and for glue the dilation and compression factors For the generic letter, height and descent are also provided

Constructors

Letter BoxDimension !AnyBox !(Maybe s)

Any box as a letter

Glue !PDFFloat !PDFFloat !PDFFloat !(Maybe s)

A glue with style to know if it is part of the same sentence

FlaggedPenalty !PDFFloat !Int !s

Hyphen point

Penalty !Int

Penalty

AChar !s !Char !PDFFloat

A char

Kern !PDFFloat !(Maybe s)

A kern : non dilatable and non breakable glue

Instances

type BoxDimension = (PDFFloat, PDFFloat, PDFFloat)Source

Dimension of a box : width, height and descent

Styles

class ComparableStyle a => Style a whereSource

Style of text (sentences and words). Minimum definition textStyle

Methods

sentenceStyleSource

Arguments

:: a

The style

-> Maybe (Rectangle -> Draw b -> Draw ())

Function receiving the bounding rectangle and the command for drawing the sentence

Modify the look of a sentence (sequence of words using the same style on a line)

wordStyleSource

Arguments

:: a

The style

-> Maybe (Rectangle -> StyleFunction -> Draw b -> Draw ())

Word styling function

textStyle :: a -> TextStyleSource

updateStyle :: a -> aSource

A style may contain data changed from word to word

styleHeight :: a -> PDFFloatSource

A style may change the height of words

 Default implementation
 styleHeight = getHeight . textFont . textStyle

styleDescent :: a -> PDFFloatSource

A style may change the descent of lines

 Default implementation
 styleDescent = getDescent . textFont . textStyle

Instances

data TextStyle Source

Text style used by PDF operators

Constructors

TextStyle 

Fields

textFont :: !PDFFont
 
textStrokeColor :: !Color
 
textFillColor :: !Color
 
textMode :: !TextMode
 
penWidth :: !PDFFloat
 
scaleSpace :: !PDFFloat

Scaling factor for normal space size (scale also the dilation and compression factors)

scaleDilatation :: !PDFFloat

Scale the dilation factor of glues

scaleCompression :: !PDFFloat

Scale the compression factor of glues

Instances

data StyleFunction Source

What kind of style drawing function is required for a word when word styling is enabled

Constructors

DrawWord

Must style a word

DrawGlue

Must style a glue

Instances

class (ComparableStyle a, Style s) => ParagraphStyle a s | a -> s whereSource

Paragraph style

Methods

lineWidthSource

Arguments

:: a

The style

-> PDFFloat

Width of the text area used by the typesetting algorithm

-> Int

Line number

-> PDFFloat

Line width

Width of the line of the paragraph

linePositionSource

Arguments

:: a

The style

-> PDFFloat

Width of the text area used by the typesetting algorithm

-> Int

Line number

-> PDFFloat

Horizontal offset from the left edge of the text area

Horizontal shift of the line position relatively to the left egde of the paragraph bounding box

interlineSource

Arguments

:: a

The style

-> Maybe (Rectangle -> Draw ())

Function used to style interline glues

How to style the interline glues added in a paragraph by the line breaking algorithm

paragraphChangeSource

Arguments

:: a

The style

-> Int

Line offset different from 0 when a paragraph has been broken

-> [Letter s]

List of letters in the paragraph

-> (a, [Letter s])

Update style and list of letters

Change the content of a paragraph before the line breaking algorithm is run. It may also change the style

paragraphStyleSource

Arguments

:: a

The style

-> Maybe (Rectangle -> Draw b -> Draw ())

Function used to style a paragraph

Get the paragraph bounding box and the paragraph draw command to apply additional effects

class (Style s, Monad m) => MonadStyle s m | m -> s whereSource

A MonadStyle where some typesetting operators can be used

Methods

setStyle :: s -> m ()Source

Set the current text style

currentStyle :: m sSource

Get the current text style

addBoxSource

Arguments

:: (Show a, DisplayableBox a, Box a) 
=> a 
-> PDFFloat

Width

-> PDFFloat

Height

-> PDFFloat

Descent

-> m () 

Add a box using the current mode (horizontal or vertical. The current style is always applied to the added box)

glueSource

Arguments

:: PDFFloat

Size of glue (width or height depending on the mode)

-> PDFFloat

Dilatation factor

-> PDFFloat

Compression factor

-> m () 

Add a glue using the current style

unstyledGlueSource

Arguments

:: PDFFloat

Size of glue (width or height depending on the mode)

-> PDFFloat

Dilatation factor

-> PDFFloat

Compression factor

-> m () 

Add a glue with no style (it is just a translation)

Instances

Style s => MonadStyle s (Para s) 
Style s => MonadStyle s (TM ps s) 

class ComparableStyle a whereSource

Used to compare two style without taking into account the style state

Methods

isSameStyleAs :: a -> a -> BoolSource

Typesetting monads

data Para s a Source

Instances

MonadState s (Para s) 
Style s => MonadStyle s (Para s) 
Monad (Para s) 
Functor (Para s) 
MonadWriter [Letter s] (Para s) 

data TM ps s a Source

Instances

Style s => MonadStyle s (TM ps s) 
MonadWriter [VBox ps s] (TM ps s) 
Monad (TM ps s) 
Functor (TM ps s) 

Containers

data VBox ps s Source

Instances

MonadWriter [VBox ps s] (TM ps s) 
Show (VBox ps s) 
ParagraphStyle ps s => DisplayableBox (VBox ps s) 
Box (VBox ps s) 

data VerState s Source

Constructors

VerState 

Fields

baselineskip :: !(PDFFloat, PDFFloat, PDFFloat)

Default value (12,0.17,0.0)

lineskip :: !(PDFFloat, PDFFloat, PDFFloat)

Default value (3.0,0.33,0.0)

lineskiplimit :: !PDFFloat

Default value 2

currentParagraphStyle :: !s
 

data Container ps s Source

Container for vboxes (x,y,width,maxheight,height,currenty,current z, tolerance para) tolerance para means a paragraph is not started if too close from the bottom edge of the box

data Orientation Source

Constructors

E 
W 
N 
S 
NE 
NW 
SE 
SW 

Functions

Text display

displayFormattedTextSource

Arguments

:: ParagraphStyle ps s 
=> Rectangle

Text area

-> ps

default vertical style

-> s

Default horizontal style

-> TM ps s a

Typesetting monad

-> Draw a

Draw monad

Display a formatted text in a given bounding rectangle with a given default paragraph style, a given default text style. No clipping is taking place. Drawing stop when the last line is crossing the bounding rectangle in vertical direction

Text construction operators

txt :: Style s => String -> Para s ()Source

Add a text line

kern :: Style s => PDFFloat -> Para s ()Source

add a kern (space that can be dilated or compressed and on which no line breaking can occur)

addPenalty :: Int -> Para s ()Source

Add a penalty

mkLetterSource

Arguments

:: (Show a, Box a, DisplayableBox a) 
=> BoxDimension

Dimension of the box

-> Maybe s

Text style of the box (can use t)

-> a

Box

-> Letter s 

Make a letter from any box

mkDrawBox :: Draw () -> DrawBoxSource

Make a drawing box. A box object containing a Draw value

Paragraph construction operators

forceNewLine :: Style s => Para s ()Source

For a newline and end the current paragraph

paragraph :: Style s => Para s a -> TM ps s aSource

Add a new paragraph to the text

endPara :: Style s => Para s ()Source

Functions useful to change the paragraph style

getParaStyle :: TM ps s psSource

Get the current paragraph style

setParaStyle :: ParagraphStyle ps s => ps -> TM ps s ()Source

Change the current paragraph style

Container

mkContainerSource

Arguments

:: PDFFloat

x

-> PDFFloat

y

-> PDFFloat

width

-> PDFFloat

height

-> PDFFloat

Pargraph tolerance

-> Container ps s

New container

Create a empty container to constraint the amount of line that can be displayed

fillContainerSource

Arguments

:: (ParagraphStyle ps s, ComparableStyle ps) 
=> VerState ps

Vertical style for interline glues

-> Container ps s

Container

-> [VBox ps s]

VBox to add

-> (Draw (), Container ps s, [VBox ps s])

Component to draw, new container and remaining VBoxes due to overfull container

Fill a container with lines

defaultVerState :: s -> VerState sSource

Default vertical state

 Default values
 baselineskip = (12,0.17,0.0)
 lineskip = (3.0,0.33,0.0)
 lineskiplimit = 2

getBoxesSource

Arguments

:: ParagraphStyle ps s 
=> ps

default vertical style

-> s

Default horizontal style

-> TM ps s a

Typesetting monad

-> [VBox ps s]

List of boxes

Return the list of Vboxes for a text

containerX :: Container ps s -> PDFFloatSource

Container horizontal position

containerY :: Container ps s -> PDFFloatSource

Container vertical position

containerWidth :: Container ps s -> PDFFloatSource

Get the width of the container

containerHeight :: Container ps s -> PDFFloatSource

Get the height of the container

containerContentHeight :: Container ps s -> PDFFloatSource

Get the content height of the container with glue dilatation

containerContentRightBorder :: Container ps s -> PDFFloatSource

Get the maximum right border of the container content (maybe bigger than container width due to overfull lines)

containerContentLeftBorder :: Container ps s -> PDFFloatSource

Get the minimum left border of the container content

containerCurrentHeight :: Container ps s -> PDFFloatSource

Get the current height of the container without glue dilatation

containerContentRectangle :: Container ps s -> RectangleSource

Return the rectangle containing the text after formatting and glue dilatation

drawTextBoxSource

Arguments

:: (ParagraphStyle ps s, Style s) 
=> PDFFloat

x

-> PDFFloat

y

-> PDFFloat

width limit

-> PDFFloat

height limit

-> Orientation 
-> ps

default vertical style

-> s

Default horizontal style

-> TM ps s a

Typesetting monad

-> (Rectangle, Draw ()) 

Draw a text box with relative position. Useful for labels

Settings (similar to TeX ones)

Line breaking settings

setJustificationSource

Arguments

:: Justification

Centered, left or fully justified

-> TM ps s () 

Vertical mode settings

Styles