RncFileImpl:Datatype.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')
    PsiComment(SINGLE_LINE_COMMENT)('# ***************************************************************')
    PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Common XSL FO datatypes definitions')
    PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ***************************************************************')
    PsiWhiteSpace('\n')
    GRAMMAR_PATTERN
      DEFINE
        PsiElement(IDENTIFIER)('integer.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:integer')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('number.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:decimal')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('length.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"[\-+]?(\d*\.?\d+)(cm|mm|in|pt|pc|px|em)"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('angle.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"[\-+]?(\d*\.?\d+)(deg|grad|rad)"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('percentage.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"[\-+]?(\d*\.?\d+)%"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('character.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('".|\r|\n"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('string.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          PsiElement(KEYWORD_STRING)('string')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('name.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:NCName')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('family-name.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:normalizedString')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: Should I add some constraints to the family-name.datatype?')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('color.datatype')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:token')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: Should I add some constraints to the color.datatype?')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('country.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"\w{2,3}"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('language.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"\w{2,3}"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('script.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"\w"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: Should I add detailed constraints to the country/language/script.datatype?')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('uri-specification.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('#MEMO: Should I add some constraints to the uri-specification.datatype?')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('time.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"[\-+]?(\d*\.?\d+)(m?s)"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('frequency.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:string')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"[\-+]?(\d*\.?\d+)(k?Hz)"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      PsiComment(SINGLE_LINE_COMMENT)('# NOTE: <shape> datatype added in XSL FO 1.0 Errata')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('shape.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:normalizedString')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('"(([\-+]?(\d*\.?\d+)(cm|mm|in|pt|pc|px|em))|auto) (([\-+]?(\d*\.?\d+)(cm|mm|in|pt|pc|px|em))|auto) (([\-+]?(\d*\.?\d+)(cm|mm|in|pt|pc|px|em))|auto) (([\-+]?(\d*\.?\d+)(cm|mm|in|pt|pc|px|em))|auto)"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      PsiComment(SINGLE_LINE_COMMENT)('# ***************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# Special datatype - expressions')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n# ***************************************************************')
      PsiComment(SINGLE_LINE_COMMENT_CONTINUE)('\n#MEMO: simple example of constraint for functions')
      PsiWhiteSpace('\n')
      DEFINE
        PsiElement(IDENTIFIER)('expr.datatype')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('xsd:normalizedString')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PARAM
            PsiElement(IDENTIFIER)('pattern')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            PsiElement(LITERAL)('".*\(.*\).*"')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n')
      DEFINE
        PsiElement(IDENTIFIER)('x')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        DATATYPE_PATTERN
          NAME
            PsiElement(PREFIXED_NAME)('abc:x')
          PsiWhiteSpace(' ')
          PsiElement({)('{')
          PsiWhiteSpace('\n\n')
          PsiElement(})('}')