|
Graphics.PDF.Typesetting | Portability | portable | Stability | experimental | Maintainer | misc@NOSPAMalpheccar.org |
|
|
|
|
|
Description |
Experimental typesetting. It is a work in progress
|
|
Synopsis |
|
class Box a where | | | class DisplayableBox a where | | | | | type BoxDimension = (PDFFloat, PDFFloat, PDFFloat) | | class ComparableStyle a => Style a where | | | data TextStyle = TextStyle {} | | | | class (ComparableStyle a, Style s) => ParagraphStyle a s | a -> s where | | | class (Style s, Monad m) => MonadStyle s m | m -> s where | | | class ComparableStyle a where | | | data Para s a | | data TM ps s a | | data VBox ps s | | data VerState s = VerState {} | | data Container ps s | | | | displayFormattedText :: ParagraphStyle ps s => Rectangle -> ps -> s -> TM ps s a -> Draw a | | forceNewLine :: Style s => Para s () | | txt :: Style s => String -> Para s () | | paragraph :: Style s => Para s a -> TM ps s a | | kern :: Style s => PDFFloat -> Para s () | | addPenalty :: Int -> Para s () | | mkLetter :: (Show a, Box a, DisplayableBox a) => BoxDimension -> Maybe s -> a -> Letter s | | mkDrawBox :: Draw () -> DrawBox | | getParaStyle :: TM ps s ps | | setParaStyle :: ParagraphStyle ps s => ps -> TM ps s () | | mkContainer :: PDFFloat -> PDFFloat -> PDFFloat -> PDFFloat -> Container ps s | | fillContainer :: (ParagraphStyle ps s, ComparableStyle ps) => VerState ps -> Container ps s -> [VBox ps s] -> (Draw (), Container ps s, [VBox ps s]) | | defaultVerState :: s -> VerState s | | getBoxes :: ParagraphStyle ps s => ps -> s -> TM ps s a -> [VBox ps s] | | containerX :: Container ps s -> PDFFloat | | containerY :: Container ps s -> PDFFloat | | containerWidth :: Container ps s -> PDFFloat | | containerHeight :: Container ps s -> PDFFloat | | containerContentHeight :: Container ps s -> PDFFloat | | containerContentRightBorder :: Container ps s -> PDFFloat | | containerContentLeftBorder :: Container ps s -> PDFFloat | | containerCurrentHeight :: Container ps s -> PDFFloat | | containerContentRectangle :: Container ps s -> Rectangle | | setFirstPassTolerance :: PDFFloat -> TM ps s () | | setSecondPassTolerance :: PDFFloat -> TM ps s () | | setHyphenPenaltyValue :: Int -> TM ps s () | | setFitnessDemerit :: PDFFloat -> TM ps s () | | setHyphenDemerit :: PDFFloat -> TM ps s () | | setLinePenalty :: PDFFloat -> TM ps s () | | getFirstPassTolerance :: TM ps s PDFFloat | | getSecondPassTolerance :: TM ps s PDFFloat | | getHyphenPenaltyValue :: TM ps s Int | | getFitnessDemerit :: TM ps s PDFFloat | | getHyphenDemerit :: TM ps s PDFFloat | | getLinePenalty :: TM ps s PDFFloat | | setJustification :: Justification -> TM ps s () | | setBaseLineSkip :: PDFFloat -> PDFFloat -> PDFFloat -> TM ps s () | | setLineSkipLimit :: PDFFloat -> TM ps s () | | setLineSkip :: PDFFloat -> PDFFloat -> PDFFloat -> TM ps s () | | getBaseLineSkip :: TM ps s (PDFFloat, PDFFloat, PDFFloat) | | getLineSkipLimit :: TM ps s PDFFloat | | getLineSkip :: TM ps s (PDFFloat, PDFFloat, PDFFloat) | | data StandardStyle = Font PDFFont Color Color | | data StandardParagraphStyle = NormalParagraph |
|
|
|
Types
|
|
Boxes
|
|
class Box a where |
A box is an object with dimensions and used in the typesetting process
| | Methods | boxWidth | :: a | Box
| -> PDFFloat | Width of the box
| Box width
|
| | boxHeight :: a -> PDFFloat | Box height
| | boxDescent :: a -> PDFFloat | Distance between box bottom and box baseline
| | boxAscent :: a -> PDFFloat | Distance between box top and box baseline
|
| | Instances | |
|
|
class DisplayableBox a where |
A box that can be displayed
| | Methods | strokeBox | :: a | The box
| -> PDFFloat | Horizontal position
| -> PDFFloat | Vertical position (top of the box and NOT baseline)
| -> Draw () | | Draw a box
|
|
| | Instances | |
|
|
data Letter s |
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 | | Instances | |
|
|
type BoxDimension = (PDFFloat, PDFFloat, PDFFloat) |
Dimension of a box : width, height and descent
|
|
Styles
|
|
class ComparableStyle a => Style a where |
Style of text (sentences and words). Minimum definition textStyle
| | Methods | sentenceStyle | :: 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)
|
| | wordStyle | | | textStyle :: a -> TextStyle | | updateStyle :: a -> a | A style may contain data changed from word to word
| | styleHeight :: a -> PDFFloat | A style may change the height of words
Default implementation
styleHeight = getHeight . textFont . textStyle
| | styleDescent :: a -> PDFFloat | A style may change the descent of lines
Default implementation
styleDescent = getDescent . textFont . textStyle
|
| | Instances | |
|
|
data TextStyle |
Text style used by PDF operators
| Constructors | TextStyle | | 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 |
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 where |
Paragraph style
| | Methods | lineWidth | :: 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
|
| | linePosition | :: 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
|
| | interline | :: 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
|
| | paragraphChange | :: a | The style
| -> [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
|
| | paragraphStyle | :: 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
|
|
| | Instances | |
|
|
class (Style s, Monad m) => MonadStyle s m | m -> s where |
A MonadStyle where some typesetting operators can be used
| | Methods | setStyle :: s -> m () | Set the current text style
| | currentStyle :: m s | Get the current text style
| | addBox | | | glue | :: 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
|
| | unstyledGlue | :: 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 | |
|
|
class ComparableStyle a where |
Used to compare two style without taking into account the style state
| | Methods | isSameStyleAs :: a -> a -> Bool |
| | Instances | |
|
|
Typesetting monads
|
|
data Para s a |
Instances | |
|
|
data TM ps s a |
Instances | |
|
|
Containers
|
|
data VBox ps s |
Instances | |
|
|
data VerState s |
|
|
data Container ps s |
Container for vboxes (x,y,width,maxheight,height,currenty,current z)
|
|
|
data Justification |
Constructors | FullJustification | | Centered | | LeftJustification | | RightJustification | |
| Instances | |
|
|
Functions
|
|
Text display
|
|
displayFormattedText |
:: 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
|
|
forceNewLine :: Style s => Para s () |
For a newline and end the current paragraph
|
|
txt :: Style s => String -> Para s () |
Add a null char
nullChar :: Para ()
nullChar = Para . tell $ [nullLetter]
Add a text line
|
|
paragraph :: Style s => Para s a -> TM ps s a |
Add a new paragraph to the text
|
|
Paragraph construction operators
|
|
kern :: Style s => PDFFloat -> Para s () |
add a kern (space that can be dilated or compressed and on which no line breaking can occur)
|
|
addPenalty :: Int -> Para s () |
Add a penalty
|
|
mkLetter |
|
|
mkDrawBox :: Draw () -> DrawBox |
Make a drawing box. A box object containing a Draw value
|
|
Functions useful to change the paragraph style
|
|
getParaStyle :: TM ps s ps |
Get the current paragraph style
|
|
setParaStyle :: ParagraphStyle ps s => ps -> TM ps s () |
Change the current paragraph style
|
|
Container
|
|
mkContainer |
|
|
fillContainer |
|
|
defaultVerState :: s -> VerState s |
Default vertical state
Default values
baselineskip = (12,0.17,0.0)
lineskip = (3.0,0.33,0.0)
lineskiplimit = 2
|
|
getBoxes |
:: 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 -> PDFFloat |
Container horizontal position
|
|
containerY :: Container ps s -> PDFFloat |
Container vertical position
|
|
containerWidth :: Container ps s -> PDFFloat |
Get the width of the container
|
|
containerHeight :: Container ps s -> PDFFloat |
Get the height of the container
|
|
containerContentHeight :: Container ps s -> PDFFloat |
Get the content height of the container with glue dilatation
|
|
containerContentRightBorder :: Container ps s -> PDFFloat |
Get the maximum right border of the container content (maybe bigger than container width due to overfull lines)
|
|
containerContentLeftBorder :: Container ps s -> PDFFloat |
Get the minimum left border of the container content
|
|
containerCurrentHeight :: Container ps s -> PDFFloat |
Get the current height of the container without glue dilatation
|
|
containerContentRectangle :: Container ps s -> Rectangle |
Return the rectangle containing the text after formatting and glue dilatation
|
|
Settings (similar to TeX ones)
|
|
Line breaking settings
|
|
setFirstPassTolerance :: PDFFloat -> TM ps s () |
|
setSecondPassTolerance :: PDFFloat -> TM ps s () |
|
setHyphenPenaltyValue :: Int -> TM ps s () |
|
setFitnessDemerit :: PDFFloat -> TM ps s () |
|
setHyphenDemerit :: PDFFloat -> TM ps s () |
|
setLinePenalty :: PDFFloat -> TM ps s () |
|
getFirstPassTolerance :: TM ps s PDFFloat |
|
getSecondPassTolerance :: TM ps s PDFFloat |
|
getHyphenPenaltyValue :: TM ps s Int |
|
getFitnessDemerit :: TM ps s PDFFloat |
|
getHyphenDemerit :: TM ps s PDFFloat |
|
getLinePenalty :: TM ps s PDFFloat |
|
setJustification |
|
|
Vertical mode settings
|
|
setBaseLineSkip :: PDFFloat -> PDFFloat -> PDFFloat -> TM ps s () |
|
setLineSkipLimit :: PDFFloat -> TM ps s () |
|
setLineSkip :: PDFFloat -> PDFFloat -> PDFFloat -> TM ps s () |
|
getBaseLineSkip :: TM ps s (PDFFloat, PDFFloat, PDFFloat) |
|
getLineSkipLimit :: TM ps s PDFFloat |
|
getLineSkip :: TM ps s (PDFFloat, PDFFloat, PDFFloat) |
|
Styles
|
|
data StandardStyle |
Standard styles for sentences
| Constructors | | Instances | |
|
|
data StandardParagraphStyle |
Standard styles for paragraphs
| Constructors | | Instances | |
|
|
Produced by Haddock version 0.8 |