# ========================================================= # # (c) 2004, RenderX # # Author: Alexander Peshkov # # Permission is granted to use this document, copy and # modify free of charge, provided that every derived work # bear a reference to the present document. # # This document contains a computer program written in # XSL Transformations Language. It is published with no # warranty of any kind about its usability, as a mere # example of XSL technology. RenderX shall not be # considered liable for any damage or loss of data caused # by use of this program. # # ========================================================= namespace local = "" default namespace fo = "http://www.w3.org/1999/XSL/Format" namespace rx = "http://www.renderx.com/XSL/Extensions" include "properties_groups.rnc" # **************************************************************************************** # Properties used by top-level elements # **************************************************************************************** # =============================================================== # Root element can bear inheritable properties, passed further to # fo:flows/fo:static-contents. Inheritable properties from fo:layout-master-set # are banned in this version of schema. # =============================================================== root.attlist = media-usage.attr?, inheritable-properties # =============================================================== # Document meta information - RenderX extension # =============================================================== meta-info.attlist = empty meta-field.attlist = name.attr, value.attr # =============================================================== # Color profile declarations # =============================================================== declarations.attlist = empty color-profile.attlist = src.attr, color-profile-name.attr, rendering-intent.attr? # =============================================================== # Bookmarks - RenderX extension # =============================================================== outline.attlist = empty bookmark.attlist = (internal-destination.attr | external-destination.attr), collapse-subtree.attr? bookmark-label.attlist = empty # =============================================================== # Layout-master-set contains a set of page-masters. Neither of # its descendants generates any area, so no inherited elements # can be specified on it or on its children. # =============================================================== layout-master-set.attlist = empty # =============================================================== # Page sequence master # =============================================================== page-sequence-master.attlist = master-name.attr # =============================================================== # Sequence specifiers. # =============================================================== single-page-master-reference.attlist = master-reference.attr repeatable-page-master-reference.attlist = master-reference.attr, maximum-repeats.attr? repeatable-page-master-alternatives.attlist = maximum-repeats.attr? conditional-page-master-reference.attlist = master-reference.attr, page-position.attr?, odd-or-even.attr?, blank-or-not-blank.attr? # =============================================================== # Simple page master defines a page layout. It does not # explicitly generate any content. Most of its properties are # local except for writing-mode and reference-orientation that # are inherited by the underlying region-* objects. # =============================================================== # NOTE. We could think about a common background/padding/border # for every page instance generated by the page master. For such # a scope, we may add borders/padding/background to its features. # However, in the current version this is ruled out explicitly by the XSL specs. simple-page-master.attlist = margin-properties-CSS, master-name.attr, page-height.attr?, page-width.attr?, reference-orientation.attr?, size.attr?, writing-mode.attr? # =============================================================== # Region elements by themselves do not generate any content. # Reference-orientation and writing-mode may be inherited from # the page master; all other features are local. # =============================================================== region-properties = border-padding-background-properties, area-properties, region-name.attr? # =============================================================== # Body region: middle of the page. Unlike side regions, this one # may have multiple columns. # =============================================================== # NOTE: We have restricted margin properties to be margin-only, # allowing no spaces. This is done because no clear semantics # can be ascribed to single components of a space vector. region-body.attlist = region-properties, margin-properties-CSS, column-count.attr?, column-gap.attr? # =============================================================== # Side regions: page edges. These regions have extent and # precedence that is used to arbitrate corner conflicts. Side # regions are viewed as frames, and may not have margins. # =============================================================== # NOTE: Extent made obligatory: its default value of 0.0pt does not # make much sense. region-before.attlist = region-properties, extent.attr, precedence.attr? region-after.attlist = region-properties, extent.attr, precedence.attr? region-start.attlist = region-properties, extent.attr region-end.attlist = region-properties, extent.attr # =============================================================== # Page sequence. # =============================================================== page-sequence.attlist = format.attr?, letter-value.attr?, grouping-separator.attr?, grouping-size.attr?, id.attr?, rx-key.attr?, initial-page-number.attr?, force-page-count.attr?, master-reference.attr, inheritable-properties # =============================================================== # Title # =============================================================== #MEMO: Why 'id' attribute is not allowed here? #MEMO: Does it makes sence to add relative-position here? # According to Section 7.12.1. "relative-position" it is allowed everywhere except fo:block-container #Should we allow all inline properties here?? title.attlist = accessibility-properties, aural-properties-unheritable, border-padding-background-properties, margin-properties-inline, inheritable-properties # =============================================================== # Flows. 'flow-name' feature defines linkage of the flow to a region in the page master. # =============================================================== flow-properties = id.attr?, rx-key.attr?, flow-name.attr, inheritable-properties flow.attlist = flow-properties static-content.attlist = flow-properties # =============================================================== # An extension element, rx:flow-section. # Acts like a top-level block with multiple columns. # =============================================================== flow-section.attlist = column-count.attr?, column-gap.attr?, border-padding-background-properties, margin-properties-block, inheritable-properties # **************************************************************************************** # Properties used by content-bearing elements # **************************************************************************************** # =============================================================== # Properties of block formatting objects. # =============================================================== # =============================================================== # Besides properties used to format the block itself, it also conveys # formatting information to its inline-level children. # =============================================================== block.attlist = block-properties, character-properties-unheritable, text-altitude.attr?, text-depth.attr? # =============================================================== # Block container # =============================================================== #MEMO: We are forced to create separate element 'absolute-container' in order # to satisfy XSL FO spec requirements. absolute-container.attlist = absolute-position-properties, area-properties-unheritable, box-size-properties, common-block-properties, z-index.attr? # 'Usual' container element #MEMO: XSLFO spec prohibits use of 'relative-position' for fo:block-container, # but we believe that it should be allowed for non-absolutely positioned containers. block-container.attlist = area-properties-unheritable, box-size-properties, block-properties, container-position.attr?, z-index.attr? # =============================================================== # Properties of inline formatting objects. # =============================================================== # =============================================================== # Unicode bidi-override # =============================================================== #MEMO: This element is 'half-inline' accroding to spec, since it's exhibits the same # bahavior and used in the same context but yet cannot carry some of inline-level # properties such as margins and border. # We use the same set of properties as for inline here (except for unicode-bidi and # width properties) since we believe that this is a typical inline element. # Moreover fo:bidi-override is redundant from semantic point of view since it do not # carry any additional information compared to regular fo:inline - just add # 'unicode-bidi' to fo:inline and you do not need fo:bidi-override anymore. bidi-override.attlist = inline-properties, unicode-bidi.attr? #MEMO: 'Folint' believes that direction property is required for fo:bidi-override, # but this is against the spec since this property can be inherited. # =============================================================== # Single character # =============================================================== character.attlist = character.attr, suppress-at-line-break.attr?, treat-as-word-space.attr?, common-inline-properties # =============================================================== # Initial property set specifies properties for one or more lines # =============================================================== #MEMO: Spec is contradictory here. It states that use of this object is equivalent to # the fo:wrapper around the first line. At the same time spec allows on this element # such properties as 'Common Border, Padding, and Background Properties' # - fo:wrapper can't have border/padding/etc and can bear inheritable properties only. # We believe that this element should be treated as inline and thus should have # appropriate properties set. initial-property-set.attlist = common-inline-properties # =============================================================== # External graphic # =============================================================== external-graphic.attlist = graphic-properties, src.attr? # =============================================================== # In-stream graphic # =============================================================== instream-foreign-object.attlist = graphic-properties # =============================================================== # Inline # =============================================================== inline.attlist = height-properties, inline-properties # =============================================================== # Inline container # =============================================================== # FIXME! We believe that this element should not bear not-inheritable properties, # which applies to text since it can't have text children. # Therefor we do not use 'common-inline-properties' set. inline-container.attlist = id.attr?, rx-key.attr?, accessibility-properties, aural-properties-unheritable, area-alignment-properties, border-padding-background-properties, keeps-properties-atomic, margin-properties-inline, relative-position-properties, area-properties-unheritable, box-size-properties, inheritable-properties # =============================================================== # Leader # =============================================================== leader.attlist = inline-properties #MEMO: Note that 'inline-properties' includes block-level inheritable properties. # But it's OK in our content-model since it allows block-level descendants wrapped # into fo:inline-container. # At the same time block-level inheritable properties includes leader properties, # since they are inheritable... # =============================================================== # Page Number # =============================================================== page-number.attlist = common-inline-properties, wrap-option.attr? # =============================================================== # Page number citation # =============================================================== page-number-citation.attlist = common-inline-properties, wrap-option.attr?, ref-id.attr # =============================================================== # Atomic elements for index ranges markup # =============================================================== begin-index-range.attlist = id.attr, rx-key.attr end-index-range.attlist = ref-id.attr # =============================================================== # Page number list - index entry # =============================================================== page-index.attlist = common-inline-properties, wrap-option.attr?, list-separator.attr?, ref-key.attr? #MEMO: There is no 'ref-key' attribute on page-index now, but it is allowed for # backward compatibility. #MEMO: Actually it makes sense to exclude id/rx:key fom the set of availabe properties # for 'index-item', however we prefer no to do it just to avoid creation of yet another content # model (attribute set) for thid inline element. index-item.attlist = common-inline-properties, wrap-option.attr?, ref-key.attr, link-back.attr?, range-separator.attr?, merge-subsequent-page-numbers.attr? # =============================================================== # Properties of table formatting objects. # =============================================================== # =============================================================== # Table & Caption. # =============================================================== table-and-caption.attlist = common-block-properties, clear.attr?, relative-position-properties, keeps-and-breaks-properties-atomic #MEMO: Spec do not allows margins on fo:table-caption that is against common sence # since this is a typical container. # We do allow margins (they are included in common-block-properties). # 'Folint' does the same. table-caption.attlist = clear.attr?, common-block-properties, relative-position-properties, box-size-properties table.attlist = clear.attr?, common-block-properties, box-size-properties, keeps-and-breaks-properties-atomic, table-properties-unheritable # =============================================================== # Table column specifies common properties to ascribe to all # cells in a column *or a group of columns*. Note that, if both # 'number-columns-repeated' and 'number-columns-spanned' exceed # 1, the column counter is increased by 'number-columns-spanned'. # it means that you only set properties for columns: # 'column-number' # 'column-number' + 'number-columns-spanned' # 'column-number' + 2 * 'number-columns-spanned' # and so on, leaving default properties for intermediate columns. # =============================================================== table-column.attlist = column-number.attr?, column-width.attr?, number-columns-repeated.attr?, number-columns-spanned.attr?, background-properties, #MEMO: Border properties applies to this formatting object only if the value of border-collapse # for the table is "collapse" or "collapse-with-precedence" border-properties, border-precedence-properties, inheritable-properties # =============================================================== # Table header, table footer, and table body. # =============================================================== row-group.attlist = id.attr?, rx-key.attr?, accessibility-properties, aural-properties-unheritable, background-properties, #MEMO: Border properties applies to this formatting object only if the value of border-collapse # for the table is "collapse" or "collapse-with-precedence" border-properties, border-precedence-properties, relative-position-properties, inheritable-properties table-header.attlist = row-group.attlist table-footer.attlist = row-group.attlist #MEMO: Spec do not list "Keep" properties almong applicable to fo:table-body that is a clear # case of errata. table-body.attlist = row-group.attlist, keeps-and-breaks-properties-atomic # =============================================================== # Table row. # =============================================================== #MEMO: Should we create separate collection of properties in 'properties_groups.rnc' # based on row-group.attlist? table-row.attlist = row-group.attlist, height-properties, keeps-and-breaks-properties-atomic # =============================================================== # Table cell. # =============================================================== #MEMO: Spec do not allows margins on fo:table-cell but 'Folint' does. # We excluded margins from this element and therefor don't use 'common-block-properties' #MEMO: Spec do not list "Keep" properties almong applicable to fo:table-cell that is a clear # case of errata. table-cell.attlist = id.attr?, rx-key.attr?, column-number.attr?, accessibility-properties, aural-properties-unheritable, border-padding-background-properties, border-precedence-properties, box-size-properties, ends-row.attr?, keeps-and-breaks-properties-atomic, number-columns-spanned.attr?, number-rows-spanned.attr?, starts-row.attr?, inheritable-properties # =============================================================== # Properties of list formatting objects. # =============================================================== # =============================================================== # List block. # =============================================================== list-block.attlist = clear.attr?, common-block-properties, keeps-and-breaks-properties-atomic, relative-position-properties # =============================================================== # List item. # =============================================================== list-item.attlist = common-block-properties, keeps-and-breaks-properties-atomic, relative-position-properties # =============================================================== # List item label and list item body # =============================================================== list-item-label.attlist = id.attr?, rx-key.attr?, accessibility-properties, inheritable-properties list-item-body.attlist = id.attr?, rx-key.attr?, accessibility-properties, inheritable-properties # =============================================================== # Floats and footnotes. # =============================================================== #MEMO: Outlines can't have id and therefor can't have rx:key properties so we are strict here. # 'Folint' is loose here - it allows use of these properties. #MEMO: We are forced to create two types of floats: side-floats and before-floats. side-float.attlist = side-float.attr?, clear.attr?, inheritable-properties # NOTE: before-float can't bear 'clear' property before-float.attlist = before-float.attr?, inheritable-properties footnote.attlist = accessibility-properties, inheritable-properties footnote-body.attlist = accessibility-properties, inheritable-properties # =============================================================== # Simple link. # =============================================================== basic-link.attlist = inline-properties, external-destination.attr?, internal-destination.attr?, indicate-destination.attr?, show-destination.attr?, destination-placement-offset.attr?, target-processing-context.attr?, target-presentation-context.attr?, target-stylesheet.attr? # =============================================================== # Wrappers. # =============================================================== wrapper.attlist = id.attr?, rx-key.attr?, inheritable-properties # =============================================================== # Marker. This element may embrace any content but cannot pass # properties to its children; so, it may not have features other # than marker-class-name. # =============================================================== #MEMO: We are more strict here making marker-class-name attribute a mandatory, # but marker with no marker-class-name is meaningless. marker.attlist = marker-class-name.attr # =============================================================== # Marker retrieval. # =============================================================== # FIXME! We are more strict here making retrieve-class-name attribute a mandatory, # but marker with no retrieve-class-name is meaningless. retrieve-marker.attlist = retrieve-class-name.attr, retrieve-position.attr?, retrieve-boundary.attr?, #MEMO: Is it OK to allow inheritable properties here? There are no explicit arguments # against it in the spec. inheritable-properties # =============================================================== # Multistate stuff. # =============================================================== # =============================================================== # Switch. # =============================================================== #MEMO: Should we have Aural Properties here as well? multi-switch.attlist = id.attr?, rx-key.attr?, auto-restore.attr?, accessibility-properties, inheritable-properties # =============================================================== # Single case. # =============================================================== multi-case.attlist = id.attr?, rx-key.attr?, starting-state.attr?, case-name.attr?, case-title.attr?, accessibility-properties, inheritable-properties # =============================================================== # Toggle. # =============================================================== #MEMO: Should we have here inline-level properties only? multi-toggle.attlist = switch-to.attr?, accessibility-properties, inheritable-properties # =============================================================== # Multi-properties. # =============================================================== #Should we allow here any possible properties applicable to the objects inside of the flow? multi-properties.attlist = id.attr?, rx-key.attr?, accessibility-properties, inheritable-properties # =============================================================== # Multi property set. # =============================================================== #Should we allow here any possible properties applicable to the objects inside of the flow? multi-property-set.attlist = id.attr?, rx-key.attr?, active-state.attr, inheritable-properties