#!/usr/bin/env python
# Copyright (C) 2008 Søren Roug, European Environment Agency
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
#
# Contributor(s):
#


from .namespaces import (
    ANIMNS,
    CHARTNS,
    DR3DNS,
    DRAWNS,
    FORMNS,
    MANIFESTNS,
    METANS,
    NUMBERNS,
    OFFICENS,
    PRESENTATIONNS,
    SCRIPTNS,
    STYLENS,
    SVGNS,
    TABLENS,
    TEXTNS,
)

# Inline element don't cause a box
# They are analogous to the HTML elements SPAN, B, I etc.
inline_elements = (
    (TEXTNS, 'a'),
    (TEXTNS, 'author-initials'),
    (TEXTNS, 'author-name'),
    (TEXTNS, 'bibliography-mark'),
    (TEXTNS, 'bookmark-ref'),
    (TEXTNS, 'chapter'),
    (TEXTNS, 'character-count'),
    (TEXTNS, 'conditional-text'),
    (TEXTNS, 'creation-date'),
    (TEXTNS, 'creation-time'),
    (TEXTNS, 'creator'),
    (TEXTNS, 'database-display'),
    (TEXTNS, 'database-name'),
    (TEXTNS, 'database-next'),
    (TEXTNS, 'database-row-number'),
    (TEXTNS, 'database-row-select'),
    (TEXTNS, 'date'),
    (TEXTNS, 'dde-connection'),
    (TEXTNS, 'description'),
    (TEXTNS, 'editing-cycles'),
    (TEXTNS, 'editing-duration'),
    (TEXTNS, 'execute-macro'),
    (TEXTNS, 'expression'),
    (TEXTNS, 'file-name'),
    (TEXTNS, 'hidden-paragraph'),
    (TEXTNS, 'hidden-text'),
    (TEXTNS, 'image-count'),
    (TEXTNS, 'initial-creator'),
    (TEXTNS, 'keywords'),
    (TEXTNS, 'measure'),
    (TEXTNS, 'modification-date'),
    (TEXTNS, 'modification-time'),
    (TEXTNS, 'note-ref'),
    (TEXTNS, 'object-count'),
    (TEXTNS, 'page-continuation'),
    (TEXTNS, 'page-count'),
    (TEXTNS, 'page-number'),
    (TEXTNS, 'page-variable-get'),
    (TEXTNS, 'page-variable-set'),
    (TEXTNS, 'paragraph-count'),
    (TEXTNS, 'placeholder'),
    (TEXTNS, 'print-date'),
    (TEXTNS, 'printed-by'),
    (TEXTNS, 'print-time'),
    (TEXTNS, 'reference-ref'),
    (TEXTNS, 'ruby'),
    (TEXTNS, 'ruby-base'),
    (TEXTNS, 'ruby-text'),
    (TEXTNS, 'script'),
    (TEXTNS, 'sender-city'),
    (TEXTNS, 'sender-company'),
    (TEXTNS, 'sender-country'),
    (TEXTNS, 'sender-email'),
    (TEXTNS, 'sender-fax'),
    (TEXTNS, 'sender-firstname'),
    (TEXTNS, 'sender-initials'),
    (TEXTNS, 'sender-lastname'),
    (TEXTNS, 'sender-phone-private'),
    (TEXTNS, 'sender-phone-work'),
    (TEXTNS, 'sender-position'),
    (TEXTNS, 'sender-postal-code'),
    (TEXTNS, 'sender-state-or-province'),
    (TEXTNS, 'sender-street'),
    (TEXTNS, 'sender-title'),
    (TEXTNS, 'sequence'),
    (TEXTNS, 'sequence-ref'),
    (TEXTNS, 'sheet-name'),
    (TEXTNS, 'span'),
    (TEXTNS, 'subject'),
    (TEXTNS, 'table-count'),
    (TEXTNS, 'table-formula'),
    (TEXTNS, 'template-name'),
    (TEXTNS, 'text-input'),
    (TEXTNS, 'time'),
    (TEXTNS, 'title'),
    (TEXTNS, 'user-defined'),
    (TEXTNS, 'user-field-get'),
    (TEXTNS, 'user-field-input'),
    (TEXTNS, 'variable-get'),
    (TEXTNS, 'variable-input'),
    (TEXTNS, 'variable-set'),
    (TEXTNS, 'word-count'),
)


# It is almost impossible to determine what elements are block elements.
# There are so many that don't fit the form
block_elements = (
    (TEXTNS, 'h'),
    (TEXTNS, 'p'),
    (TEXTNS, 'list'),
    (TEXTNS, 'list-item'),
    (TEXTNS, 'section'),
)

