|
| 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 | | | txt :: Style s => String -> Para s () | | | 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 | | | forceNewLine :: Style s => Para s () | | | paragraph :: Style s => Para s a -> TM ps s a | | | endPara :: Style s => Para s () | | | startPara :: Style s => Para s () | | | getParaStyle :: TM ps s ps | | | setParaStyle :: ParagraphStyle ps s => ps -> TM ps s () | | | mkContainer :: PDFFloat -> 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
| | -> 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
|
| | | 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, tolerance para)
tolerance para means a paragraph is not started if too close from the bottom edge of the box
|
|
|
| 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
|
|
| txt :: Style s => String -> Para s () |
| Add a text line
|
|
| 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
|
|
| Paragraph construction operators
|
|
| forceNewLine :: Style s => Para s () |
| For a newline and end the current paragraph
|
|
| paragraph :: Style s => Para s a -> TM ps s a |
| Add a new paragraph to the text
|
|
| endPara :: Style s => Para s () |
|
| startPara :: Style s => Para s () |
|
| 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 |