Jade MIF Backend
Created by Kathleen Marszalek and Paul Prescod.
Sponsored by ISOGEN International Corp.
Contents
Supported Flow Objects
| character | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
| 
     font-weight
     font-posture
     font-name
     font-size
     input-whitespace-treatment
     position-point-shift
     language
     country
     color 1 
     |  | 
| 1Currently jade supports
(color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB") | 
 
| display-group | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  | 
     space-before
     space-after
     keep-with-previous?
     keep-with-next?
     break-before (#f, page)
     break-after (#f, page)
     keep (#f, page)
     may-violate-keep-before?
     may-violate-keep-after?
     | 
 
| rule | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
| 
     line-cap
     line-thickness
     line-repeat
     line-sep
     position-point-shift
     display-alignment (start, end, center)
     start-indent
     end-indent
     span (spans all columns if > 1)
     color 1
     | 
     orientation (horizontal, escapement)
     length
     space-before
     space-after
     keep-with-previous?
     keep-with-next?
     break-before (#f, page)
     break-after (#f, page)
     keep (#f, page)
     may-violate-keep-before?
     may-violate-keep-after?
     | 
| 1 Currently jade supports
(color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB") | 
 
| score | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  line-repeat (1 for type of before and through, 1 or 2 for after)
 |  type (before, through, after)
 | 
 
| line-field* | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  |  | 
| * At the beginning of paragraph only. | 
 
| leader* | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  |  | 
| * On the last line of paragraph only.  The principial port 
(the leader string itself) can contain characters only. | 
 
| link | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  | 
         destination [#f, objects returned by (idref-address ...) and
(current-node-address ...)]
	 | 
 
| index-entry | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  | 
         components
	 page-number?
    	 sort-string
	 starts-page-range?
    	 ends-page-range?
	 | 
| 
    components
    is a list of strings that represent index entry levels.
        This characterisitc is not inherited and shall be specified.
    page-number?
    is a boolean specifying whether this index entry should contain page number information.
        This characterisitc is not inherited. The default is #t.
    sort-string
    is either #f, specifying that this index entry's components should be used for sorting
        th index, or a string that should be used for sorting.
        This characterisitc is not inherited. The default is #f.
    starts-page-range?
    is a boolean specifying whether the index entry starts a page range.
        This characterisitc is not inherited. The default is #f.
    ends-page-range?
    is a boolean specifying whether the index entry starts a page range.
        This characterisitc is not inherited. The default is #f.
     | 
| Here's how to enable the above extension:
     
(declare-flow-object-class index-entry
    "UNREGISTERED::ISOGEN//Flow Object Class::index-entry")
     | 
 
| external-graphic | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  | 
	 display?
	 scale (max)
   	 max-width
   	 max-height
	 entity-system-id
   	 display-alignment
	 start-indent
    	 end-indent
    	 span (spans all columns if > 1)
    	 space-before
    	 space-after
    	 keep-with-previous?
    	 keep-with-next?
    	 break-before (#f, page)
    	 break-after (#f, page)
    	 keep (#f, page)
    	 may-violate-keep-before?
    	 may-violate-keep-after?
	 | 
 
| paragraph | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
| 
     lines (wrap, asis-wrap)
     hyphenation-ladder-count
     hyphenation-remain-char-count
     hyphenation-push-char-count
     font-weight
     font-posture
     font-name
     font-size
     quadding
     widow-count
     orphan-count
     language
     country
     | 
     span (spans all columns if > 1)
     space-before
     space-after
     keep-with-previous?
     keep-with-next?
     break-before (#f, page)
     break-after (#f, page)
     keep (#f, page)
     may-violate-keep-before?
     may-violate-keep-after?
     line-spacing
     min-leading (#f or 0 for proportional line spacing)
     first-line-start-indent
     | 
 
| paragraph-break | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
| Same as for paragraph | Same as for paragraph | 
 
| simple-page-sequence | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
| 
     page-width
     page-height
     left-margin
     right-margin
     top-margin
     bottom-margin
     header-margin
     footer-margin
     | 
     left-header
     center-header
     right-header
     left-footer
     center-footer
     right-footer
     | 
| (page-number-sosofo)
        (current-node-page-number-sosofo)
        "UNREGISTERED::James Clark//Procedure::if-first-page"
            This can be used only in the specification of the value of one of the
                header/footer characteristics of simple-page-sequence. It returns a sosofo
                that will display as sosofo1 if the page is the first page of the
                simple-page-sequence and as sosofo2 otherwise.
        "UNREGISTERED::James Clark//Procedure::if-front-page"
            This can be used only in the specification of the value of one of the
                header/footer characteristics of simple-page-sequence. It returns a sosofo
                that will display as sosofo1 if the page is a front (ie recto, odd-numbered)
                page and as sosofo2 if it is a back (ie verso, even-numbered) page.
        "UNREGISTERED::James Clark//Characteristic::page-n-columns"
            Value is a strictly positive integer, specifying the number of columns. The
                initial value is 1.
        "UNREGISTERED::James Clark//Characteristic::page-column-sep"
            Value is a length, specifying the separation between columns. The initial
                value is .5in.
        "UNREGISTERED::James Clark//Characteristic::page-balance-columns?"
            Value is a boolean. If true, the columns on the final page of the page-sequence
                should be balanced. The initial value is #f.
    
 | 
| Here's how to enable the above extensions:
     
(define if-first-page (external-procedure
    "UNREGISTERED::James Clark//Procedure::if-first-page"))
(define if-front-page (external-procedure   
    "UNREGISTERED::James Clark//Procedure::if-front-page"))
(declare-characteristic page-n-columns
    "UNREGISTERED::James Clark//Characteristic::page-n-columns" 1)
(declare-characteristic page-n-columns
    "UNREGISTERED::James Clark//Characteristic::page-column-gap" (* 36 1pt))
(declare-characteristic page-balance-columns?
    "UNREGISTERED::James Clark//Characteristic::page-balance-columns?" #f)
     | 
 
| table | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
| 
     table-border
     display-alignment
     start-indent
     end-indent
     |     
     table-width
     before-row-border
     after-row-border
     before-column-border
     after-column-border
     span (spans all columns if > 1)
     space-before
     space-after
     keep-with-previous?
     keep-with-next?
     break-before (#f, page)
     break-after (#f, page)
     keep (#f, page)
     may-violate-keep-before?
     may-violate-keep-after?
     | 
 
| table-part | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  |     
     space-before
     space-after
     keep-with-previous?
     keep-with-next?
     break-before (#f, page)
     break-after (#f, page)
     keep (#f, page)
     may-violate-keep-before?
     may-violate-keep-after?
     | 
|  | 
 
| table-column | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
|  |     
     column-number
     n-columns-spanned
     width
     | 
|  | 
 
| table-cell | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
| 
     cell-before-row-margin
     cell-after-row-margin
     cell-before-column-margin
     cell-after-column-margin
     cell-row-alignment
     cell-before-row-border
     cell-after-row-border
     cell-before-column-border
     cell-after-column-border
     cell-background?
     background-color 1
     |    
     column-number
     n-columns-spanned
     n-rows-spanned
     starts-row?
     ends-row?
     | 
| 1 Currently jade supports
(color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB") | 
 
| table-border | 
|---|
| Inherited characteristics | Non-inherited characteristics | 
| 
     border-present?
     line-thickness
     line-repeat (0, 1, or 2)
     line-sep
     color 1
     |  | 
| 1 Currently jade supports
(color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB") | 
 
Problems & Limitations
Table border resolution
It's not clear how to predictably enforce cell borders that have mixed line styles.
I've posted a question about this to comp.text.frame, but there were no responses so far.
External graphic width and height
In order to place external graphics inside a text flow one must use an anchored frame
containing the <ImportObject...> statement.  The ImportObject within the frame can
shrink-wrap the referenced graphics, however the anchored frame itself cannot - in general the
size of an anchored frame has to be specified explicitly.  I've asked about this in
comp.text.frame, but the only solutions involved using external programs to read the graphic
size from graphic files.
Space before non-paragraph displayed objects
Flow objects like external-graphic need to be anchored to empty paragraphs so that
that frame can determine their position on the page automatically.  Since the smallest paragraph
height is 2pt (smallest font size that can be used), the total space before such objects
should be larger than that.  This does not apply to the paragraph flow objects themselves, and to
the rule flow object.  The rule flow object has the placement direction display size of 0
and it's possible to use negative PgfLeading to let the next paragraph move up if necessary.
The vertical positioning of the displayed rule flow object
Since the rule is position using inlined anchored frame, the placement is relative to
the font baseline.  It's assumend that the baseline is 1/3 the font size from the bottom.
The box flow object
Not sure how to implement it since anchored frames must have fixed height.  Maybe using tables
would work here(?)
Tips
Creating hypertext documents
You must decide on the filename extension you'll use at the stage when you run jade.
If you don't want the .mif extension for your final document, feel free to use other extension
when specifying the file name using the -o option.
- Open the book file.
    
- While holding SHIFT,
        select File->Open All Files in Book from the menu.
    
- Save each file using View Only format - nake sure you use original filenames.
Updating page numbering
- Open the book file.
    
- While holding SHIFT,
        select File->Open All Files in Book from the menu.
    
- Select File->Generate/Update... and then press Update.
Specifying colors
Currently jade supports only RGB color space.  Here's an example of a red rule:
| 
(make rule
    color: (color (color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB")
                   1 0 0)
    ...
)
 |