declarative_elements = (
    (OFFICENS, 'font-face-decls'),
    (PRESENTATIONNS, 'date-time-decl'),
    (PRESENTATIONNS, 'footer-decl'),
    (PRESENTATIONNS, 'header-decl'),
    (TABLENS, 'table-template'),
    (TEXTNS, 'alphabetical-index-entry-template'),
    (TEXTNS, 'alphabetical-index-source'),
    (TEXTNS, 'bibliography-entry-template'),
    (TEXTNS, 'bibliography-source'),
    (TEXTNS, 'dde-connection-decls'),
    (TEXTNS, 'illustration-index-entry-template'),
    (TEXTNS, 'illustration-index-source'),
    (TEXTNS, 'index-source-styles'),
    (TEXTNS, 'index-title-template'),
    (TEXTNS, 'note-continuation-notice-backward'),
    (TEXTNS, 'note-continuation-notice-forward'),
    (TEXTNS, 'notes-configuration'),
    (TEXTNS, 'object-index-entry-template'),
    (TEXTNS, 'object-index-source'),
    (TEXTNS, 'sequence-decls'),
    (TEXTNS, 'table-index-entry-template'),
    (TEXTNS, 'table-index-source'),
    (TEXTNS, 'table-of-content-entry-template'),
    (TEXTNS, 'table-of-content-source'),
    (TEXTNS, 'user-field-decls'),
    (TEXTNS, 'user-index-entry-template'),
    (TEXTNS, 'user-index-source'),
    (TEXTNS, 'variable-decls'),
)

