RncFileImpl:Elements.rnc
  PsiComment(SINGLE_LINE_COMMENT)('# =========================================================')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#                                                          ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# (c) 2004, RenderX                                        ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#                                                          ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Author: Alexander Peshkov <peshkov@renderx.com>          ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#                                                          ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Permission is granted to use this document, copy and     ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# modify free of charge, provided that every derived work  ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# bear a reference to the present document.                ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#                                                          ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# This document contains a computer program written in     ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL Transformations Language. It is published with no    ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# warranty of any kind about its usability, as a mere      ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# example of XSL technology. RenderX shall not be          ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# considered liable for any damage or loss of data caused  ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# by use of this program.                                  ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#                                                          ')
  PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# =========================================================')
  PsiWhiteSpace('\n\n')
  DOCUMENT
    NS_DECL
      PsiElement(KEYWORD_NAMESPACE)('namespace')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('local')
      PsiWhiteSpace(' ')
      PsiElement(=)('=')
      PsiWhiteSpace(' ')
      PsiElement(LITERAL)('""')
    PsiWhiteSpace('\n')
    NS_DECL
      PsiElement(KEYWORD_DEFAULT)('default')
      PsiWhiteSpace(' ')
      PsiElement(KEYWORD_NAMESPACE)('namespace')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('fo')
      PsiWhiteSpace(' ')
      PsiElement(=)('=')
      PsiWhiteSpace(' ')
      PsiElement(LITERAL)('"http://www.w3.org/1999/XSL/Format"')
    PsiWhiteSpace('\n')
    NS_DECL
      PsiElement(KEYWORD_NAMESPACE)('namespace')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('rx')
      PsiWhiteSpace(' ')
      PsiElement(=)('=')
      PsiWhiteSpace(' ')
      PsiElement(LITERAL)('"http://www.renderx.com/XSL/Extensions"')
    PsiWhiteSpace('\n\n')
    GRAMMAR_PATTERN
      INCLUDE
        PsiElement(KEYWORD_INCLUDE)('include')
        PsiWhiteSpace(' ')
        PsiElement(LITERAL)('"properties.rnc"')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Common content models used by content-bearing elements')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ****************************************************************************************')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('very-basic-inlines')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('character')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('external-graphic')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('instream-foreign-object')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('inline-container')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('leader')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('page-number')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('page-number-citation')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-toggle')
          PsiWhiteSpace(' ')
          PsiComment(SINGLE_LINE_COMMENT)('#MEMO: To be strict, we have to control that this element is a descendant of an fo:multi-case.')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('page-index')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('begin-index-range')
          PsiWhiteSpace('\n  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('end-index-range')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('#NOTE: An absolute-container can be treated both as block and as outline.')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('basic-blocks')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('block')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('block-container')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('table-and-caption')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('table')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('list-block')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('#NOTE: Unlike other out-of-lines fo:footnote can be used only in the context where inlines are permitted')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('out-of-lines-block')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('before-float')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('side-float')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('absolute-container')
      PsiWhiteSpace(' \n')
      DEFINE
        PsiElement(IDENTIFIER)('out-of-lines')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('footnote')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('out-of-lines-block')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# As a compromise for intricated inline content model prescribed by XSL FO spec')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# we define two types of inline content:')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# first as restrictive as required by spec for descendants of an fo:leader or of an fo:inline')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# child of an fo:footnote (and for some other cases where we believe it is reasonable),')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# it permits inline level elements only, except for descendants of fo:inline-container;')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# second as loose as prescribed by spec for the general cases')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('basic-inlines-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('very-basic-inlines')
          PsiWhiteSpace('  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('basic-link-inline')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('inline-inline')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace('  ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('bidi-override-inline')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('basic-inlines')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('very-basic-inlines')
          PsiWhiteSpace('  ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('basic-link')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('inline')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace('  ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('bidi-override')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# We have three content models for wrappers:')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# first one allows inline content only (based on basic-inlines-inline described above);')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# second one requires block-level elements to be at the top of it;')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# third one is for mixed content (general case);')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrappers-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-switch-inline')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-properties-inline')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrapper-inline')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('retrieve-marker')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrappers-block')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-switch-block')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-properties-block')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrapper-block')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('retrieve-marker')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrappers')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-switch')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-properties')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrapper')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('retrieve-marker')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# We have two extended content models for inlines:')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# first one is stricter, with inline elements only (exception for fo:inline-container descendants)')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# and with no outlines (actually they are bared in main.rnc anyway);')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# second one is loose, with all possible inlines and outlines.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# In general those content models corresponds very well with two possible contexts:')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# block context and inline context')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('inlines-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        CHOICE
          TEXT_PATTERN
            PsiElement(KEYWORD_TEXT)('text')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('basic-inlines-inline')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrappers-inline')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('inlines')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        CHOICE
          TEXT_PATTERN
            PsiElement(KEYWORD_TEXT)('text')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('basic-inlines')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('out-of-lines')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrappers')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# Content model for blocks including  block-level outlines')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('blocks')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('basic-blocks')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrappers-block')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('out-of-lines-block')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('# Mixed content model - broadest one')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('mix')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        CHOICE
          REF_PATTERN
            PsiElement(IDENTIFIER)('inlines')
          PsiWhiteSpace(' ')
          PsiElement(|)('|')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('basic-blocks')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Element structure for content-bearing elements')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Block is the base element for all content areas. ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('block')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:block')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('block.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('block.content')
          PsiWhiteSpace('\n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('block.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            GROUP_PATTERN
              PsiElement(()('(')
              PsiWhiteSpace(' ')
              CHOICE
                REF_PATTERN
                  PsiElement(IDENTIFIER)('initial-property-set')
                PsiWhiteSpace(' ')
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                REF_PATTERN
                  PsiElement(IDENTIFIER)('mix')
              PsiWhiteSpace(' ')
              PsiElement())(')')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Block container')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#MEMO: We are forced to create separate element 'absolute-container' in order ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# to satisfy XSL FO spec requirements. Note that this is the *only* place where ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# properties really interfer with element-level structure (well, actually fo:float is the second place). ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# A separate fo:absolute-container is clearly necessary.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Absolutely possitioned block-container cannot contain markers and and outlines.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# It's behaviour is quite similar to the outline elements such as float.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' do not control absolutely positioned container restriction ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# (due to expressions that can result in absolute position)')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' also permits  empty block-containers, that is against the spec.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Spec defines fo:block-container content as (%block;)+')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('absolute-container')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        NOT_ALLOWED_PATTERN
          PsiElement(KEYWORD_NOTALLOWED)('notAllowed')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('absolute-container-real')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' \n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:block-container')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('absolute-container.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('absolute-container.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('absolute-container.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ONE_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('blocks')
          PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('block-container')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:block-container')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('block-container.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('block-container.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('block-container.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('blocks')
            PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Inline elements')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Unicode bidi-override')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#MEMO: According to spec this element CAN have block level children except for the cases listed below:')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> An fo:bidi-override that is a descendant of an fo:leader or of an fo:inline child ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> of an fo:footnote may not have block-level children, unless it has a nearer ancestor')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> that is an fo:inline-container.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# NOTE: This is contradictory to the description of fo:leader element (6.6.9. fo:leader) that ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# prohibits (some) block-level elements/outlines to be fo:leader descendants')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# no matter if they wrapped in any fo:inline-containers and  fo:bidi-override.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# We have two models:')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# first (restrictive) used by descendants of an fo:title, fo:leader or of an fo:inline child of an fo:footnote;')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# second (loose) as prescribed by spec for the general cases')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' believes that no block level elements should be allowed in this element in either way. ')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('bidi-override-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:bidi-override')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('bidi-override.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('bidi-override-inline.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('bidi-override-inline.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('inlines-inline')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('bidi-override')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:bidi-override')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('bidi-override.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('bidi-override.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('bidi-override.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('mix')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Single character')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('character')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:character')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('character.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Initial property set specifies properties for one or more lines')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('initial-property-set')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:initial-property-set')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('initial-property-set.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' \n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# External graphic')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('external-graphic')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:external-graphic')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('external-graphic.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# In-stream graphic')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('instream-foreign-object')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:instream-foreign-object')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('instream-foreign-object.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('any')
          PsiWhiteSpace('\n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Inline')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#MEMO: This element used by content model that consists of inlines only')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# with exception for descendants of inline-container')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('inline-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:inline')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('inline.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('inline-inline.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('inline-inline.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('inlines-inline')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:inline')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('inline.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('inline.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('inline.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('mix')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# XSL> An fo:inline that is a child of an fo:footnote may not have block-level children.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> An fo:inline that is a descendant of an fo:leader or of the fo:inline child of ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> an fo:footnote may not have block-level children, unless it has a nearer ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> ancestor that is an fo:inline-container.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#NOTE: This definition is contradictory to the one of the fo:leader since latter prohibits')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# fo:inline-container as a descendant. But it's the definition of fo:leader that should be fixed')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# since content model described above is the only sane content model in the inline context.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# It should be the same for fo:bidi-override. However definition must  be adjasted ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# in order to mention fo:title since this element is a typical inline. ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' believes that block elements are allowed here and thoroughly tests for  ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# all those tricky exceptions. This behavior seems to be quite inconsisten with the ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# one regarding fo:bidi-override treatment.')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Inline container')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('inline-container')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:inline-container')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('inline-container.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('inline-container.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('inline-container.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('blocks')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Leader')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('leader')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:leader')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('leader.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('leader.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('leader.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ZERO_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('inlines-inline')
          PsiElement(*)('*')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: Following two lines used together with tricky redefinition in main.rnc ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# in order to prevent fo:leader nesting.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#leader.content = notAllowed')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#leader.content-real = inlines-inline*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: We use inline content model here which is consistent with ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# such elements as fo:inline child of fo:footnote. It allows blocks/outlines, but only as a ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# descendant of  inline-container. XSL FO spec is quite uneven at this point (and should be fixed).')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# According to spec, this element can contain inline level elements and text, but')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> The content must not contain an fo:leader, fo:inline-container, fo:block-container,')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> fo:float, fo:footnote, or fo:marker either as a direct child or as a descendant.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# NOTE: XSL FO spec DO NOT prohibit blocks or tables as descendants of fo:leader!')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# NOTE: fo:leader constraints are contradictory to those of fo:inline since section "6.6.7. fo:inline" ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# states implicitly that there could be an fo:inline-container that is a descendent of fo:leader.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' respects these constraints partially: it prohibits fo:block-container as a descendant,')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# but permits fo:marker, fo:leader, fo:inline-container, fo:float, fo:footnote.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# It also prohibits use of fo:block as descendant.')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Page Number')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('page-number')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:page-number')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('page-number.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Page number citation')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('page-number-citation')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:page-number-citation')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('page-number-citation.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' \n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Atomic elements for index ranges markup')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('begin-index-range')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('rx:begin-index-range')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('begin-index-range.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('end-index-range')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('rx:end-index-range')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('end-index-range.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Page number list - index entry')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('page-index')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('rx:page-index')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('page-index.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace('  ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('page-index.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: Currently page-index must contain at least one rx:index-item element, ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# empty content is allowed for backward compatibility.')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('page-index.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ZERO_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('index-item')
          PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('index-item')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('rx:index-item')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('index-item.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Formatting objects for tables.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ****************************************************************************************')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Table & Caption is a wrapper to all the stuff pertinent to a')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# given table. It generates a block consisting of two subblocks:')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# one for the caption, another one for the table itself. The')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# placement of these two blocks is controlled by the')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'caption-side' property: if  caption-side="before"|"after" (or')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# their absolute orientation equivalents), the two blocks are')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# drawn one after another; if it is "start"|"end", then the')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# caption is displayed on the correspondent side of the table.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# In this case, the relative alignment of the two blocks is given')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# by the 'relative-align'/'display-align' property.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-and-caption')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table-and-caption')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-and-caption.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' \n    ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-and-caption.content')
          PsiWhiteSpace('\n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-and-caption.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          OPTIONAL
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-caption')
            PsiElement(?)('?')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('table')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Table caption is an area container.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-caption')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table-caption')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-caption.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-caption.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-caption.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('blocks')
            PsiElement(+)('+')
      PsiWhiteSpace(' \n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# fo:table is the basic element for all tables. All the contents')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# placed inside it is distributed over a single rectangular grid')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# of rows and columns.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace('\n    ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('table.content')
          PsiWhiteSpace('\n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n    ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace('\n    ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-column')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace('\n    ')
          OPTIONAL
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-header')
            PsiElement(?)('?')
          PsiElement(,)(',')
          PsiWhiteSpace('\n    ')
          OPTIONAL
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-footer')
            PsiElement(?)('?')
          PsiElement(,)(',')
          PsiWhiteSpace('\n    ')
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-body')
            PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Table column specifies common properties to ascribe to all')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# cells in a column *or a group of columns*. Note that, if both')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'number-columns-repeated' and 'number-columns-spanned' exceed')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 1, the column counter is increased by 'number-columns-spanned'.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# it means that you only set properties for columns:')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'column-number'')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'column-number' + 'number-columns-spanned'')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'column-number' + 2 * 'number-columns-spanned'')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# and so on, leaving default properties for intermediate columns.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-column')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table-column')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-column.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Table header, table footer, and table body are wrappers for')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# groups of rows. They contain either one or more fo:table-rows,')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# or one or more fo:table-cells; in the latter case, row breaks')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# are specified in the cells by 'starts-row'/'ends-row'.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# All these elements are identical both in the content structure')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# and in the attributes.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('row-group')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          GROUP_PATTERN
            PsiElement(()('(')
            CHOICE
              ONE_OR_MORE
                REF_PATTERN
                  PsiElement(IDENTIFIER)('table-row')
                PsiElement(+)('+')
              PsiWhiteSpace(' ')
              PsiElement(|)('|')
              PsiWhiteSpace(' ')
              ONE_OR_MORE
                REF_PATTERN
                  PsiElement(IDENTIFIER)('table-cell')
                PsiElement(+)('+')
            PsiElement())(')')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-header')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table-header')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-header.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-header.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-header.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        REF_PATTERN
          PsiElement(IDENTIFIER)('row-group')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-footer')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table-footer')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-footer.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-footer.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-footer.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        REF_PATTERN
          PsiElement(IDENTIFIER)('row-group')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-body')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table-body')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-body.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-body.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-body.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        REF_PATTERN
          PsiElement(IDENTIFIER)('row-group')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Table row.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-row')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table-row')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-row.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-row.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-row.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ONE_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('table-cell')
          PsiElement(+)('+')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: We are more strict here, so this note is about 'Folint': ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' permits  empty fo:table-row, that is against the spec.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL FO spec defines  fo:table-row content as (table-cell+)')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Table cell.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-cell')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:table-cell')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-cell.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('table-cell.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('table-cell.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('blocks')
            PsiElement(+)('+')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: We are more strict here, so this note is about 'Folint':')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' permits empty table-cells that is against the spec. Spec defines fo:table-cell')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# content as (%block;)+')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Note that 'Folint' is quite consistent regarding this matter - it simillary allows empty ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# block-containers and table-rows')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Formatting objects for lists.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# List block is a block, with some extra features to control the')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# disposition of list items.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('list-block')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:list-block')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-block.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-block.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('list-block.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-item')
            PsiElement(+)('+')
      PsiWhiteSpace(' \n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# List item is a coupling of item label and item body.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('list-item')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:list-item')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-item.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' \n    ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-item.content')
          PsiWhiteSpace('\n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('list-item.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('list-item-label')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('list-item-body')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# List item label and list item body')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('list-item-label')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:list-item-label')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-item-label.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-item-label.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('list-item-label.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('blocks')
            PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('list-item-body')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:list-item-body')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-item-body.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('list-item-body.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('list-item-body.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('blocks')
            PsiElement(+)('+')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: We are more strict here, so this note is about 'Folint':')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' permits  empty fo:list-item-label/body, that is clearly the spec.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Spec defines  fo:list-item-label/body content as (%block;)+')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('#****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Out-of-lines.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Floats and footnotes resemble containers. Accordingly, we treat')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# them as block sequences.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#MEMO: We do not allows absolutely positioned container as an outline descendant.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' is loose here - it do not check this condition.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#MEMO: We are forced to create two types of floats: side-floats and before-floats')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# because they have different restrictions (side-floats can appear in static content, ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# before-floats can't bear 'clear' property)')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# NOTE: 'Folint' does not allows any floats inside absolutely positioned containers too.')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('side-float')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        NOT_ALLOWED_PATTERN
          PsiElement(KEYWORD_NOTALLOWED)('notAllowed')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('side-float-real')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:float')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('side-float.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('float.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('before-float')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        NOT_ALLOWED_PATTERN
          PsiElement(KEYWORD_NOTALLOWED)('notAllowed')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('before-float-real')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:float')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('before-float.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('float.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('float.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ONE_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('blocks')
          PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# XSL> It is an error if the fo:footnote occurs as a descendant of a flow that is not assigned')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> to a region-body, or of an fo:block-container that generates absolutely positioned areas.')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('footnote')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        NOT_ALLOWED_PATTERN
          PsiElement(KEYWORD_NOTALLOWED)('notAllowed')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('footnote-real')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:footnote')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('footnote.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('footnote.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('# XSL> An fo:inline that is a child of an fo:footnote may not have block-level children.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> An fo:inline that is a descendant of an fo:leader or of the fo:inline child of ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> an fo:footnote may not have block-level children, unless it has a nearer ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# XSL> ancestor that is an fo:inline-container.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# We do check here that first inline have no block-level children/descendants unlless ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# they are wrapped into an inline-container.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# 'Folint' does the same.')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('footnote.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          REF_PATTERN
            PsiElement(IDENTIFIER)('inline-inline')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('footnote-body')
      PsiWhiteSpace(' \n\n')
      DEFINE
        PsiElement(IDENTIFIER)('footnote-body')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:footnote-body')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('footnote-body.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('footnote-body.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('footnote-body.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('  ')
        ONE_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('blocks')
          PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Simple link. From the formatting point of view, it's nothing')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# but a regular inline sequence.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# This elment is for separate 'inline' content model')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('basic-link-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:basic-link')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('basic-link.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('basic-link-inline.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('basic-link-inline.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('inlines-inline')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('basic-link')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:basic-link')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('basic-link.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('basic-link.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('basic-link.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('mix')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Wrappers and Markers.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Wrapper. This may be useful but it seriously complicates validation of')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# content models for blocks and inlines.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#There are 3 different kind of wrappers for different contexts')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrapper-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:wrapper')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('wrapper.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('wrapper-inline.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrapper-inline.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('inlines-inline')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrapper-block')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:wrapper')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('wrapper.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('wrapper-block.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrapper-block.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('blocks')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrapper')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:wrapper')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('wrapper.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('wrapper.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('wrapper.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker')
            PsiElement(*)('*')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          ZERO_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('mix')
            PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Marker.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('marker')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        NOT_ALLOWED_PATTERN
          PsiElement(KEYWORD_NOTALLOWED)('notAllowed')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('marker-real')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:marker')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('marker.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('marker.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ZERO_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('mix')
          PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Marker retrieval.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# We are more strict here making retrieve-class-name attribute a mandatory, ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# but marker with no retrieve-class-name is meaningless.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('retrieve-marker')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        NOT_ALLOWED_PATTERN
          PsiElement(KEYWORD_NOTALLOWED)('notAllowed')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('retrieve-marker-real')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:retrieve-marker')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('retrieve-marker.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Multistate stuff.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# All those elements are practically  unused and XSL content model invloved is ')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# intricated. Therefor validation is not absolutely strict here.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ****************************************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Switch. This is a pure logical operator; no formatting may be')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# conveyed through it.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#Thera are 3 different kind of multi-switch (because there are 3 kinds of multi-case)')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-switch-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-switch')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-switch.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-switch-inline.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-switch-inline.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ONE_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-case-inline')
          PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-switch-block')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-switch')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-switch.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-switch-block.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-switch-block.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ONE_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-case-block')
          PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-switch')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-switch')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-switch.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-switch.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-switch.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ONE_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('multi-case')
          PsiElement(+)('+')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Single case. Block-level formatting may be conveyed.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#Thera are 3 different kind of multi-case (similar to fo:wrapper)')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-case-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-case')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-case.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-case-inline.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-case-inline.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ZERO_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('inlines-inline')
          PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-case-block')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-case')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-case.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-case-block.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-case-block.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ZERO_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('blocks')
          PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-case')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-case')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-case.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-case.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-case.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ZERO_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('mix')
          PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Toggle. This is a typical inline.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#MEMO: This element is only permitted as a descendant of an fo:multi-case.')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-toggle')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-toggle')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-toggle.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-toggle.content')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-toggle.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        ZERO_OR_MORE
          REF_PATTERN
            PsiElement(IDENTIFIER)('mix')
          PsiElement(*)('*')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Multi-properties.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#Thera are 3 different kind of multi-properties (similar to fo:wrapper)')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-properties-inline')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-properties')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-properties.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-properties-inline.content')
          PsiWhiteSpace('\n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-properties-inline.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-property-set')
            PsiElement(+)('+')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrapper-inline')
      PsiWhiteSpace(' \n\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-properties-block')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-properties')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-properties.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-properties-block.content')
          PsiWhiteSpace('\n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-properties-block.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-property-set')
            PsiElement(+)('+')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrapper-block')
      PsiWhiteSpace(' \n\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-properties')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-properties')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-properties.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-properties.content')
          PsiWhiteSpace('\n  ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-properties.content')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        SEQUENCE
          ONE_OR_MORE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-property-set')
            PsiElement(+)('+')
          PsiElement(,)(',')
          PsiWhiteSpace(' ')
          REF_PATTERN
            PsiElement(IDENTIFIER)('wrapper')
      PsiWhiteSpace(' \n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Multi property set.')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('multi-property-set')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        PATTERN
          PsiElement(KEYWORD_ELEMENT)('element')
          PsiWhiteSpace(' ')
          NAME_CLASS
            NAME
              PsiElement(PREFIXED_NAME)('fo:multi-property-set')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          SEQUENCE
            REF_PATTERN
              PsiElement(IDENTIFIER)('multi-property-set.attlist')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            EMPTY_PATTERN
              PsiElement(KEYWORD_EMPTY)('empty')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# "Match anything" definition, used by fo:instream-foreign-object')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ===============================================================')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#MEMO: Should we exclude elements which belongs to fo: namespace?')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('any')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace('\n  ')
        ZERO_OR_MORE
          GROUP_PATTERN
            PsiElement(()('(')
            CHOICE
              PATTERN
                PsiElement(KEYWORD_ELEMENT)('element')
                PsiWhiteSpace(' ')
                NAME_CLASS
                  PsiElement(*)('*')
                PsiWhiteSpace(' ')
                PsiElement({)('{')
                PsiWhiteSpace('\n     ')
                SEQUENCE
                  ZERO_OR_MORE
                    PATTERN
                      PsiElement(KEYWORD_ATTRIBUTE)('attribute')
                      PsiWhiteSpace(' ')
                      NAME_CLASS
                        PsiElement(*)('*')
                      PsiWhiteSpace(' ')
                      PsiElement({)('{')
                      PsiWhiteSpace(' ')
                      TEXT_PATTERN
                        PsiElement(KEYWORD_TEXT)('text')
                      PsiWhiteSpace(' ')
                      PsiElement(})('}')
                    PsiElement(*)('*')
                  PsiElement(,)(',')
                  PsiWhiteSpace('\n     ')
                  REF_PATTERN
                    PsiElement(IDENTIFIER)('any')
                PsiWhiteSpace('\n   ')
                PsiElement(})('}')
              PsiWhiteSpace('\n   ')
              PsiElement(|)('|')
              PsiWhiteSpace(' ')
              TEXT_PATTERN
                PsiElement(KEYWORD_TEXT)('text')
            PsiElement())(')')
          PsiElement(*)('*')