empty_elements = (
    (ANIMNS, 'animate'),
    (ANIMNS, 'animateColor'),
    (ANIMNS, 'animateMotion'),
    (ANIMNS, 'animateTransform'),
    (ANIMNS, 'audio'),
    (ANIMNS, 'param'),
    (ANIMNS, 'set'),
    (ANIMNS, 'transitionFilter'),
    (CHARTNS, 'categories'),
    (CHARTNS, 'data-point'),
    (CHARTNS, 'domain'),
    (CHARTNS, 'error-indicator'),
    (CHARTNS, 'floor'),
    (CHARTNS, 'grid'),
    (CHARTNS, 'legend'),
    (CHARTNS, 'mean-value'),
    (CHARTNS, 'regression-curve'),
    (CHARTNS, 'stock-gain-marker'),
    (CHARTNS, 'stock-loss-marker'),
    (CHARTNS, 'stock-range-line'),
    (CHARTNS, 'symbol-image'),
    (CHARTNS, 'wall'),
    (DR3DNS, 'cube'),
    (DR3DNS, 'extrude'),
    (DR3DNS, 'light'),
    (DR3DNS, 'rotate'),
    (DR3DNS, 'sphere'),
    (DRAWNS, 'contour-path'),
    (DRAWNS, 'contour-polygon'),
    (DRAWNS, 'equation'),
    (DRAWNS, 'fill-image'),
    (DRAWNS, 'floating-frame'),
    (DRAWNS, 'glue-point'),
    (DRAWNS, 'gradient'),
    (DRAWNS, 'handle'),
    (DRAWNS, 'hatch'),
    (DRAWNS, 'layer'),
    (DRAWNS, 'marker'),
    (DRAWNS, 'opacity'),
    (DRAWNS, 'page-thumbnail'),
    (DRAWNS, 'param'),
    (DRAWNS, 'stroke-dash'),
    (FORMNS, 'connection-resource'),
    (FORMNS, 'list-value'),
    (FORMNS, 'property'),
    (MANIFESTNS, 'algorithm'),
    (MANIFESTNS, 'key-derivation'),
    (METANS, 'auto-reload'),
    (METANS, 'document-statistic'),
    (METANS, 'hyperlink-behaviour'),
    (METANS, 'template'),
    (NUMBERNS, 'am-pm'),
    (NUMBERNS, 'boolean'),
    (NUMBERNS, 'day'),
    (NUMBERNS, 'day-of-week'),
    (NUMBERNS, 'era'),
    (NUMBERNS, 'fraction'),
    (NUMBERNS, 'hours'),
    (NUMBERNS, 'minutes'),
    (NUMBERNS, 'month'),
    (NUMBERNS, 'quarter'),
    (NUMBERNS, 'scientific-number'),
    (NUMBERNS, 'seconds'),
    (NUMBERNS, 'text-content'),
    (NUMBERNS, 'week-of-year'),
    (NUMBERNS, 'year'),
    (OFFICENS, 'dde-source'),
    (PRESENTATIONNS, 'date-time'),
    (PRESENTATIONNS, 'footer'),
    (PRESENTATIONNS, 'header'),
    (PRESENTATIONNS, 'placeholder'),
    (PRESENTATIONNS, 'play'),
    (PRESENTATIONNS, 'show'),
    (PRESENTATIONNS, 'sound'),
    (SCRIPTNS, 'event-listener'),
    (STYLENS, 'column'),
    (STYLENS, 'column-sep'),
    (STYLENS, 'drop-cap'),
    (STYLENS, 'footnote-sep'),
    (STYLENS, 'list-level-properties'),
    (STYLENS, 'map'),
    (STYLENS, 'ruby-properties'),
    (STYLENS, 'table-column-properties'),
    (STYLENS, 'tab-stop'),
    (STYLENS, 'text-properties'),
    (SVGNS, 'definition-src'),
    (SVGNS, 'font-face-format'),
    (SVGNS, 'font-face-name'),
    (SVGNS, 'stop'),
    (TABLENS, 'body'),
    (TABLENS, 'cell-address'),
    (TABLENS, 'cell-range-source'),
    (TABLENS, 'change-deletion'),
    (TABLENS, 'consolidation'),
    (TABLENS, 'database-source-query'),
    (TABLENS, 'database-source-sql'),
    (TABLENS, 'database-source-table'),
    (TABLENS, 'data-pilot-display-info'),
    (TABLENS, 'data-pilot-field-reference'),
    (TABLENS, 'data-pilot-group-member'),
    (TABLENS, 'data-pilot-layout-info'),
    (TABLENS, 'data-pilot-member'),
    (TABLENS, 'data-pilot-sort-info'),
    (TABLENS, 'data-pilot-subtotal'),
    (TABLENS, 'dependency'),
    (TABLENS, 'error-macro'),
    (TABLENS, 'even-columns'),
    (TABLENS, 'even-rows'),
    (TABLENS, 'filter-condition'),
    (TABLENS, 'first-column'),
    (TABLENS, 'first-row'),
    (TABLENS, 'highlighted-range'),
    (TABLENS, 'insertion-cut-off'),
    (TABLENS, 'iteration'),
    (TABLENS, 'label-range'),
    (TABLENS, 'last-column'),
    (TABLENS, 'last-row'),
    (TABLENS, 'movement-cut-off'),
    (TABLENS, 'named-expression'),
    (TABLENS, 'named-range'),
    (TABLENS, 'null-date'),
    (TABLENS, 'odd-columns'),
    (TABLENS, 'odd-rows'),
    (TABLENS, 'operation'),
    (TABLENS, 'scenario'),
    (TABLENS, 'sort-by'),
    (TABLENS, 'sort-groups'),
    (TABLENS, 'source-range-address'),
    (TABLENS, 'source-service'),
    (TABLENS, 'subtotal-field'),
    (TABLENS, 'table-column'),
    (TABLENS, 'table-source'),
    (TABLENS, 'target-range-address'),
    (TEXTNS, 'alphabetical-index-auto-mark-file'),
    (TEXTNS, 'alphabetical-index-mark'),
    (TEXTNS, 'alphabetical-index-mark-end'),
    (TEXTNS, 'alphabetical-index-mark-start'),
    (TEXTNS, 'bookmark'),
    (TEXTNS, 'bookmark-end'),
    (TEXTNS, 'bookmark-start'),
    (TEXTNS, 'change'),
    (TEXTNS, 'change-end'),
    (TEXTNS, 'change-start'),
    (TEXTNS, 'dde-connection-decl'),
    (TEXTNS, 'index-entry-bibliography'),
    (TEXTNS, 'index-entry-chapter'),
    (TEXTNS, 'index-entry-link-end'),
    (TEXTNS, 'index-entry-link-start'),
    (TEXTNS, 'index-entry-page-number'),
    (TEXTNS, 'index-entry-tab-stop'),
    (TEXTNS, 'index-entry-text'),
    (TEXTNS, 'index-source-style'),
    (TEXTNS, 'line-break'),
    (TEXTNS, 'page'),
    (TEXTNS, 'reference-mark'),
    (TEXTNS, 'reference-mark-end'),
    (TEXTNS, 'reference-mark-start'),
    (TEXTNS, 's'),
    (TEXTNS, 'section-source'),
    (TEXTNS, 'sequence-decl'),
    (TEXTNS, 'soft-page-break'),
    (TEXTNS, 'sort-key'),
    (TEXTNS, 'tab'),
    (TEXTNS, 'toc-mark'),
    (TEXTNS, 'toc-mark-end'),
    (TEXTNS, 'toc-mark-start'),
    (TEXTNS, 'user-field-decl'),
    (TEXTNS, 'user-index-mark'),
    (TEXTNS, 'user-index-mark-end'),
    (TEXTNS, 'user-index-mark-start'),
    (TEXTNS, 'variable-decl'),
)
