diff --git a/.bzrignore b/.bzrignore
index f8cd058a98..9aa0bfae5c 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -28,3 +28,4 @@ src/cssutils/_todo/
src/cssutils/scripts/
src/cssutils/css/.svn/
src/cssutils/stylesheets/.svn/
+src/odf/.svn
diff --git a/src/calibre/ebooks/__init__.py b/src/calibre/ebooks/__init__.py
index 58dff6490c..83153fd8b8 100644
--- a/src/calibre/ebooks/__init__.py
+++ b/src/calibre/ebooks/__init__.py
@@ -21,4 +21,4 @@ class DRMError(ValueError):
BOOK_EXTENSIONS = ['lrf', 'rar', 'zip', 'rtf', 'lit', 'txt', 'htm', 'xhtm',
'html', 'xhtml', 'epub', 'pdf', 'prc', 'mobi', 'azw',
'epub', 'fb2', 'djvu', 'lrx', 'cbr', 'cbz', 'oebzip',
- 'rb', 'imp']
+ 'rb', 'imp', 'odt']
diff --git a/src/calibre/ebooks/epub/from_any.py b/src/calibre/ebooks/epub/from_any.py
index dd79901e90..e59564cc43 100644
--- a/src/calibre/ebooks/epub/from_any.py
+++ b/src/calibre/ebooks/epub/from_any.py
@@ -72,7 +72,6 @@ def pdf2opf(path, tdir, opts):
def epub2opf(path, tdir, opts):
zf = ZipFile(path)
zf.extractall(tdir)
- print os.listdir(os.path.join(tdir, 'META-INF'))
if os.path.exists(os.path.join(tdir, 'META-INF', 'encryption.xml')):
raise DRMError(os.path.basename(path))
for f in walk(tdir):
@@ -80,6 +79,10 @@ def epub2opf(path, tdir, opts):
return f
raise ValueError('%s is not a valid EPUB file'%path)
+def odt2epub(path, tdir, opts):
+ from calibre.ebooks.odt.to_oeb import Extract
+ opts.encoding = 'utf-8'
+ return Extract()(path, tdir)
MAP = {
'lit' : lit2opf,
@@ -90,8 +93,9 @@ MAP = {
'txt' : txt2opf,
'pdf' : pdf2opf,
'epub' : epub2opf,
+ 'odt' : odt2epub,
}
-SOURCE_FORMATS = ['lit', 'mobi', 'prc', 'fb2', 'rtf', 'txt', 'pdf', 'rar', 'zip', 'oebzip', 'htm', 'html', 'epub']
+SOURCE_FORMATS = ['lit', 'mobi', 'prc', 'fb2', 'odt', 'rtf', 'txt', 'pdf', 'rar', 'zip', 'oebzip', 'htm', 'html', 'epub']
def unarchive(path, tdir):
extract(path, tdir)
diff --git a/src/calibre/ebooks/lrf/__init__.py b/src/calibre/ebooks/lrf/__init__.py
index 19a584d0aa..3515c75c7d 100644
--- a/src/calibre/ebooks/lrf/__init__.py
+++ b/src/calibre/ebooks/lrf/__init__.py
@@ -23,6 +23,7 @@ preferred_source_formats = [
'LIT',
'MOBI',
'EPUB',
+ 'ODT',
'HTML',
'HTM',
'XHTM',
diff --git a/src/calibre/ebooks/lrf/any/convert_from.py b/src/calibre/ebooks/lrf/any/convert_from.py
index 0dfd1d4f05..710fbe1690 100644
--- a/src/calibre/ebooks/lrf/any/convert_from.py
+++ b/src/calibre/ebooks/lrf/any/convert_from.py
@@ -1,3 +1,4 @@
+from __future__ import with_statement
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal '
'''Convert any ebook file into a LRF file.'''
@@ -7,6 +8,7 @@ import sys, os, logging, shutil, tempfile, re
from calibre.ebooks import UnknownFormatError
from calibre.ebooks.lrf import option_parser as _option_parser
from calibre import __appname__, setup_cli_handlers, extract
+from calibre.ptempfile import TemporaryDirectory
from calibre.ebooks.lrf.lit.convert_from import process_file as lit2lrf
from calibre.ebooks.lrf.pdf.convert_from import process_file as pdf2lrf
from calibre.ebooks.lrf.rtf.convert_from import process_file as rtf2lrf
@@ -89,6 +91,21 @@ def handle_archive(path):
file = file.decode(sys.getfilesystemencoding())
return tdir, file
+def odt2lrf(path, options, logger):
+ from calibre.ebooks.odt.to_oeb import Extract
+ from calibre.ebooks.lrf.html.convert_from import process_file as html_process_file
+
+ if logger is None:
+ level = logging.DEBUG if options.verbose else logging.INFO
+ logger = logging.getLogger('odt2lrf')
+ setup_cli_handlers(logger, level)
+
+ with TemporaryDirectory('_odt2lrf') as tdir:
+ opf = Extract()(path, tdir)
+ options.use_spine = True
+ options.encoding = 'utf-8'
+ html_process_file(opf.replace('metadata.opf', 'index.html'), options, logger)
+
def process_file(path, options, logger=None):
path = os.path.abspath(os.path.expanduser(path))
tdir = None
@@ -138,8 +155,10 @@ def process_file(path, options, logger=None):
convertor = mobi2lrf
elif ext == 'fb2':
convertor = fb22lrf
+ elif ext == 'odt':
+ convertor = odt2lrf
if not convertor:
- raise UnknownFormatError('Coverting from %s to LRF is not supported.'%ext)
+ raise UnknownFormatError(_('Converting from %s to LRF is not supported.')%ext)
convertor(path, options, logger)
finally:
os.chdir(cwd)
diff --git a/src/calibre/ebooks/metadata/meta.py b/src/calibre/ebooks/metadata/meta.py
index c1ad9da7d6..8da74ceb8f 100644
--- a/src/calibre/ebooks/metadata/meta.py
+++ b/src/calibre/ebooks/metadata/meta.py
@@ -14,17 +14,17 @@ from calibre.ebooks.metadata.rb import get_metadata as rb_metadata
from calibre.ebooks.metadata.epub import get_metadata as epub_metadata
from calibre.ebooks.metadata.html import get_metadata as html_metadata
from calibre.ebooks.mobi.reader import get_metadata as mobi_metadata
+from calibre.ebooks.metadata.odt import get_metadata as odt_metadata
from calibre.ebooks.metadata.opf import OPFReader
from calibre.ebooks.metadata.rtf import set_metadata as set_rtf_metadata
from calibre.ebooks.lrf.meta import set_metadata as set_lrf_metadata
from calibre.ebooks.metadata.epub import set_metadata as set_epub_metadata
from calibre.ebooks.metadata import MetaInformation
-from calibre.utils.config import prefs
_METADATA_PRIORITIES = [
'html', 'htm', 'xhtml', 'xhtm',
- 'rtf', 'fb2', 'pdf', 'prc',
+ 'rtf', 'fb2', 'pdf', 'prc', 'odt',
'epub', 'lit', 'lrf', 'mobi', 'rb', 'imp'
]
@@ -64,6 +64,8 @@ def get_metadata(stream, stream_type='lrf', use_libprs_metadata=False):
stream_type = 'html'
if stream_type in ('mobi', 'prc'):
stream_type = 'mobi'
+ if stream_type in ('odt', 'ods', 'odp', 'odg', 'odf'):
+ stream_type = 'odt'
opf = None
if hasattr(stream, 'name'):
diff --git a/src/calibre/ebooks/metadata/odt.py b/src/calibre/ebooks/metadata/odt.py
new file mode 100755
index 0000000000..904c07ef2a
--- /dev/null
+++ b/src/calibre/ebooks/metadata/odt.py
@@ -0,0 +1,266 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006 Søren Roug, European Environment Agency
+#
+# This is free software. You may redistribute it under the terms
+# of the Apache license and the GNU General Public License Version
+# 2 or at your option any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Contributor(s):
+#
+import zipfile, sys, re
+import xml.sax.saxutils
+from cStringIO import StringIO
+
+from odf.namespaces import OFFICENS, DCNS, METANS
+from calibre.ebooks.metadata import MetaInformation, string_to_authors
+
+whitespace = re.compile(r'\s+')
+
+fields = {
+'title': (DCNS,u'title'),
+'description': (DCNS,u'description'),
+'subject': (DCNS,u'subject'),
+'creator': (DCNS,u'creator'),
+'date': (DCNS,u'date'),
+'language': (DCNS,u'language'),
+'generator': (METANS,u'generator'),
+'initial-creator': (METANS,u'initial-creator'),
+'keyword': (METANS,u'keyword'),
+'editing-duration': (METANS,u'editing-duration'),
+'editing-cycles': (METANS,u'editing-cycles'),
+'printed-by': (METANS,u'printed-by'),
+'print-date': (METANS,u'print-date'),
+'creation-date': (METANS,u'creation-date'),
+'user-defined': (METANS,u'user-defined'),
+#'template': (METANS,u'template'),
+}
+
+def normalize(str):
+ """
+ The normalize-space function returns the argument string with whitespace
+ normalized by stripping leading and trailing whitespace and replacing
+ sequences of whitespace characters by a single space.
+ """
+ return whitespace.sub(' ', str).strip()
+
+class MetaCollector:
+ """
+ The MetaCollector is a pseudo file object, that can temporarily ignore write-calls
+ It could probably be replaced with a StringIO object.
+ """
+ def __init__(self):
+ self._content = []
+ self.dowrite = True
+
+ def write(self, str):
+ if self.dowrite:
+ self._content.append(str)
+
+ def content(self):
+ return ''.join(self._content)
+
+
+class odfmetaparser(xml.sax.saxutils.XMLGenerator):
+ """ Parse a meta.xml file with an event-driven parser and replace elements.
+ It would probably be a cleaner approach to use a DOM based parser and
+ then manipulate in memory.
+ Small issue: Reorders elements
+ """
+
+ def __init__(self, deletefields={}, yieldfields={}, addfields={}):
+ self.deletefields = deletefields
+ self.yieldfields = yieldfields
+ self.addfields = addfields
+ self._mimetype = ''
+ self.output = MetaCollector()
+ self._data = []
+ self.seenfields = {}
+ xml.sax.saxutils.XMLGenerator.__init__(self, self.output, 'utf-8')
+
+ def startElementNS(self, name, qname, attrs):
+ self._data = []
+ field = name
+# I can't modify the template until the tool replaces elements at the same
+# location and not at the end
+# if name == (METANS,u'template'):
+# self._data = [attrs.get((XLINKNS,u'title'),'')]
+ if name == (METANS,u'user-defined'):
+ field = attrs.get((METANS,u'name'))
+ if field in self.deletefields:
+ self.output.dowrite = False
+ elif field in self.yieldfields:
+ del self.addfields[field]
+ xml.sax.saxutils.XMLGenerator.startElementNS(self, name, qname, attrs)
+ else:
+ xml.sax.saxutils.XMLGenerator.startElementNS(self, name, qname, attrs)
+ self._tag = field
+
+ def endElementNS(self, name, qname):
+ field = name
+ if name == (METANS,u'user-defined'):
+ field = self._tag
+ if name == (OFFICENS,u'meta'):
+ for k,v in self.addfields.items():
+ if len(v) > 0:
+ if type(k) == type(''):
+ xml.sax.saxutils.XMLGenerator.startElementNS(self,(METANS,u'user-defined'),None,{(METANS,u'name'):k})
+ xml.sax.saxutils.XMLGenerator.characters(self, v)
+ xml.sax.saxutils.XMLGenerator.endElementNS(self, (METANS,u'user-defined'),None)
+ else:
+ xml.sax.saxutils.XMLGenerator.startElementNS(self, k, None, {})
+ xml.sax.saxutils.XMLGenerator.characters(self, v)
+ xml.sax.saxutils.XMLGenerator.endElementNS(self, k, None)
+ if isinstance(self._tag, tuple):
+ texttag = self._tag[1]
+ else:
+ texttag = self._tag
+ self.seenfields[texttag] = self.data()
+
+ if field in self.deletefields:
+ self.output.dowrite = True
+ else:
+ xml.sax.saxutils.XMLGenerator.endElementNS(self, name, qname)
+
+ def characters(self, content):
+ xml.sax.saxutils.XMLGenerator.characters(self, content)
+ self._data.append(content)
+
+ def meta(self):
+ return self.output.content()
+
+ def data(self):
+ return normalize(''.join(self._data))
+
+def get_metadata(stream):
+ zin = zipfile.ZipFile(stream, 'r')
+ odfs = odfmetaparser()
+ parser = xml.sax.make_parser()
+ parser.setFeature(xml.sax.handler.feature_namespaces, 1)
+ parser.setContentHandler(odfs)
+ content = zin.read('meta.xml')
+ parser.parse(StringIO(content))
+ data = odfs.seenfields
+ mi = MetaInformation(None, [])
+ if data.has_key('title'):
+ mi.title = data['title']
+ if data.has_key('creator'):
+ mi.authors = string_to_authors(data['creator'])
+ if data.has_key('description'):
+ mi.comments = data['description']
+ if data.has_key('language'):
+ mi.language = data['language']
+ if data.get('keywords', ''):
+ mi.tags = data['keywords'].split(',')
+
+ return mi
+
+def main(args=sys.argv):
+ if len(args) != 2:
+ print 'Usage: %s file.odt'%args[0]
+ return 1
+ mi = get_metadata(open(args[1], 'rb'))
+ print mi
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
+
+#now = time.localtime()[:6]
+#outputfile = "-"
+#writemeta = False # Do we change any meta data?
+#usenormalize = False
+#
+#try:
+# opts, args = getopt.getopt(sys.argv[1:], "cdlI:A:a:o:x:X:")
+#except getopt.GetoptError:
+# exitwithusage()
+#
+#if len(opts) == 0:
+# opts = [ ('-l','') ]
+#
+#for o, a in opts:
+# if o in ('-a','-A','-I'):
+# writemeta = True
+# if a.find(":") >= 0:
+# k,v = a.split(":",1)
+# else:
+# k,v = (a, "")
+# if len(k) == 0:
+# exitwithusage()
+# k = fields.get(k,k)
+# addfields[k] = unicode(v,'utf-8')
+# if o == '-a':
+# yieldfields[k] = True
+# if o == '-I':
+# deletefields[k] = True
+# if o == '-d':
+# writemeta = True
+# addfields[(DCNS,u'date')] = "%04d-%02d-%02dT%02d:%02d:%02d" % now
+# deletefields[(DCNS,u'date')] = True
+# if o == '-c':
+# usenormalize = True
+# if o == '-l':
+# Xfields = fields.values()
+# if o == "-x":
+# xfields.append(fields.get(a,a))
+# if o == "-X":
+# Xfields.append(fields.get(a,a))
+# if o == "-o":
+# outputfile = a
+#
+## The specification says we should change the element to our own,
+## and must not export the original identifier.
+#if writemeta:
+# addfields[(METANS,u'generator')] = TOOLSVERSION
+# deletefields[(METANS,u'generator')] = True
+#
+#odfs = odfmetaparser()
+#parser = xml.sax.make_parser()
+#parser.setFeature(xml.sax.handler.feature_namespaces, 1)
+#parser.setContentHandler(odfs)
+#
+#if len(args) == 0:
+# zin = zipfile.ZipFile(sys.stdin,'r')
+#else:
+# if not zipfile.is_zipfile(args[0]):
+# exitwithusage()
+# zin = zipfile.ZipFile(args[0], 'r')
+#
+#content = zin.read('meta.xml')
+#parser.parse(StringIO(content))
+#
+#if writemeta:
+# if outputfile == '-':
+# if sys.stdout.isatty():
+# sys.stderr.write("Won't write ODF file to terminal\n")
+# sys.exit(1)
+# zout = zipfile.ZipFile(sys.stdout,"w")
+# else:
+# zout = zipfile.ZipFile(outputfile,"w")
+#
+#
+#
+# # Loop through the input zipfile and copy the content to the output until we
+# # get to the meta.xml. Then substitute.
+# for zinfo in zin.infolist():
+# if zinfo.filename == "meta.xml":
+# # Write meta
+# zi = zipfile.ZipInfo("meta.xml", now)
+# zi.compress_type = zipfile.ZIP_DEFLATED
+# zout.writestr(zi,odfs.meta() )
+# else:
+# payload = zin.read(zinfo.filename)
+# zout.writestr(zinfo, payload)
+#
+# zout.close()
+#zin.close()
diff --git a/src/calibre/ebooks/odt/__init__.py b/src/calibre/ebooks/odt/__init__.py
new file mode 100644
index 0000000000..d5fc74348c
--- /dev/null
+++ b/src/calibre/ebooks/odt/__init__.py
@@ -0,0 +1,9 @@
+#!/usr/bin/env python
+__license__ = 'GPL v3'
+__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
+__docformat__ = 'restructuredtext en'
+
+'''
+Handle the Open Document Format
+'''
+
diff --git a/src/calibre/ebooks/odt/to_oeb.py b/src/calibre/ebooks/odt/to_oeb.py
new file mode 100644
index 0000000000..7cb354884e
--- /dev/null
+++ b/src/calibre/ebooks/odt/to_oeb.py
@@ -0,0 +1,72 @@
+from __future__ import with_statement
+__license__ = 'GPL v3'
+__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
+__docformat__ = 'restructuredtext en'
+
+'''
+Convert an ODT file into a Open Ebook
+'''
+import os, sys
+from odf.odf2xhtml import ODF2XHTML
+
+from calibre import CurrentDir, walk
+from calibre.utils.zipfile import ZipFile
+from calibre.utils.config import OptionParser
+from calibre.ebooks.metadata.odt import get_metadata
+from calibre.ebooks.metadata.opf2 import OPFCreator
+
+class Extract(ODF2XHTML):
+
+ def extract_pictures(self, zf):
+ if not os.path.exists('Pictures'):
+ os.makedirs('Pictures')
+ for name in zf.namelist():
+ if name.startswith('Pictures'):
+ data = zf.read(name)
+ with open(name, 'wb') as f:
+ f.write(data)
+
+ def __call__(self, path, odir):
+ if not os.path.exists(odir):
+ os.makedirs(odir)
+ path = os.path.abspath(path)
+ with CurrentDir(odir):
+ print 'Extracting ODT file...'
+ html = self.odf2xhtml(path)
+ with open('index.html', 'wb') as f:
+ f.write(html.encode('utf-8'))
+ with open(path, 'rb') as f:
+ zf = ZipFile(f, 'r')
+ self.extract_pictures(zf)
+ f.seek(0)
+ mi = get_metadata(f)
+ if not mi.title:
+ mi.title = os.path.splitext(os.path.basename(path))
+ if not mi.authors:
+ mi.authors = [_('Unknown')]
+ opf = OPFCreator(os.path.abspath(os.getcwdu()), mi)
+ opf.create_manifest([(os.path.abspath(f), None) for f in walk(os.getcwd())])
+ opf.create_spine([os.path.abspath('index.html')])
+ with open('metadata.opf', 'wb') as f:
+ opf.render(f)
+ return os.path.abspath('metadata.opf')
+
+def option_parser():
+ parser = OptionParser('%prog [options] file.odt')
+ parser.add_option('-o', '--output-dir', default='.',
+ help=_('The output directory. Defaults to the current directory.'))
+ return parser
+
+def main(args=sys.argv):
+ parser = option_parser()
+ opts, args = parser.parse_args(args)
+ if len(args) < 2:
+ parser.print_help()
+ print 'No ODT file specified'
+ return 1
+ Extract()(args[1], os.path.abspath(opts.output_dir))
+ print 'Extracted to', os.path.abspath(opts.output_dir)
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
\ No newline at end of file
diff --git a/src/calibre/linux.py b/src/calibre/linux.py
index 33796f5b15..096f4ef3f9 100644
--- a/src/calibre/linux.py
+++ b/src/calibre/linux.py
@@ -24,11 +24,13 @@ entry_points = {
'imp-meta = calibre.ebooks.metadata.imp:main',
'rb-meta = calibre.ebooks.metadata.rb:main',
'opf-meta = calibre.ebooks.metadata.opf:main',
+ 'odt-meta = calibre.ebooks.metadata.odt:main',
'epub-meta = calibre.ebooks.metadata.epub:main',
'txt2lrf = calibre.ebooks.lrf.txt.convert_from:main',
'html2lrf = calibre.ebooks.lrf.html.convert_from:main',
'html2oeb = calibre.ebooks.html:main',
'html2epub = calibre.ebooks.epub.from_html:main',
+ 'odt2oeb = calibre.ebooks.odt.to_oeb:main',
'markdown-calibre = calibre.ebooks.markdown.markdown:main',
'lit2lrf = calibre.ebooks.lrf.lit.convert_from:main',
'epub2lrf = calibre.ebooks.lrf.epub.convert_from:main',
@@ -176,11 +178,12 @@ def setup_completion(fatal_errors):
from calibre.ebooks.lrf.comic.convert_from import option_parser as comicop
from calibre.ebooks.epub.from_html import option_parser as html2epub
from calibre.ebooks.html import option_parser as html2oeb
+ from calibre.ebooks.odt.to_oeb import option_parser as odt2oeb
from calibre.ebooks.epub.from_feeds import option_parser as feeds2epub
from calibre.ebooks.epub.from_any import option_parser as any2epub
from calibre.ebooks.epub.from_comic import option_parser as comic2epub
any_formats = ['epub', 'htm', 'html', 'xhtml', 'xhtm', 'rar', 'zip',
- 'txt', 'lit', 'rtf', 'pdf', 'prc', 'mobi', 'fb2']
+ 'txt', 'lit', 'rtf', 'pdf', 'prc', 'mobi', 'fb2', 'odt']
f = open_file('/etc/bash_completion.d/libprs500')
f.close()
os.remove(f.name)
@@ -208,6 +211,7 @@ def setup_completion(fatal_errors):
f.write(opts_and_exts('imp-meta', metaop, ['imp']))
f.write(opts_and_exts('rb-meta', metaop, ['rb']))
f.write(opts_and_exts('opf-meta', metaop, ['opf']))
+ f.write(opts_and_exts('odt-meta', metaop, ['odt', 'ods', 'odf', 'odg', 'odp']))
f.write(opts_and_exts('epub-meta', epub_meta, ['epub']))
f.write(opts_and_exts('lrfviewer', lrfviewerop, ['lrf']))
f.write(opts_and_exts('pdfrelow', pdfhtmlop, ['pdf']))
@@ -220,6 +224,7 @@ def setup_completion(fatal_errors):
f.write(opts_and_words('feeds2lrf', feeds2epub, feed_titles))
f.write(opts_and_exts('html2epub', html2epub, ['html', 'htm', 'xhtm', 'xhtml', 'opf']))
f.write(opts_and_exts('html2oeb', html2oeb, ['html', 'htm', 'xhtm', 'xhtml']))
+ f.write(opts_and_exts('odt2oeb', odt2oeb, ['odt']))
f.write('''
_prs500_ls()
{
diff --git a/src/calibre/manual/faq.rst b/src/calibre/manual/faq.rst
index 0f723dd201..7438b5cde8 100644
--- a/src/calibre/manual/faq.rst
+++ b/src/calibre/manual/faq.rst
@@ -32,6 +32,8 @@ What formats does |app| support conversion to/from?
| | | | |
| | EPUB | ✔ | ✔ |
| | | | |
+| | ODT | ✔ | ✔ |
+| | | | |
| | HTML | ✔ | ✔ |
| | | | |
| **Input formats** | CBR | ✔ | ✔ |
diff --git a/src/odf/__init__.py b/src/odf/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/odf/anim.py b/src/odf/anim.py
new file mode 100644
index 0000000000..27dca36ca8
--- /dev/null
+++ b/src/odf/anim.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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
+from element import Element
+
+
+# Autogenerated
+def Animate(**args):
+ return Element(qname = (ANIMNS,'animate'), **args)
+
+def Animatecolor(**args):
+ return Element(qname = (ANIMNS,'animateColor'), **args)
+
+def Animatemotion(**args):
+ return Element(qname = (ANIMNS,'animateMotion'), **args)
+
+def Animatetransform(**args):
+ return Element(qname = (ANIMNS,'animateTransform'), **args)
+
+def Audio(**args):
+ return Element(qname = (ANIMNS,'audio'), **args)
+
+def Command(**args):
+ return Element(qname = (ANIMNS,'command'), **args)
+
+def Iterate(**args):
+ return Element(qname = (ANIMNS,'iterate'), **args)
+
+def Par(**args):
+ return Element(qname = (ANIMNS,'par'), **args)
+
+def Param(**args):
+ return Element(qname = (ANIMNS,'param'), **args)
+
+def Seq(**args):
+ return Element(qname = (ANIMNS,'seq'), **args)
+
+def Set(**args):
+ return Element(qname = (ANIMNS,'set'), **args)
+
+def Transitionfilter(**args):
+ return Element(qname = (ANIMNS,'transitionFilter'), **args)
+
diff --git a/src/odf/attrconverters.py b/src/odf/attrconverters.py
new file mode 100644
index 0000000000..9abdf0502b
--- /dev/null
+++ b/src/odf/attrconverters.py
@@ -0,0 +1,1444 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-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 *
+import re, types
+
+pattern_color = re.compile(r'#[0-9a-fA-F]{6}')
+pattern_vector3D = re.compile(r'\([ ]*-?([0-9]+(\.[0-9]*)?|\.[0-9]+)([ ]+-?([0-9]+(\.[0-9]*)?|\.[0-9]+)){2}[ ]*\)')
+
+def make_NCName(arg):
+ for c in (':',' '):
+ arg = arg.replace(c,"_%x_" % ord(c))
+ return arg
+
+def cnv_anyURI(attribute, arg, element):
+ return unicode(arg)
+
+def cnv_boolean(attribute, arg, element):
+ if arg.lower() in ("false","no"):
+ return "false"
+ if arg:
+ return "true"
+ return "false"
+
+# Potentially accept color values
+def cnv_color(attribute, arg, element):
+ return str(arg)
+
+def cnv_configtype(attribute, arg, element):
+ if str(arg) not in ("boolean", "short", "int", "long",
+ "double", "string", "datetime", "base64Binary"):
+ raise ValueError, "'%s' not allowed" % str(arg)
+ return str(arg)
+
+def cnv_data_source_has_labels(attribute, arg, element):
+ if str(arg) not in ("none","row","column","both"):
+ raise ValueError, "'%s' not allowed" % str(arg)
+ return str(arg)
+
+# Understand different date formats
+def cnv_date(attribute, arg, element):
+ return str(arg)
+
+def cnv_dateTime(attribute, arg, element):
+ return str(arg)
+
+def cnv_double(attribute, arg, element):
+ return str(arg)
+
+def cnv_duration(attribute, arg, element):
+ return str(arg)
+
+def cnv_family(attribute, arg, element):
+ if str(arg) not in ("text", "paragraph", "section", "ruby", "table", "table-column", "table-row", "table-cell",
+ "graphic", "presentation", "drawing-page", "chart"):
+ raise ValueError, "'%s' not allowed" % str(arg)
+ return str(arg)
+
+def cnv_ID(attribute, arg, element):
+ return str(arg)
+
+def cnv_IDREF(attribute, arg, element):
+ return str(arg)
+
+def cnv_integer(attribute, arg, element):
+ return str(arg)
+
+def cnv_legend_position(attribute, arg, element):
+ if str(arg) not in ("start", "end", "top", "bottom", "top-start", "bottom-start", "top-end", "bottom-end"):
+ raise ValueError, "'%s' not allowed" % str(arg)
+ return str(arg)
+
+pattern_length = re.compile(r'-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px))')
+
+def cnv_length(attribute, arg, element):
+ global pattern_length
+ if not pattern_length.match(arg):
+ raise ValueError, "'%s' is not a valid length" % arg
+ return arg
+
+def cnv_lengthorpercent(attribute, arg, element):
+ failed = False
+ try: return cnv_length(attribute, arg, element)
+ except: failed = True
+ try: return cnv_percent(attribute, arg, element)
+ except: failed = True
+ if failed:
+ raise ValueError, "'%s' is not a valid length or percent" % arg
+ return arg
+
+def cnv_metavaluetype(attribute, arg, element):
+ if str(arg) not in ("float", "date", "time", "boolean", "string"):
+ raise ValueError, "'%s' not allowed" % str(arg)
+ return str(arg)
+
+def cnv_major_minor(attribute, arg, element):
+ if arg not in ('major','minor'):
+ raise ValueError, "'%s' is not either 'minor' or 'major'" % arg
+
+pattern_namespacedToken = re.compile(r'[0-9a-zA-Z_]+:[0-9a-zA-Z._\-]+')
+
+def cnv_namespacedToken(attribute, arg, element):
+ global pattern_namespacedToken
+
+ if not pattern_namespacedToken.match(arg):
+ raise ValueError, "'%s' is not a valid namespaced token" % arg
+ return arg
+
+# Must accept string as argument
+# NCName is defined in http://www.w3.org/TR/REC-xml-names/#NT-NCName
+# Essentially an XML name minus ':'
+def cnv_NCName(attribute, arg, element):
+ if type(arg) in types.StringTypes:
+ return make_NCName(arg)
+ else:
+ return arg.getAttrNS(STYLENS, 'name')
+
+# This function takes either an instance of a style (preferred)
+# or a text string naming the style. If it is a text string, then it must
+# already have been converted to an NCName
+# The text-string argument is mainly for when we build a structure from XML
+def cnv_StyleNameRef(attribute, arg, element):
+ try:
+ return arg.getAttrNS(STYLENS, 'name')
+ except:
+ return arg
+
+# This function takes either an instance of a style (preferred)
+# or a text string naming the style. If it is a text string, then it must
+# already have been converted to an NCName
+# The text-string argument is mainly for when we build a structure from XML
+def cnv_DrawNameRef(attribute, arg, element):
+ try:
+ return arg.getAttrNS(DRAWNS, 'name')
+ except:
+ return arg
+
+# Must accept list of Style objects
+def cnv_NCNames(attribute, arg, element):
+ return ' '.join(arg)
+
+def cnv_nonNegativeInteger(attribute, arg, element):
+ return str(arg)
+
+pattern_percent = re.compile(r'-?([0-9]+(\.[0-9]*)?|\.[0-9]+)%')
+
+def cnv_percent(attribute, arg, element):
+ global pattern_percent
+ if not pattern_percent.match(arg):
+ raise ValueError, "'%s' is not a valid length" % arg
+ return arg
+
+# Real one doesn't allow floating point values
+pattern_points = re.compile(r'-?[0-9]+,-?[0-9]+([ ]+-?[0-9]+,-?[0-9]+)*')
+#pattern_points = re.compile(r'-?[0-9.]+,-?[0-9.]+([ ]+-?[0-9.]+,-?[0-9.]+)*')
+def cnv_points(attribute, arg, element):
+ global pattern_points
+ if type(arg) in types.StringTypes:
+ if not pattern_points.match(arg):
+ raise ValueError, "x,y are separated by a comma and the points are separated by white spaces"
+ return arg
+ else:
+ try:
+ strarg = ' '.join([ "%d,%d" % p for p in arg])
+ except:
+ raise ValueError, "Points must be string or [(0,0),(1,1)] - not %s" % arg
+ return strarg
+
+def cnv_position(attribute, arg, element):
+ if element == (STYLENS,u'tab-stop'):
+ return cnv_length(attribute, arg, element)
+ return cnv_string(attribute, arg, element)
+
+def cnv_positiveInteger(attribute, arg, element):
+ return str(arg)
+
+def cnv_string(attribute, arg, element):
+ return unicode(arg)
+
+def cnv_textnoteclass(attribute, arg, element):
+ if str(arg) not in ("footnote", "endnote"):
+ raise ValueError, "'%s' not allowed" % str(arg)
+ return str(arg)
+
+# Understand different time formats
+def cnv_time(attribute, arg, element):
+ return str(arg)
+
+def cnv_token(attribute, arg, element):
+ return str(arg)
+
+pattern_viewbox = re.compile(r'-?[0-9]+([ ]+-?[0-9]+){3}$')
+
+def cnv_viewbox(attribute, arg, element):
+ global pattern_viewbox
+ if not pattern_viewbox.match(arg):
+ raise ValueError, "viewBox must be four integers separated by whitespaces"
+ return arg
+
+def cnv_xlinkshow(attribute, arg, element):
+ if str(arg) not in ("new", "replace", "embed"):
+ raise ValueError, "'%s' not allowed" % str(arg)
+ return str(arg)
+
+
+attrconverters = {
+ ((ANIMNS,u'audio-level'), None): cnv_double,
+ ((ANIMNS,u'color-interpolation'), None): cnv_string,
+ ((ANIMNS,u'color-interpolation-direction'), None): cnv_string,
+ ((ANIMNS,u'command'), None): cnv_string,
+ ((ANIMNS,u'formula'), None): cnv_string,
+ ((ANIMNS,u'id'), None): cnv_ID,
+ ((ANIMNS,u'iterate-interval'), None): cnv_duration,
+ ((ANIMNS,u'iterate-type'), None): cnv_string,
+ ((ANIMNS,u'name'), None): cnv_string,
+ ((ANIMNS,u'sub-item'), None): cnv_string,
+ ((ANIMNS,u'value'), None): cnv_string,
+ ((CHARTNS,u'attached-axis'), None): cnv_string,
+ ((CHARTNS,u'class'), (CHARTNS,u'grid')): cnv_major_minor,
+ ((CHARTNS,u'class'), None): cnv_namespacedToken,
+ ((CHARTNS,u'column-mapping'), None): cnv_string,
+ ((CHARTNS,u'connect-bars'), None): cnv_boolean,
+ ((CHARTNS,u'data-label-number'), None): cnv_string,
+ ((CHARTNS,u'data-label-symbol'), None): cnv_boolean,
+ ((CHARTNS,u'data-label-text'), None): cnv_boolean,
+ ((CHARTNS,u'data-source-has-labels'), None): cnv_data_source_has_labels,
+ ((CHARTNS,u'deep'), None): cnv_boolean,
+ ((CHARTNS,u'dimension'), None): cnv_string,
+ ((CHARTNS,u'display-label'), None): cnv_boolean,
+ ((CHARTNS,u'error-category'), None): cnv_string,
+ ((CHARTNS,u'error-lower-indicator'), None): cnv_boolean,
+ ((CHARTNS,u'error-lower-limit'), None): cnv_string,
+ ((CHARTNS,u'error-margin'), None): cnv_string,
+ ((CHARTNS,u'error-percentage'), None): cnv_string,
+ ((CHARTNS,u'error-upper-indicator'), None): cnv_boolean,
+ ((CHARTNS,u'error-upper-limit'), None): cnv_string,
+ ((CHARTNS,u'gap-width'), None): cnv_string,
+ ((CHARTNS,u'interpolation'), None): cnv_string,
+ ((CHARTNS,u'interval-major'), None): cnv_string,
+ ((CHARTNS,u'interval-minor'), None): cnv_string,
+ ((CHARTNS,u'japanese-candle-stick'), None): cnv_boolean,
+ ((CHARTNS,u'label-arrangement'), None): cnv_string,
+ ((CHARTNS,u'label-cell-address'), None): cnv_string,
+ ((CHARTNS,u'legend-align'), None): cnv_string,
+ ((CHARTNS,u'legend-position'), None): cnv_legend_position,
+ ((CHARTNS,u'lines'), None): cnv_boolean,
+ ((CHARTNS,u'link-data-style-to-source'), None): cnv_boolean,
+ ((CHARTNS,u'logarithmic'), None): cnv_boolean,
+ ((CHARTNS,u'maximum'), None): cnv_string,
+ ((CHARTNS,u'mean-value'), None): cnv_boolean,
+ ((CHARTNS,u'minimum'), None): cnv_string,
+ ((CHARTNS,u'name'), None): cnv_string,
+ ((CHARTNS,u'origin'), None): cnv_string,
+ ((CHARTNS,u'overlap'), None): cnv_string,
+ ((CHARTNS,u'percentage'), None): cnv_boolean,
+ ((CHARTNS,u'pie-offset'), None): cnv_string,
+ ((CHARTNS,u'regression-type'), None): cnv_string,
+ ((CHARTNS,u'repeated'), None): cnv_nonNegativeInteger,
+ ((CHARTNS,u'row-mapping'), None): cnv_string,
+ ((CHARTNS,u'scale-text'), None): cnv_boolean,
+ ((CHARTNS,u'series-source'), None): cnv_string,
+ ((CHARTNS,u'solid-type'), None): cnv_string,
+ ((CHARTNS,u'spline-order'), None): cnv_string,
+ ((CHARTNS,u'spline-resolution'), None): cnv_string,
+ ((CHARTNS,u'stacked'), None): cnv_boolean,
+ ((CHARTNS,u'style-name'), None): cnv_StyleNameRef,
+ ((CHARTNS,u'symbol-height'), None): cnv_string,
+ ((CHARTNS,u'symbol-name'), None): cnv_string,
+ ((CHARTNS,u'symbol-type'), None): cnv_string,
+ ((CHARTNS,u'symbol-width'), None): cnv_string,
+ ((CHARTNS,u'text-overlap'), None): cnv_boolean,
+ ((CHARTNS,u'three-dimensional'), None): cnv_boolean,
+ ((CHARTNS,u'tick-marks-major-inner'), None): cnv_boolean,
+ ((CHARTNS,u'tick-marks-major-outer'), None): cnv_boolean,
+ ((CHARTNS,u'tick-marks-minor-inner'), None): cnv_boolean,
+ ((CHARTNS,u'tick-marks-minor-outer'), None): cnv_boolean,
+ ((CHARTNS,u'values-cell-range-address'), None): cnv_string,
+ ((CHARTNS,u'vertical'), None): cnv_boolean,
+ ((CHARTNS,u'visible'), None): cnv_boolean,
+ ((CONFIGNS,u'name'), None): cnv_string,
+ ((CONFIGNS,u'type'), None): cnv_configtype,
+ ((DR3DNS,u'ambient-color'), None): cnv_string,
+ ((DR3DNS,u'back-scale'), None): cnv_string,
+ ((DR3DNS,u'backface-culling'), None): cnv_string,
+ ((DR3DNS,u'center'), None): cnv_string,
+ ((DR3DNS,u'close-back'), None): cnv_boolean,
+ ((DR3DNS,u'close-front'), None): cnv_boolean,
+ ((DR3DNS,u'depth'), None): cnv_length,
+ ((DR3DNS,u'diffuse-color'), None): cnv_string,
+ ((DR3DNS,u'direction'), None): cnv_string,
+ ((DR3DNS,u'distance'), None): cnv_length,
+ ((DR3DNS,u'edge-rounding'), None): cnv_string,
+ ((DR3DNS,u'edge-rounding-mode'), None): cnv_string,
+ ((DR3DNS,u'emissive-color'), None): cnv_string,
+ ((DR3DNS,u'enabled'), None): cnv_boolean,
+ ((DR3DNS,u'end-angle'), None): cnv_string,
+ ((DR3DNS,u'focal-length'), None): cnv_length,
+ ((DR3DNS,u'horizontal-segments'), None): cnv_string,
+ ((DR3DNS,u'lighting-mode'), None): cnv_boolean,
+ ((DR3DNS,u'max-edge'), None): cnv_string,
+ ((DR3DNS,u'min-edge'), None): cnv_string,
+ ((DR3DNS,u'normals-direction'), None): cnv_string,
+ ((DR3DNS,u'normals-kind'), None): cnv_string,
+ ((DR3DNS,u'projection'), None): cnv_string,
+ ((DR3DNS,u'shade-mode'), None): cnv_string,
+ ((DR3DNS,u'shadow'), None): cnv_string,
+ ((DR3DNS,u'shadow-slant'), None): cnv_nonNegativeInteger,
+ ((DR3DNS,u'shininess'), None): cnv_string,
+ ((DR3DNS,u'size'), None): cnv_string,
+ ((DR3DNS,u'specular'), None): cnv_boolean,
+ ((DR3DNS,u'specular-color'), None): cnv_string,
+ ((DR3DNS,u'texture-filter'), None): cnv_string,
+ ((DR3DNS,u'texture-generation-mode-x'), None): cnv_string,
+ ((DR3DNS,u'texture-generation-mode-y'), None): cnv_string,
+ ((DR3DNS,u'texture-kind'), None): cnv_string,
+ ((DR3DNS,u'texture-mode'), None): cnv_string,
+ ((DR3DNS,u'transform'), None): cnv_string,
+ ((DR3DNS,u'vertical-segments'), None): cnv_string,
+ ((DR3DNS,u'vpn'), None): cnv_string,
+ ((DR3DNS,u'vrp'), None): cnv_string,
+ ((DR3DNS,u'vup'), None): cnv_string,
+ ((DRAWNS,u'align'), None): cnv_string,
+ ((DRAWNS,u'angle'), None): cnv_integer,
+ ((DRAWNS,u'archive'), None): cnv_string,
+ ((DRAWNS,u'auto-grow-height'), None): cnv_boolean,
+ ((DRAWNS,u'auto-grow-width'), None): cnv_boolean,
+ ((DRAWNS,u'background-size'), None): cnv_string,
+ ((DRAWNS,u'blue'), None): cnv_string,
+ ((DRAWNS,u'border'), None): cnv_string,
+ ((DRAWNS,u'caption-angle'), None): cnv_string,
+ ((DRAWNS,u'caption-angle-type'), None): cnv_string,
+ ((DRAWNS,u'caption-escape'), None): cnv_string,
+ ((DRAWNS,u'caption-escape-direction'), None): cnv_string,
+ ((DRAWNS,u'caption-fit-line-length'), None): cnv_boolean,
+ ((DRAWNS,u'caption-gap'), None): cnv_string,
+ ((DRAWNS,u'caption-line-length'), None): cnv_length,
+ ((DRAWNS,u'caption-point-x'), None): cnv_string,
+ ((DRAWNS,u'caption-point-y'), None): cnv_string,
+ ((DRAWNS,u'caption-type'), None): cnv_string,
+ ((DRAWNS,u'chain-next-name'), None): cnv_string,
+ ((DRAWNS,u'class-id'), None): cnv_string,
+ ((DRAWNS,u'class-names'), None): cnv_NCNames,
+ ((DRAWNS,u'code'), None): cnv_string,
+ ((DRAWNS,u'color'), None): cnv_string,
+ ((DRAWNS,u'color-inversion'), None): cnv_boolean,
+ ((DRAWNS,u'color-mode'), None): cnv_string,
+ ((DRAWNS,u'concave'), None): cnv_string,
+ ((DRAWNS,u'concentric-gradient-fill-allowed'), None): cnv_boolean,
+ ((DRAWNS,u'contrast'), None): cnv_string,
+ ((DRAWNS,u'control'), None): cnv_IDREF,
+ ((DRAWNS,u'copy-of'), None): cnv_string,
+ ((DRAWNS,u'corner-radius'), None): cnv_length,
+ ((DRAWNS,u'corners'), None): cnv_positiveInteger,
+ ((DRAWNS,u'cx'), None): cnv_string,
+ ((DRAWNS,u'cy'), None): cnv_string,
+ ((DRAWNS,u'data'), None): cnv_string,
+ ((DRAWNS,u'decimal-places'), None): cnv_string,
+ ((DRAWNS,u'display'), None): cnv_string,
+ ((DRAWNS,u'display-name'), None): cnv_string,
+ ((DRAWNS,u'distance'), None): cnv_string,
+ ((DRAWNS,u'dots1'), None): cnv_integer,
+ ((DRAWNS,u'dots1-length'), None): cnv_length,
+ ((DRAWNS,u'dots2'), None): cnv_integer,
+ ((DRAWNS,u'dots2-length'), None): cnv_length,
+ ((DRAWNS,u'end-angle'), None): cnv_double,
+ ((DRAWNS,u'end'), None): cnv_string,
+ ((DRAWNS,u'end-color'), None): cnv_string,
+ ((DRAWNS,u'end-glue-point'), None): cnv_nonNegativeInteger,
+ ((DRAWNS,u'end-guide'), None): cnv_length,
+ ((DRAWNS,u'end-intensity'), None): cnv_string,
+ ((DRAWNS,u'end-line-spacing-horizontal'), None): cnv_string,
+ ((DRAWNS,u'end-line-spacing-vertical'), None): cnv_string,
+ ((DRAWNS,u'end-shape'), None): cnv_IDREF,
+ ((DRAWNS,u'engine'), None): cnv_string,
+ ((DRAWNS,u'enhanced-path'), None): cnv_string,
+ ((DRAWNS,u'escape-direction'), None): cnv_string,
+ ((DRAWNS,u'extrusion-allowed'), None): cnv_boolean,
+ ((DRAWNS,u'extrusion-brightness'), None): cnv_string,
+ ((DRAWNS,u'extrusion'), None): cnv_boolean,
+ ((DRAWNS,u'extrusion-color'), None): cnv_boolean,
+ ((DRAWNS,u'extrusion-depth'), None): cnv_double,
+ ((DRAWNS,u'extrusion-diffusion'), None): cnv_string,
+ ((DRAWNS,u'extrusion-first-light-direction'), None): cnv_string,
+ ((DRAWNS,u'extrusion-first-light-harsh'), None): cnv_boolean,
+ ((DRAWNS,u'extrusion-first-light-level'), None): cnv_string,
+ ((DRAWNS,u'extrusion-light-face'), None): cnv_boolean,
+ ((DRAWNS,u'extrusion-metal'), None): cnv_boolean,
+ ((DRAWNS,u'extrusion-number-of-line-segments'), None): cnv_integer,
+ ((DRAWNS,u'extrusion-origin'), None): cnv_double,
+ ((DRAWNS,u'extrusion-rotation-angle'), None): cnv_double,
+ ((DRAWNS,u'extrusion-rotation-center'), None): cnv_string,
+ ((DRAWNS,u'extrusion-second-light-direction'), None): cnv_string,
+ ((DRAWNS,u'extrusion-second-light-harsh'), None): cnv_boolean,
+ ((DRAWNS,u'extrusion-second-light-level'), None): cnv_string,
+ ((DRAWNS,u'extrusion-shininess'), None): cnv_string,
+ ((DRAWNS,u'extrusion-skew'), None): cnv_double,
+ ((DRAWNS,u'extrusion-specularity'), None): cnv_string,
+ ((DRAWNS,u'extrusion-viewpoint'), None): cnv_string,
+ ((DRAWNS,u'fill'), None): cnv_string,
+ ((DRAWNS,u'fill-color'), None): cnv_string,
+ ((DRAWNS,u'fill-gradient-name'), None): cnv_string,
+ ((DRAWNS,u'fill-hatch-name'), None): cnv_string,
+ ((DRAWNS,u'fill-hatch-solid'), None): cnv_boolean,
+ ((DRAWNS,u'fill-image-height'), None): cnv_lengthorpercent,
+ ((DRAWNS,u'fill-image-name'), None): cnv_DrawNameRef,
+ ((DRAWNS,u'fill-image-ref-point'), None): cnv_string,
+ ((DRAWNS,u'fill-image-ref-point-x'), None): cnv_string,
+ ((DRAWNS,u'fill-image-ref-point-y'), None): cnv_string,
+ ((DRAWNS,u'fill-image-width'), None): cnv_lengthorpercent,
+ ((DRAWNS,u'filter-name'), None): cnv_string,
+ ((DRAWNS,u'fit-to-contour'), None): cnv_boolean,
+ ((DRAWNS,u'fit-to-size'), None): cnv_boolean,
+ ((DRAWNS,u'formula'), None): cnv_string,
+ ((DRAWNS,u'frame-display-border'), None): cnv_boolean,
+ ((DRAWNS,u'frame-display-scrollbar'), None): cnv_boolean,
+ ((DRAWNS,u'frame-margin-horizontal'), None): cnv_string,
+ ((DRAWNS,u'frame-margin-vertical'), None): cnv_string,
+ ((DRAWNS,u'frame-name'), None): cnv_string,
+ ((DRAWNS,u'gamma'), None): cnv_string,
+ ((DRAWNS,u'glue-point-leaving-directions'), None): cnv_string,
+ ((DRAWNS,u'glue-point-type'), None): cnv_string,
+ ((DRAWNS,u'glue-points'), None): cnv_string,
+ ((DRAWNS,u'gradient-step-count'), None): cnv_string,
+ ((DRAWNS,u'green'), None): cnv_string,
+ ((DRAWNS,u'guide-distance'), None): cnv_string,
+ ((DRAWNS,u'guide-overhang'), None): cnv_length,
+ ((DRAWNS,u'handle-mirror-horizontal'), None): cnv_boolean,
+ ((DRAWNS,u'handle-mirror-vertical'), None): cnv_boolean,
+ ((DRAWNS,u'handle-polar'), None): cnv_string,
+ ((DRAWNS,u'handle-position'), None): cnv_string,
+ ((DRAWNS,u'handle-radius-range-maximum'), None): cnv_string,
+ ((DRAWNS,u'handle-radius-range-minimum'), None): cnv_string,
+ ((DRAWNS,u'handle-range-x-maximum'), None): cnv_string,
+ ((DRAWNS,u'handle-range-x-minimum'), None): cnv_string,
+ ((DRAWNS,u'handle-range-y-maximum'), None): cnv_string,
+ ((DRAWNS,u'handle-range-y-minimum'), None): cnv_string,
+ ((DRAWNS,u'handle-switched'), None): cnv_boolean,
+# ((DRAWNS,u'id'), None): cnv_ID,
+# ((DRAWNS,u'id'), None): cnv_nonNegativeInteger, # ?? line 6581 in RNG
+ ((DRAWNS,u'id'), None): cnv_string,
+ ((DRAWNS,u'image-opacity'), None): cnv_string,
+ ((DRAWNS,u'kind'), None): cnv_string,
+ ((DRAWNS,u'layer'), None): cnv_string,
+ ((DRAWNS,u'line-distance'), None): cnv_string,
+ ((DRAWNS,u'line-skew'), None): cnv_string,
+ ((DRAWNS,u'luminance'), None): cnv_string,
+ ((DRAWNS,u'marker-end-center'), None): cnv_boolean,
+ ((DRAWNS,u'marker-end'), None): cnv_string,
+ ((DRAWNS,u'marker-end-width'), None): cnv_length,
+ ((DRAWNS,u'marker-start-center'), None): cnv_boolean,
+ ((DRAWNS,u'marker-start'), None): cnv_string,
+ ((DRAWNS,u'marker-start-width'), None): cnv_length,
+ ((DRAWNS,u'master-page-name'), None): cnv_StyleNameRef,
+ ((DRAWNS,u'may-script'), None): cnv_boolean,
+ ((DRAWNS,u'measure-align'), None): cnv_string,
+ ((DRAWNS,u'measure-vertical-align'), None): cnv_string,
+ ((DRAWNS,u'mime-type'), None): cnv_string,
+ ((DRAWNS,u'mirror-horizontal'), None): cnv_boolean,
+ ((DRAWNS,u'mirror-vertical'), None): cnv_boolean,
+ ((DRAWNS,u'modifiers'), None): cnv_string,
+ ((DRAWNS,u'name'), None): cnv_NCName,
+# ((DRAWNS,u'name'), None): cnv_string,
+ ((DRAWNS,u'nohref'), None): cnv_string,
+ ((DRAWNS,u'notify-on-update-of-ranges'), None): cnv_string,
+ ((DRAWNS,u'object'), None): cnv_string,
+ ((DRAWNS,u'ole-draw-aspect'), None): cnv_string,
+ ((DRAWNS,u'opacity'), None): cnv_string,
+ ((DRAWNS,u'opacity-name'), None): cnv_string,
+ ((DRAWNS,u'page-number'), None): cnv_positiveInteger,
+ ((DRAWNS,u'parallel'), None): cnv_boolean,
+ ((DRAWNS,u'path-stretchpoint-x'), None): cnv_double,
+ ((DRAWNS,u'path-stretchpoint-y'), None): cnv_double,
+ ((DRAWNS,u'placing'), None): cnv_string,
+ ((DRAWNS,u'points'), None): cnv_points,
+ ((DRAWNS,u'protected'), None): cnv_boolean,
+ ((DRAWNS,u'recreate-on-edit'), None): cnv_boolean,
+ ((DRAWNS,u'red'), None): cnv_string,
+ ((DRAWNS,u'rotation'), None): cnv_integer,
+ ((DRAWNS,u'secondary-fill-color'), None): cnv_string,
+ ((DRAWNS,u'shadow'), None): cnv_string,
+ ((DRAWNS,u'shadow-color'), None): cnv_string,
+ ((DRAWNS,u'shadow-offset-x'), None): cnv_length,
+ ((DRAWNS,u'shadow-offset-y'), None): cnv_length,
+ ((DRAWNS,u'shadow-opacity'), None): cnv_string,
+ ((DRAWNS,u'shape-id'), None): cnv_IDREF,
+ ((DRAWNS,u'sharpness'), None): cnv_string,
+ ((DRAWNS,u'show-unit'), None): cnv_boolean,
+ ((DRAWNS,u'start-angle'), None): cnv_double,
+ ((DRAWNS,u'start'), None): cnv_string,
+ ((DRAWNS,u'start-color'), None): cnv_string,
+ ((DRAWNS,u'start-glue-point'), None): cnv_nonNegativeInteger,
+ ((DRAWNS,u'start-guide'), None): cnv_length,
+ ((DRAWNS,u'start-intensity'), None): cnv_string,
+ ((DRAWNS,u'start-line-spacing-horizontal'), None): cnv_string,
+ ((DRAWNS,u'start-line-spacing-vertical'), None): cnv_string,
+ ((DRAWNS,u'start-shape'), None): cnv_IDREF,
+ ((DRAWNS,u'stroke'), None): cnv_string,
+ ((DRAWNS,u'stroke-dash'), None): cnv_string,
+ ((DRAWNS,u'stroke-dash-names'), None): cnv_string,
+ ((DRAWNS,u'stroke-linejoin'), None): cnv_string,
+ ((DRAWNS,u'style'), None): cnv_string,
+ ((DRAWNS,u'style-name'), None): cnv_StyleNameRef,
+ ((DRAWNS,u'symbol-color'), None): cnv_string,
+ ((DRAWNS,u'text-areas'), None): cnv_string,
+ ((DRAWNS,u'text-path-allowed'), None): cnv_boolean,
+ ((DRAWNS,u'text-path'), None): cnv_boolean,
+ ((DRAWNS,u'text-path-mode'), None): cnv_string,
+ ((DRAWNS,u'text-path-same-letter-heights'), None): cnv_boolean,
+ ((DRAWNS,u'text-path-scale'), None): cnv_string,
+ ((DRAWNS,u'text-rotate-angle'), None): cnv_double,
+ ((DRAWNS,u'text-style-name'), None): cnv_StyleNameRef,
+ ((DRAWNS,u'textarea-horizontal-align'), None): cnv_string,
+ ((DRAWNS,u'textarea-vertical-align'), None): cnv_string,
+ ((DRAWNS,u'tile-repeat-offset'), None): cnv_string,
+ ((DRAWNS,u'transform'), None): cnv_string,
+ ((DRAWNS,u'type'), None): cnv_string,
+ ((DRAWNS,u'unit'), None): cnv_string,
+ ((DRAWNS,u'value'), None): cnv_string,
+ ((DRAWNS,u'visible-area-height'), None): cnv_string,
+ ((DRAWNS,u'visible-area-left'), None): cnv_string,
+ ((DRAWNS,u'visible-area-top'), None): cnv_string,
+ ((DRAWNS,u'visible-area-width'), None): cnv_string,
+ ((DRAWNS,u'wrap-influence-on-position'), None): cnv_string,
+ ((DRAWNS,u'z-index'), None): cnv_nonNegativeInteger,
+ ((FONS,u'background-color'), None): cnv_string,
+ ((FONS,u'border-bottom'), None): cnv_string,
+ ((FONS,u'border'), None): cnv_string,
+ ((FONS,u'border-left'), None): cnv_string,
+ ((FONS,u'border-right'), None): cnv_string,
+ ((FONS,u'border-top'), None): cnv_string,
+ ((FONS,u'break-after'), None): cnv_string,
+ ((FONS,u'break-before'), None): cnv_string,
+ ((FONS,u'clip'), None): cnv_string,
+ ((FONS,u'color'), None): cnv_string,
+ ((FONS,u'column-count'), None): cnv_positiveInteger,
+ ((FONS,u'column-gap'), None): cnv_length,
+ ((FONS,u'country'), None): cnv_token,
+ ((FONS,u'end-indent'), None): cnv_length,
+ ((FONS,u'font-family'), None): cnv_string,
+ ((FONS,u'font-size'), None): cnv_string,
+ ((FONS,u'font-style'), None): cnv_string,
+ ((FONS,u'font-variant'), None): cnv_string,
+ ((FONS,u'font-weight'), None): cnv_string,
+ ((FONS,u'height'), None): cnv_string,
+ ((FONS,u'hyphenate'), None): cnv_boolean,
+ ((FONS,u'hyphenation-keep'), None): cnv_string,
+ ((FONS,u'hyphenation-ladder-count'), None): cnv_string,
+ ((FONS,u'hyphenation-push-char-count'), None): cnv_string,
+ ((FONS,u'hyphenation-remain-char-count'), None): cnv_string,
+ ((FONS,u'keep-together'), None): cnv_string,
+ ((FONS,u'keep-with-next'), None): cnv_string,
+ ((FONS,u'language'), None): cnv_token,
+ ((FONS,u'letter-spacing'), None): cnv_string,
+ ((FONS,u'line-height'), None): cnv_string,
+ ((FONS,u'margin-bottom'), None): cnv_string,
+ ((FONS,u'margin'), None): cnv_string,
+ ((FONS,u'margin-left'), None): cnv_string,
+ ((FONS,u'margin-right'), None): cnv_string,
+ ((FONS,u'margin-top'), None): cnv_string,
+ ((FONS,u'max-height'), None): cnv_string,
+ ((FONS,u'max-width'), None): cnv_string,
+ ((FONS,u'min-height'), None): cnv_length,
+ ((FONS,u'min-width'), None): cnv_string,
+ ((FONS,u'orphans'), None): cnv_string,
+ ((FONS,u'padding-bottom'), None): cnv_string,
+ ((FONS,u'padding'), None): cnv_string,
+ ((FONS,u'padding-left'), None): cnv_string,
+ ((FONS,u'padding-right'), None): cnv_string,
+ ((FONS,u'padding-top'), None): cnv_string,
+ ((FONS,u'page-height'), None): cnv_length,
+ ((FONS,u'page-width'), None): cnv_length,
+ ((FONS,u'space-after'), None): cnv_length,
+ ((FONS,u'space-before'), None): cnv_length,
+ ((FONS,u'start-indent'), None): cnv_length,
+ ((FONS,u'text-align'), None): cnv_string,
+ ((FONS,u'text-align-last'), None): cnv_string,
+ ((FONS,u'text-indent'), None): cnv_string,
+ ((FONS,u'text-shadow'), None): cnv_string,
+ ((FONS,u'text-transform'), None): cnv_string,
+ ((FONS,u'widows'), None): cnv_string,
+ ((FONS,u'width'), None): cnv_string,
+ ((FONS,u'wrap-option'), None): cnv_string,
+ ((FORMNS,u'allow-deletes'), None): cnv_boolean,
+ ((FORMNS,u'allow-inserts'), None): cnv_boolean,
+ ((FORMNS,u'allow-updates'), None): cnv_boolean,
+ ((FORMNS,u'apply-design-mode'), None): cnv_boolean,
+ ((FORMNS,u'apply-filter'), None): cnv_boolean,
+ ((FORMNS,u'auto-complete'), None): cnv_boolean,
+ ((FORMNS,u'automatic-focus'), None): cnv_boolean,
+ ((FORMNS,u'bound-column'), None): cnv_string,
+ ((FORMNS,u'button-type'), None): cnv_string,
+ ((FORMNS,u'command'), None): cnv_string,
+ ((FORMNS,u'command-type'), None): cnv_string,
+ ((FORMNS,u'control-implementation'), None): cnv_string,
+ ((FORMNS,u'convert-empty-to-null'), None): cnv_boolean,
+ ((FORMNS,u'current-selected'), None): cnv_boolean,
+ ((FORMNS,u'current-state'), None): cnv_string,
+# ((FORMNS,u'current-value'), None): cnv_date,
+# ((FORMNS,u'current-value'), None): cnv_double,
+ ((FORMNS,u'current-value'), None): cnv_string,
+# ((FORMNS,u'current-value'), None): cnv_time,
+ ((FORMNS,u'data-field'), None): cnv_string,
+ ((FORMNS,u'datasource'), None): cnv_string,
+ ((FORMNS,u'default-button'), None): cnv_boolean,
+ ((FORMNS,u'delay-for-repeat'), None): cnv_duration,
+ ((FORMNS,u'detail-fields'), None): cnv_string,
+ ((FORMNS,u'disabled'), None): cnv_boolean,
+ ((FORMNS,u'dropdown'), None): cnv_boolean,
+ ((FORMNS,u'echo-char'), None): cnv_string,
+ ((FORMNS,u'enctype'), None): cnv_string,
+ ((FORMNS,u'escape-processing'), None): cnv_boolean,
+ ((FORMNS,u'filter'), None): cnv_string,
+ ((FORMNS,u'focus-on-click'), None): cnv_boolean,
+ ((FORMNS,u'for'), None): cnv_string,
+ ((FORMNS,u'id'), None): cnv_ID,
+ ((FORMNS,u'ignore-result'), None): cnv_boolean,
+ ((FORMNS,u'image-align'), None): cnv_string,
+ ((FORMNS,u'image-data'), None): cnv_anyURI,
+ ((FORMNS,u'image-position'), None): cnv_string,
+ ((FORMNS,u'is-tristate'), None): cnv_boolean,
+ ((FORMNS,u'label'), None): cnv_string,
+ ((FORMNS,u'list-source'), None): cnv_string,
+ ((FORMNS,u'list-source-type'), None): cnv_string,
+ ((FORMNS,u'master-fields'), None): cnv_string,
+ ((FORMNS,u'max-length'), None): cnv_nonNegativeInteger,
+# ((FORMNS,u'max-value'), None): cnv_date,
+# ((FORMNS,u'max-value'), None): cnv_double,
+ ((FORMNS,u'max-value'), None): cnv_string,
+# ((FORMNS,u'max-value'), None): cnv_time,
+ ((FORMNS,u'method'), None): cnv_string,
+# ((FORMNS,u'min-value'), None): cnv_date,
+# ((FORMNS,u'min-value'), None): cnv_double,
+ ((FORMNS,u'min-value'), None): cnv_string,
+# ((FORMNS,u'min-value'), None): cnv_time,
+ ((FORMNS,u'multi-line'), None): cnv_boolean,
+ ((FORMNS,u'multiple'), None): cnv_boolean,
+ ((FORMNS,u'name'), None): cnv_string,
+ ((FORMNS,u'navigation-mode'), None): cnv_string,
+ ((FORMNS,u'order'), None): cnv_string,
+ ((FORMNS,u'orientation'), None): cnv_string,
+ ((FORMNS,u'page-step-size'), None): cnv_positiveInteger,
+ ((FORMNS,u'printable'), None): cnv_boolean,
+ ((FORMNS,u'property-name'), None): cnv_string,
+ ((FORMNS,u'readonly'), None): cnv_boolean,
+ ((FORMNS,u'selected'), None): cnv_boolean,
+ ((FORMNS,u'size'), None): cnv_nonNegativeInteger,
+ ((FORMNS,u'state'), None): cnv_string,
+ ((FORMNS,u'step-size'), None): cnv_positiveInteger,
+ ((FORMNS,u'tab-cycle'), None): cnv_string,
+ ((FORMNS,u'tab-index'), None): cnv_nonNegativeInteger,
+ ((FORMNS,u'tab-stop'), None): cnv_boolean,
+ ((FORMNS,u'text-style-name'), None): cnv_StyleNameRef,
+ ((FORMNS,u'title'), None): cnv_string,
+ ((FORMNS,u'toggle'), None): cnv_boolean,
+ ((FORMNS,u'validation'), None): cnv_boolean,
+# ((FORMNS,u'value'), None): cnv_date,
+# ((FORMNS,u'value'), None): cnv_double,
+ ((FORMNS,u'value'), None): cnv_string,
+# ((FORMNS,u'value'), None): cnv_time,
+ ((FORMNS,u'visual-effect'), None): cnv_string,
+ ((FORMNS,u'xforms-list-source'), None): cnv_string,
+ ((FORMNS,u'xforms-submission'), None): cnv_string,
+ ((MANIFESTNS,'algorithm-name'), None): cnv_string,
+ ((MANIFESTNS,'checksum'), None): cnv_string,
+ ((MANIFESTNS,'checksum-type'), None): cnv_string,
+ ((MANIFESTNS,'full-path'), None): cnv_string,
+ ((MANIFESTNS,'initialisation-vector'), None): cnv_string,
+ ((MANIFESTNS,'iteration-count'), None): cnv_nonNegativeInteger,
+ ((MANIFESTNS,'key-derivation-name'), None): cnv_string,
+ ((MANIFESTNS,'manifest:media-type'), None): cnv_string,
+ ((MANIFESTNS,'salt'), None): cnv_string,
+ ((MANIFESTNS,'size'), None): cnv_nonNegativeInteger,
+ ((METANS,u'cell-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'character-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'date'), None): cnv_dateTime,
+ ((METANS,u'delay'), None): cnv_duration,
+ ((METANS,u'draw-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'frame-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'image-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'name'), None): cnv_string,
+ ((METANS,u'non-whitespace-character-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'object-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'ole-object-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'page-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'paragraph-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'row-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'sentence-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'syllable-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'table-count'), None): cnv_nonNegativeInteger,
+ ((METANS,u'value-type'), None): cnv_metavaluetype,
+ ((METANS,u'word-count'), None): cnv_nonNegativeInteger,
+ ((NUMBERNS,u'automatic-order'), None): cnv_boolean,
+ ((NUMBERNS,u'calendar'), None): cnv_string,
+ ((NUMBERNS,u'country'), None): cnv_token,
+ ((NUMBERNS,u'decimal-places'), None): cnv_integer,
+ ((NUMBERNS,u'decimal-replacement'), None): cnv_string,
+ ((NUMBERNS,u'denominator-value'), None): cnv_integer,
+ ((NUMBERNS,u'display-factor'), None): cnv_double,
+ ((NUMBERNS,u'format-source'), None): cnv_string,
+ ((NUMBERNS,u'grouping'), None): cnv_boolean,
+ ((NUMBERNS,u'language'), None): cnv_token,
+ ((NUMBERNS,u'min-denominator-digits'), None): cnv_integer,
+ ((NUMBERNS,u'min-exponent-digits'), None): cnv_integer,
+ ((NUMBERNS,u'min-integer-digits'), None): cnv_integer,
+ ((NUMBERNS,u'min-numerator-digits'), None): cnv_integer,
+ ((NUMBERNS,u'position'), None): cnv_integer,
+ ((NUMBERNS,u'possessive-form'), None): cnv_boolean,
+ ((NUMBERNS,u'style'), None): cnv_string,
+ ((NUMBERNS,u'textual'), None): cnv_boolean,
+ ((NUMBERNS,u'title'), None): cnv_string,
+ ((NUMBERNS,u'transliteration-country'), None): cnv_token,
+ ((NUMBERNS,u'transliteration-format'), None): cnv_string,
+ ((NUMBERNS,u'transliteration-language'), None): cnv_token,
+ ((NUMBERNS,u'transliteration-style'), None): cnv_string,
+ ((NUMBERNS,u'truncate-on-overflow'), None): cnv_boolean,
+ ((OFFICENS,u'automatic-update'), None): cnv_boolean,
+ ((OFFICENS,u'boolean-value'), None): cnv_boolean,
+ ((OFFICENS,u'conversion-mode'), None): cnv_string,
+ ((OFFICENS,u'currency'), None): cnv_string,
+ ((OFFICENS,u'date-value'), None): cnv_dateTime,
+ ((OFFICENS,u'dde-application'), None): cnv_string,
+ ((OFFICENS,u'dde-item'), None): cnv_string,
+ ((OFFICENS,u'dde-topic'), None): cnv_string,
+ ((OFFICENS,u'display'), None): cnv_boolean,
+ ((OFFICENS,u'mimetype'), None): cnv_string,
+ ((OFFICENS,u'name'), None): cnv_string,
+ ((OFFICENS,u'process-content'), None): cnv_boolean,
+ ((OFFICENS,u'server-map'), None): cnv_boolean,
+ ((OFFICENS,u'string-value'), None): cnv_string,
+ ((OFFICENS,u'target-frame'), None): cnv_string,
+ ((OFFICENS,u'target-frame-name'), None): cnv_string,
+ ((OFFICENS,u'time-value'), None): cnv_duration,
+ ((OFFICENS,u'value'), None): cnv_double,
+ ((OFFICENS,u'value-type'), None): cnv_string,
+ ((OFFICENS,u'version'), None): cnv_string,
+ ((PRESENTATIONNS,u'action'), None): cnv_string,
+ ((PRESENTATIONNS,u'animations'), None): cnv_string,
+ ((PRESENTATIONNS,u'background-objects-visible'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'background-visible'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'class'), None): cnv_string,
+ ((PRESENTATIONNS,u'class-names'), None): cnv_NCNames,
+ ((PRESENTATIONNS,u'delay'), None): cnv_duration,
+ ((PRESENTATIONNS,u'direction'), None): cnv_string,
+ ((PRESENTATIONNS,u'display-date-time'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'display-footer'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'display-header'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'display-page-number'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'duration'), None): cnv_string,
+ ((PRESENTATIONNS,u'effect'), None): cnv_string,
+ ((PRESENTATIONNS,u'endless'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'force-manual'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'full-screen'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'group-id'), None): cnv_string,
+ ((PRESENTATIONNS,u'master-element'), None): cnv_IDREF,
+ ((PRESENTATIONNS,u'mouse-as-pen'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'mouse-visible'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'name'), None): cnv_string,
+ ((PRESENTATIONNS,u'node-type'), None): cnv_string,
+ ((PRESENTATIONNS,u'object'), None): cnv_string,
+ ((PRESENTATIONNS,u'pages'), None): cnv_string,
+ ((PRESENTATIONNS,u'path-id'), None): cnv_string,
+ ((PRESENTATIONNS,u'pause'), None): cnv_duration,
+ ((PRESENTATIONNS,u'placeholder'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'play-full'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'presentation-page-layout-name'), None): cnv_StyleNameRef,
+ ((PRESENTATIONNS,u'preset-class'), None): cnv_string,
+ ((PRESENTATIONNS,u'preset-id'), None): cnv_string,
+ ((PRESENTATIONNS,u'preset-sub-type'), None): cnv_string,
+ ((PRESENTATIONNS,u'show'), None): cnv_string,
+ ((PRESENTATIONNS,u'show-logo'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'source'), None): cnv_string,
+ ((PRESENTATIONNS,u'speed'), None): cnv_string,
+ ((PRESENTATIONNS,u'start-page'), None): cnv_string,
+ ((PRESENTATIONNS,u'start-scale'), None): cnv_string,
+ ((PRESENTATIONNS,u'start-with-navigator'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'stay-on-top'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'style-name'), None): cnv_StyleNameRef,
+ ((PRESENTATIONNS,u'transition-on-click'), None): cnv_string,
+ ((PRESENTATIONNS,u'transition-speed'), None): cnv_string,
+ ((PRESENTATIONNS,u'transition-style'), None): cnv_string,
+ ((PRESENTATIONNS,u'transition-type'), None): cnv_string,
+ ((PRESENTATIONNS,u'use-date-time-name'), None): cnv_string,
+ ((PRESENTATIONNS,u'use-footer-name'), None): cnv_string,
+ ((PRESENTATIONNS,u'use-header-name'), None): cnv_string,
+ ((PRESENTATIONNS,u'user-transformed'), None): cnv_boolean,
+ ((PRESENTATIONNS,u'verb'), None): cnv_nonNegativeInteger,
+ ((PRESENTATIONNS,u'visibility'), None): cnv_string,
+ ((SCRIPTNS,u'event-name'), None): cnv_string,
+ ((SCRIPTNS,u'language'), None): cnv_string,
+ ((SCRIPTNS,u'macro-name'), None): cnv_string,
+ ((SMILNS,u'accelerate'), None): cnv_double,
+ ((SMILNS,u'accumulate'), None): cnv_string,
+ ((SMILNS,u'additive'), None): cnv_string,
+ ((SMILNS,u'attributeName'), None): cnv_string,
+ ((SMILNS,u'autoReverse'), None): cnv_boolean,
+ ((SMILNS,u'begin'), None): cnv_string,
+ ((SMILNS,u'by'), None): cnv_string,
+ ((SMILNS,u'calcMode'), None): cnv_string,
+ ((SMILNS,u'decelerate'), None): cnv_double,
+ ((SMILNS,u'direction'), None): cnv_string,
+ ((SMILNS,u'dur'), None): cnv_string,
+ ((SMILNS,u'end'), None): cnv_string,
+ ((SMILNS,u'endsync'), None): cnv_string,
+ ((SMILNS,u'fadeColor'), None): cnv_string,
+ ((SMILNS,u'fill'), None): cnv_string,
+ ((SMILNS,u'fillDefault'), None): cnv_string,
+ ((SMILNS,u'from'), None): cnv_string,
+ ((SMILNS,u'keySplines'), None): cnv_string,
+ ((SMILNS,u'keyTimes'), None): cnv_string,
+ ((SMILNS,u'mode'), None): cnv_string,
+ ((SMILNS,u'repeatCount'), None): cnv_nonNegativeInteger,
+ ((SMILNS,u'repeatDur'), None): cnv_string,
+ ((SMILNS,u'restart'), None): cnv_string,
+ ((SMILNS,u'restartDefault'), None): cnv_string,
+ ((SMILNS,u'subtype'), None): cnv_string,
+ ((SMILNS,u'targetElement'), None): cnv_IDREF,
+ ((SMILNS,u'to'), None): cnv_string,
+ ((SMILNS,u'type'), None): cnv_string,
+ ((SMILNS,u'values'), None): cnv_string,
+ ((STYLENS,u'adjustment'), None): cnv_string,
+ ((STYLENS,u'apply-style-name'), None): cnv_StyleNameRef,
+ ((STYLENS,u'auto-text-indent'), None): cnv_boolean,
+ ((STYLENS,u'auto-update'), None): cnv_boolean,
+ ((STYLENS,u'background-transparency'), None): cnv_string,
+ ((STYLENS,u'base-cell-address'), None): cnv_string,
+ ((STYLENS,u'border-line-width-bottom'), None): cnv_string,
+ ((STYLENS,u'border-line-width'), None): cnv_string,
+ ((STYLENS,u'border-line-width-left'), None): cnv_string,
+ ((STYLENS,u'border-line-width-right'), None): cnv_string,
+ ((STYLENS,u'border-line-width-top'), None): cnv_string,
+ ((STYLENS,u'cell-protect'), None): cnv_string,
+ ((STYLENS,u'char'), None): cnv_string,
+ ((STYLENS,u'class'), None): cnv_string,
+ ((STYLENS,u'color'), None): cnv_string,
+ ((STYLENS,u'column-width'), None): cnv_string,
+ ((STYLENS,u'condition'), None): cnv_string,
+ ((STYLENS,u'country-asian'), None): cnv_string,
+ ((STYLENS,u'country-complex'), None): cnv_string,
+ ((STYLENS,u'data-style-name'), None): cnv_StyleNameRef,
+ ((STYLENS,u'decimal-places'), None): cnv_string,
+ ((STYLENS,u'default-outline-level'), None): cnv_positiveInteger,
+ ((STYLENS,u'diagonal-bl-tr'), None): cnv_string,
+ ((STYLENS,u'diagonal-bl-tr-widths'), None): cnv_string,
+ ((STYLENS,u'diagonal-tl-br'), None): cnv_string,
+ ((STYLENS,u'diagonal-tl-br-widths'), None): cnv_string,
+ ((STYLENS,u'direction'), None): cnv_string,
+ ((STYLENS,u'display'), None): cnv_boolean,
+ ((STYLENS,u'display-name'), None): cnv_string,
+ ((STYLENS,u'distance-after-sep'), None): cnv_length,
+ ((STYLENS,u'distance-before-sep'), None): cnv_length,
+ ((STYLENS,u'distance'), None): cnv_length,
+ ((STYLENS,u'dynamic-spacing'), None): cnv_boolean,
+ ((STYLENS,u'editable'), None): cnv_boolean,
+ ((STYLENS,u'family'), None): cnv_family,
+ ((STYLENS,u'filter-name'), None): cnv_string,
+ ((STYLENS,u'first-page-number'), None): cnv_string,
+ ((STYLENS,u'flow-with-text'), None): cnv_boolean,
+ ((STYLENS,u'font-adornments'), None): cnv_string,
+ ((STYLENS,u'font-charset'), None): cnv_string,
+ ((STYLENS,u'font-family-asian'), None): cnv_string,
+ ((STYLENS,u'font-family-complex'), None): cnv_string,
+ ((STYLENS,u'font-family-generic-asian'), None): cnv_string,
+ ((STYLENS,u'font-family-generic'), None): cnv_string,
+ ((STYLENS,u'font-family-generic-complex'), None): cnv_string,
+ ((STYLENS,u'font-independent-line-spacing'), None): cnv_boolean,
+ ((STYLENS,u'font-name-asian'), None): cnv_string,
+ ((STYLENS,u'font-name'), None): cnv_string,
+ ((STYLENS,u'font-name-complex'), None): cnv_string,
+ ((STYLENS,u'font-pitch-asian'), None): cnv_string,
+ ((STYLENS,u'font-pitch'), None): cnv_string,
+ ((STYLENS,u'font-pitch-complex'), None): cnv_string,
+ ((STYLENS,u'font-relief'), None): cnv_string,
+ ((STYLENS,u'font-size-asian'), None): cnv_string,
+ ((STYLENS,u'font-size-complex'), None): cnv_string,
+ ((STYLENS,u'font-size-rel-asian'), None): cnv_length,
+ ((STYLENS,u'font-size-rel'), None): cnv_length,
+ ((STYLENS,u'font-size-rel-complex'), None): cnv_length,
+ ((STYLENS,u'font-style-asian'), None): cnv_string,
+ ((STYLENS,u'font-style-complex'), None): cnv_string,
+ ((STYLENS,u'font-style-name-asian'), None): cnv_string,
+ ((STYLENS,u'font-style-name'), None): cnv_string,
+ ((STYLENS,u'font-style-name-complex'), None): cnv_string,
+ ((STYLENS,u'font-weight-asian'), None): cnv_string,
+ ((STYLENS,u'font-weight-complex'), None): cnv_string,
+ ((STYLENS,u'footnote-max-height'), None): cnv_length,
+ ((STYLENS,u'glyph-orientation-vertical'), None): cnv_string,
+ ((STYLENS,u'height'), None): cnv_string,
+ ((STYLENS,u'horizontal-pos'), None): cnv_string,
+ ((STYLENS,u'horizontal-rel'), None): cnv_string,
+ ((STYLENS,u'justify-single-word'), None): cnv_boolean,
+ ((STYLENS,u'language-asian'), None): cnv_string,
+ ((STYLENS,u'language-complex'), None): cnv_string,
+ ((STYLENS,u'layout-grid-base-height'), None): cnv_length,
+ ((STYLENS,u'layout-grid-color'), None): cnv_string,
+ ((STYLENS,u'layout-grid-display'), None): cnv_boolean,
+ ((STYLENS,u'layout-grid-lines'), None): cnv_string,
+ ((STYLENS,u'layout-grid-mode'), None): cnv_string,
+ ((STYLENS,u'layout-grid-print'), None): cnv_boolean,
+ ((STYLENS,u'layout-grid-ruby-below'), None): cnv_boolean,
+ ((STYLENS,u'layout-grid-ruby-height'), None): cnv_length,
+ ((STYLENS,u'leader-char'), None): cnv_string,
+ ((STYLENS,u'leader-color'), None): cnv_string,
+ ((STYLENS,u'leader-style'), None): cnv_string,
+ ((STYLENS,u'leader-text'), None): cnv_string,
+ ((STYLENS,u'leader-text-style'), None): cnv_StyleNameRef,
+ ((STYLENS,u'leader-type'), None): cnv_string,
+ ((STYLENS,u'leader-width'), None): cnv_string,
+ ((STYLENS,u'legend-expansion-aspect-ratio'), None): cnv_double,
+ ((STYLENS,u'legend-expansion'), None): cnv_string,
+ ((STYLENS,u'length'), None): cnv_positiveInteger,
+ ((STYLENS,u'letter-kerning'), None): cnv_boolean,
+ ((STYLENS,u'line-break'), None): cnv_string,
+ ((STYLENS,u'line-height-at-least'), None): cnv_string,
+ ((STYLENS,u'line-spacing'), None): cnv_length,
+ ((STYLENS,u'line-style'), None): cnv_string,
+ ((STYLENS,u'lines'), None): cnv_positiveInteger,
+ ((STYLENS,u'list-style-name'), None): cnv_StyleNameRef,
+ ((STYLENS,u'master-page-name'), None): cnv_StyleNameRef,
+ ((STYLENS,u'may-break-between-rows'), None): cnv_boolean,
+ ((STYLENS,u'min-row-height'), None): cnv_string,
+ ((STYLENS,u'mirror'), None): cnv_string,
+ ((STYLENS,u'name'), None): cnv_NCName,
+ ((STYLENS,u'name'), (STYLENS,u'font-face')): cnv_string,
+ ((STYLENS,u'next-style-name'), None): cnv_StyleNameRef,
+ ((STYLENS,u'num-format'), None): cnv_string,
+ ((STYLENS,u'num-letter-sync'), None): cnv_boolean,
+ ((STYLENS,u'num-prefix'), None): cnv_string,
+ ((STYLENS,u'num-suffix'), None): cnv_string,
+ ((STYLENS,u'number-wrapped-paragraphs'), None): cnv_string,
+ ((STYLENS,u'overflow-behavior'), None): cnv_string,
+ ((STYLENS,u'page-layout-name'), None): cnv_StyleNameRef,
+ ((STYLENS,u'page-number'), None): cnv_string,
+ ((STYLENS,u'page-usage'), None): cnv_string,
+ ((STYLENS,u'paper-tray-name'), None): cnv_string,
+ ((STYLENS,u'parent-style-name'), None): cnv_StyleNameRef,
+ ((STYLENS,u'position'), None): cnv_position,
+ ((STYLENS,u'print'), None): cnv_string,
+ ((STYLENS,u'print-content'), None): cnv_boolean,
+ ((STYLENS,u'print-orientation'), None): cnv_string,
+ ((STYLENS,u'print-page-order'), None): cnv_string,
+ ((STYLENS,u'protect'), None): cnv_boolean,
+ ((STYLENS,u'punctuation-wrap'), None): cnv_string,
+ ((STYLENS,u'register-true'), None): cnv_boolean,
+ ((STYLENS,u'register-truth-ref-style-name'), None): cnv_string,
+ ((STYLENS,u'rel-column-width'), None): cnv_string,
+ ((STYLENS,u'rel-height'), None): cnv_string,
+ ((STYLENS,u'rel-width'), None): cnv_string,
+ ((STYLENS,u'repeat'), None): cnv_string,
+ ((STYLENS,u'repeat-content'), None): cnv_boolean,
+ ((STYLENS,u'rotation-align'), None): cnv_string,
+ ((STYLENS,u'rotation-angle'), None): cnv_string,
+ ((STYLENS,u'row-height'), None): cnv_string,
+ ((STYLENS,u'ruby-align'), None): cnv_string,
+ ((STYLENS,u'ruby-position'), None): cnv_string,
+ ((STYLENS,u'run-through'), None): cnv_string,
+ ((STYLENS,u'scale-to'), None): cnv_string,
+ ((STYLENS,u'scale-to-pages'), None): cnv_string,
+ ((STYLENS,u'script-type'), None): cnv_string,
+ ((STYLENS,u'shadow'), None): cnv_string,
+ ((STYLENS,u'shrink-to-fit'), None): cnv_boolean,
+ ((STYLENS,u'snap-to-layout-grid'), None): cnv_boolean,
+ ((STYLENS,u'style'), None): cnv_string,
+ ((STYLENS,u'style-name'), None): cnv_StyleNameRef,
+ ((STYLENS,u'tab-stop-distance'), None): cnv_string,
+ ((STYLENS,u'table-centering'), None): cnv_string,
+ ((STYLENS,u'text-align-source'), None): cnv_string,
+ ((STYLENS,u'text-autospace'), None): cnv_string,
+ ((STYLENS,u'text-blinking'), None): cnv_boolean,
+ ((STYLENS,u'text-combine'), None): cnv_string,
+ ((STYLENS,u'text-combine-end-char'), None): cnv_string,
+ ((STYLENS,u'text-combine-start-char'), None): cnv_string,
+ ((STYLENS,u'text-emphasize'), None): cnv_string,
+ ((STYLENS,u'text-line-through-color'), None): cnv_string,
+ ((STYLENS,u'text-line-through-mode'), None): cnv_string,
+ ((STYLENS,u'text-line-through-style'), None): cnv_string,
+ ((STYLENS,u'text-line-through-text'), None): cnv_string,
+ ((STYLENS,u'text-line-through-text-style'), None): cnv_string,
+ ((STYLENS,u'text-line-through-type'), None): cnv_string,
+ ((STYLENS,u'text-line-through-width'), None): cnv_string,
+ ((STYLENS,u'text-outline'), None): cnv_boolean,
+ ((STYLENS,u'text-position'), None): cnv_string,
+ ((STYLENS,u'text-rotation-angle'), None): cnv_string,
+ ((STYLENS,u'text-rotation-scale'), None): cnv_string,
+ ((STYLENS,u'text-scale'), None): cnv_string,
+ ((STYLENS,u'text-underline-color'), None): cnv_string,
+ ((STYLENS,u'text-underline-mode'), None): cnv_string,
+ ((STYLENS,u'text-underline-style'), None): cnv_string,
+ ((STYLENS,u'text-underline-type'), None): cnv_string,
+ ((STYLENS,u'text-underline-width'), None): cnv_string,
+ ((STYLENS,u'type'), None): cnv_string,
+ ((STYLENS,u'use-optimal-column-width'), None): cnv_boolean,
+ ((STYLENS,u'use-optimal-row-height'), None): cnv_boolean,
+ ((STYLENS,u'use-window-font-color'), None): cnv_boolean,
+ ((STYLENS,u'vertical-align'), None): cnv_string,
+ ((STYLENS,u'vertical-pos'), None): cnv_string,
+ ((STYLENS,u'vertical-rel'), None): cnv_string,
+ ((STYLENS,u'volatile'), None): cnv_boolean,
+ ((STYLENS,u'width'), None): cnv_string,
+ ((STYLENS,u'wrap'), None): cnv_string,
+ ((STYLENS,u'wrap-contour'), None): cnv_boolean,
+ ((STYLENS,u'wrap-contour-mode'), None): cnv_string,
+ ((STYLENS,u'wrap-dynamic-treshold'), None): cnv_string,
+ ((STYLENS,u'writing-mode-automatic'), None): cnv_boolean,
+ ((STYLENS,u'writing-mode'), None): cnv_string,
+ ((SVGNS,u'accent-height'), None): cnv_integer,
+ ((SVGNS,u'alphabetic'), None): cnv_integer,
+ ((SVGNS,u'ascent'), None): cnv_integer,
+ ((SVGNS,u'bbox'), None): cnv_string,
+ ((SVGNS,u'cap-height'), None): cnv_integer,
+ ((SVGNS,u'cx'), None): cnv_string,
+ ((SVGNS,u'cy'), None): cnv_string,
+ ((SVGNS,u'd'), None): cnv_string,
+ ((SVGNS,u'descent'), None): cnv_integer,
+ ((SVGNS,u'fill-rule'), None): cnv_string,
+ ((SVGNS,u'font-family'), None): cnv_string,
+ ((SVGNS,u'font-size'), None): cnv_string,
+ ((SVGNS,u'font-stretch'), None): cnv_string,
+ ((SVGNS,u'font-style'), None): cnv_string,
+ ((SVGNS,u'font-variant'), None): cnv_string,
+ ((SVGNS,u'font-weight'), None): cnv_string,
+ ((SVGNS,u'fx'), None): cnv_string,
+ ((SVGNS,u'fy'), None): cnv_string,
+ ((SVGNS,u'gradientTransform'), None): cnv_string,
+ ((SVGNS,u'gradientUnits'), None): cnv_string,
+ ((SVGNS,u'hanging'), None): cnv_integer,
+ ((SVGNS,u'height'), None): cnv_length,
+ ((SVGNS,u'ideographic'), None): cnv_integer,
+ ((SVGNS,u'mathematical'), None): cnv_integer,
+ ((SVGNS,u'name'), None): cnv_string,
+ ((SVGNS,u'offset'), None): cnv_string,
+ ((SVGNS,u'origin'), None): cnv_string,
+ ((SVGNS,u'overline-position'), None): cnv_integer,
+ ((SVGNS,u'overline-thickness'), None): cnv_integer,
+ ((SVGNS,u'panose-1'), None): cnv_string,
+ ((SVGNS,u'path'), None): cnv_string,
+ ((SVGNS,u'r'), None): cnv_length,
+ ((SVGNS,u'rx'), None): cnv_length,
+ ((SVGNS,u'ry'), None): cnv_length,
+ ((SVGNS,u'slope'), None): cnv_integer,
+ ((SVGNS,u'spreadMethod'), None): cnv_string,
+ ((SVGNS,u'stemh'), None): cnv_integer,
+ ((SVGNS,u'stemv'), None): cnv_integer,
+ ((SVGNS,u'stop-color'), None): cnv_string,
+ ((SVGNS,u'stop-opacity'), None): cnv_double,
+ ((SVGNS,u'strikethrough-position'), None): cnv_integer,
+ ((SVGNS,u'strikethrough-thickness'), None): cnv_integer,
+ ((SVGNS,u'string'), None): cnv_string,
+ ((SVGNS,u'stroke-color'), None): cnv_string,
+ ((SVGNS,u'stroke-opacity'), None): cnv_string,
+ ((SVGNS,u'stroke-width'), None): cnv_length,
+ ((SVGNS,u'type'), None): cnv_string,
+ ((SVGNS,u'underline-position'), None): cnv_integer,
+ ((SVGNS,u'underline-thickness'), None): cnv_integer,
+ ((SVGNS,u'unicode-range'), None): cnv_string,
+ ((SVGNS,u'units-per-em'), None): cnv_integer,
+ ((SVGNS,u'v-alphabetic'), None): cnv_integer,
+ ((SVGNS,u'v-hanging'), None): cnv_integer,
+ ((SVGNS,u'v-ideographic'), None): cnv_integer,
+ ((SVGNS,u'v-mathematical'), None): cnv_integer,
+ ((SVGNS,u'viewBox'), None): cnv_viewbox,
+ ((SVGNS,u'width'), None): cnv_length,
+ ((SVGNS,u'widths'), None): cnv_string,
+ ((SVGNS,u'x'), None): cnv_length,
+ ((SVGNS,u'x-height'), None): cnv_integer,
+ ((SVGNS,u'x1'), None): cnv_lengthorpercent,
+ ((SVGNS,u'x2'), None): cnv_lengthorpercent,
+ ((SVGNS,u'y'), None): cnv_length,
+ ((SVGNS,u'y1'), None): cnv_lengthorpercent,
+ ((SVGNS,u'y2'), None): cnv_lengthorpercent,
+ ((TABLENS,u'acceptance-state'), None): cnv_string,
+ ((TABLENS,u'add-empty-lines'), None): cnv_boolean,
+ ((TABLENS,u'algorithm'), None): cnv_string,
+ ((TABLENS,u'align'), None): cnv_string,
+ ((TABLENS,u'allow-empty-cell'), None): cnv_boolean,
+ ((TABLENS,u'application-data'), None): cnv_string,
+ ((TABLENS,u'automatic-find-labels'), None): cnv_boolean,
+ ((TABLENS,u'base-cell-address'), None): cnv_string,
+ ((TABLENS,u'bind-styles-to-content'), None): cnv_boolean,
+ ((TABLENS,u'border-color'), None): cnv_string,
+ ((TABLENS,u'border-model'), None): cnv_string,
+ ((TABLENS,u'buttons'), None): cnv_string,
+ ((TABLENS,u'buttons'), None): cnv_string,
+ ((TABLENS,u'case-sensitive'), None): cnv_boolean,
+ ((TABLENS,u'case-sensitive'), None): cnv_string,
+ ((TABLENS,u'cell-address'), None): cnv_string,
+ ((TABLENS,u'cell-range-address'), None): cnv_string,
+ ((TABLENS,u'cell-range-address'), None): cnv_string,
+ ((TABLENS,u'cell-range'), None): cnv_string,
+ ((TABLENS,u'column'), None): cnv_integer,
+ ((TABLENS,u'comment'), None): cnv_string,
+ ((TABLENS,u'condition'), None): cnv_string,
+ ((TABLENS,u'condition-source'), None): cnv_string,
+ ((TABLENS,u'condition-source-range-address'), None): cnv_string,
+ ((TABLENS,u'contains-error'), None): cnv_boolean,
+ ((TABLENS,u'contains-header'), None): cnv_boolean,
+ ((TABLENS,u'content-validation-name'), None): cnv_string,
+ ((TABLENS,u'copy-back'), None): cnv_boolean,
+ ((TABLENS,u'copy-formulas'), None): cnv_boolean,
+ ((TABLENS,u'copy-styles'), None): cnv_boolean,
+ ((TABLENS,u'count'), None): cnv_positiveInteger,
+ ((TABLENS,u'country'), None): cnv_token,
+ ((TABLENS,u'data-cell-range-address'), None): cnv_string,
+ ((TABLENS,u'data-field'), None): cnv_string,
+ ((TABLENS,u'data-type'), None): cnv_string,
+ ((TABLENS,u'database-name'), None): cnv_string,
+ ((TABLENS,u'database-table-name'), None): cnv_string,
+ ((TABLENS,u'date-end'), None): cnv_string,
+ ((TABLENS,u'date-start'), None): cnv_string,
+ ((TABLENS,u'date-value-type'), None): cnv_date,
+ ((TABLENS,u'default-cell-style-name'), None): cnv_StyleNameRef,
+ ((TABLENS,u'direction'), None): cnv_string,
+ ((TABLENS,u'display-border'), None): cnv_boolean,
+ ((TABLENS,u'display'), None): cnv_boolean,
+ ((TABLENS,u'display-duplicates'), None): cnv_boolean,
+ ((TABLENS,u'display-filter-buttons'), None): cnv_boolean,
+ ((TABLENS,u'display-list'), None): cnv_string,
+ ((TABLENS,u'display-member-mode'), None): cnv_string,
+ ((TABLENS,u'drill-down-on-double-click'), None): cnv_boolean,
+ ((TABLENS,u'enabled'), None): cnv_boolean,
+ ((TABLENS,u'end-cell-address'), None): cnv_string,
+ ((TABLENS,u'end'), None): cnv_string,
+ ((TABLENS,u'end-column'), None): cnv_integer,
+ ((TABLENS,u'end-position'), None): cnv_integer,
+ ((TABLENS,u'end-row'), None): cnv_integer,
+ ((TABLENS,u'end-table'), None): cnv_integer,
+ ((TABLENS,u'end-x'), None): cnv_length,
+ ((TABLENS,u'end-y'), None): cnv_length,
+ ((TABLENS,u'execute'), None): cnv_boolean,
+ ((TABLENS,u'expression'), None): cnv_string,
+ ((TABLENS,u'field-name'), None): cnv_string,
+ ((TABLENS,u'field-number'), None): cnv_nonNegativeInteger,
+ ((TABLENS,u'field-number'), None): cnv_string,
+ ((TABLENS,u'filter-name'), None): cnv_string,
+ ((TABLENS,u'filter-options'), None): cnv_string,
+ ((TABLENS,u'formula'), None): cnv_string,
+ ((TABLENS,u'function'), None): cnv_string,
+ ((TABLENS,u'function'), None): cnv_string,
+ ((TABLENS,u'grand-total'), None): cnv_string,
+ ((TABLENS,u'group-by-field-number'), None): cnv_nonNegativeInteger,
+ ((TABLENS,u'grouped-by'), None): cnv_string,
+ ((TABLENS,u'has-persistent-data'), None): cnv_boolean,
+ ((TABLENS,u'id'), None): cnv_string,
+ ((TABLENS,u'identify-categories'), None): cnv_boolean,
+ ((TABLENS,u'ignore-empty-rows'), None): cnv_boolean,
+ ((TABLENS,u'index'), None): cnv_nonNegativeInteger,
+ ((TABLENS,u'is-active'), None): cnv_boolean,
+ ((TABLENS,u'is-data-layout-field'), None): cnv_string,
+ ((TABLENS,u'is-selection'), None): cnv_boolean,
+ ((TABLENS,u'is-sub-table'), None): cnv_boolean,
+ ((TABLENS,u'label-cell-range-address'), None): cnv_string,
+ ((TABLENS,u'language'), None): cnv_token,
+ ((TABLENS,u'language'), None): cnv_token,
+ ((TABLENS,u'last-column-spanned'), None): cnv_positiveInteger,
+ ((TABLENS,u'last-row-spanned'), None): cnv_positiveInteger,
+ ((TABLENS,u'layout-mode'), None): cnv_string,
+ ((TABLENS,u'link-to-source-data'), None): cnv_boolean,
+ ((TABLENS,u'marked-invalid'), None): cnv_boolean,
+ ((TABLENS,u'matrix-covered'), None): cnv_boolean,
+ ((TABLENS,u'maximum-difference'), None): cnv_double,
+ ((TABLENS,u'member-count'), None): cnv_nonNegativeInteger,
+ ((TABLENS,u'member-name'), None): cnv_string,
+ ((TABLENS,u'member-type'), None): cnv_string,
+ ((TABLENS,u'message-type'), None): cnv_string,
+ ((TABLENS,u'mode'), None): cnv_string,
+ ((TABLENS,u'multi-deletion-spanned'), None): cnv_integer,
+ ((TABLENS,u'name'), None): cnv_string,
+ ((TABLENS,u'name'), None): cnv_string,
+ ((TABLENS,u'null-year'), None): cnv_positiveInteger,
+ ((TABLENS,u'number-columns-repeated'), None): cnv_positiveInteger,
+ ((TABLENS,u'number-columns-spanned'), None): cnv_positiveInteger,
+ ((TABLENS,u'number-matrix-columns-spanned'), None): cnv_positiveInteger,
+ ((TABLENS,u'number-matrix-rows-spanned'), None): cnv_positiveInteger,
+ ((TABLENS,u'number-rows-repeated'), None): cnv_positiveInteger,
+ ((TABLENS,u'number-rows-spanned'), None): cnv_positiveInteger,
+ ((TABLENS,u'object-name'), None): cnv_string,
+ ((TABLENS,u'on-update-keep-size'), None): cnv_boolean,
+ ((TABLENS,u'on-update-keep-styles'), None): cnv_boolean,
+ ((TABLENS,u'operator'), None): cnv_string,
+ ((TABLENS,u'operator'), None): cnv_string,
+ ((TABLENS,u'order'), None): cnv_string,
+ ((TABLENS,u'orientation'), None): cnv_string,
+ ((TABLENS,u'orientation'), None): cnv_string,
+ ((TABLENS,u'page-breaks-on-group-change'), None): cnv_boolean,
+ ((TABLENS,u'parse-sql-statement'), None): cnv_boolean,
+ ((TABLENS,u'password'), None): cnv_string,
+ ((TABLENS,u'position'), None): cnv_integer,
+ ((TABLENS,u'precision-as-shown'), None): cnv_boolean,
+ ((TABLENS,u'print'), None): cnv_boolean,
+ ((TABLENS,u'print-ranges'), None): cnv_string,
+ ((TABLENS,u'protect'), None): cnv_boolean,
+ ((TABLENS,u'protected'), None): cnv_boolean,
+ ((TABLENS,u'protection-key'), None): cnv_string,
+ ((TABLENS,u'query-name'), None): cnv_string,
+ ((TABLENS,u'range-usable-as'), None): cnv_string,
+ ((TABLENS,u'refresh-delay'), None): cnv_boolean,
+ ((TABLENS,u'refresh-delay'), None): cnv_duration,
+ ((TABLENS,u'rejecting-change-id'), None): cnv_string,
+ ((TABLENS,u'row'), None): cnv_integer,
+ ((TABLENS,u'scenario-ranges'), None): cnv_string,
+ ((TABLENS,u'search-criteria-must-apply-to-whole-cell'), None): cnv_boolean,
+ ((TABLENS,u'selected-page'), None): cnv_string,
+ ((TABLENS,u'show-details'), None): cnv_boolean,
+ ((TABLENS,u'show-empty'), None): cnv_boolean,
+ ((TABLENS,u'show-empty'), None): cnv_string,
+ ((TABLENS,u'show-filter-button'), None): cnv_boolean,
+ ((TABLENS,u'sort-mode'), None): cnv_string,
+ ((TABLENS,u'source-cell-range-addresses'), None): cnv_string,
+ ((TABLENS,u'source-cell-range-addresses'), None): cnv_string,
+ ((TABLENS,u'source-field-name'), None): cnv_string,
+ ((TABLENS,u'source-field-name'), None): cnv_string,
+ ((TABLENS,u'source-name'), None): cnv_string,
+ ((TABLENS,u'sql-statement'), None): cnv_string,
+ ((TABLENS,u'start'), None): cnv_string,
+ ((TABLENS,u'start-column'), None): cnv_integer,
+ ((TABLENS,u'start-position'), None): cnv_integer,
+ ((TABLENS,u'start-row'), None): cnv_integer,
+ ((TABLENS,u'start-table'), None): cnv_integer,
+ ((TABLENS,u'status'), None): cnv_string,
+ ((TABLENS,u'step'), None): cnv_double,
+ ((TABLENS,u'steps'), None): cnv_positiveInteger,
+ ((TABLENS,u'structure-protected'), None): cnv_boolean,
+ ((TABLENS,u'style-name'), None): cnv_StyleNameRef,
+ ((TABLENS,u'table-background'), None): cnv_boolean,
+ ((TABLENS,u'table'), None): cnv_integer,
+ ((TABLENS,u'table-name'), None): cnv_string,
+ ((TABLENS,u'target-cell-address'), None): cnv_string,
+ ((TABLENS,u'target-cell-address'), None): cnv_string,
+ ((TABLENS,u'target-range-address'), None): cnv_string,
+ ((TABLENS,u'target-range-address'), None): cnv_string,
+ ((TABLENS,u'title'), None): cnv_string,
+ ((TABLENS,u'track-changes'), None): cnv_boolean,
+ ((TABLENS,u'type'), None): cnv_string,
+ ((TABLENS,u'use-labels'), None): cnv_string,
+ ((TABLENS,u'use-regular-expressions'), None): cnv_boolean,
+ ((TABLENS,u'used-hierarchy'), None): cnv_integer,
+ ((TABLENS,u'user-name'), None): cnv_string,
+ ((TABLENS,u'value'), None): cnv_string,
+ ((TABLENS,u'value'), None): cnv_string,
+ ((TABLENS,u'value-type'), None): cnv_string,
+ ((TABLENS,u'visibility'), None): cnv_string,
+ ((TEXTNS,u'active'), None): cnv_boolean,
+ ((TEXTNS,u'address'), None): cnv_string,
+ ((TEXTNS,u'alphabetical-separators'), None): cnv_boolean,
+ ((TEXTNS,u'anchor-page-number'), None): cnv_positiveInteger,
+ ((TEXTNS,u'anchor-type'), None): cnv_string,
+ ((TEXTNS,u'animation'), None): cnv_string,
+ ((TEXTNS,u'animation-delay'), None): cnv_string,
+ ((TEXTNS,u'animation-direction'), None): cnv_string,
+ ((TEXTNS,u'animation-repeat'), None): cnv_string,
+ ((TEXTNS,u'animation-start-inside'), None): cnv_boolean,
+ ((TEXTNS,u'animation-steps'), None): cnv_length,
+ ((TEXTNS,u'animation-stop-inside'), None): cnv_boolean,
+ ((TEXTNS,u'annote'), None): cnv_string,
+ ((TEXTNS,u'author'), None): cnv_string,
+ ((TEXTNS,u'bibliography-data-field'), None): cnv_string,
+ ((TEXTNS,u'bibliography-type'), None): cnv_string,
+ ((TEXTNS,u'booktitle'), None): cnv_string,
+ ((TEXTNS,u'bullet-char'), None): cnv_string,
+ ((TEXTNS,u'bullet-relative-size'), None): cnv_string,
+ ((TEXTNS,u'c'), None): cnv_nonNegativeInteger,
+ ((TEXTNS,u'capitalize-entries'), None): cnv_boolean,
+ ((TEXTNS,u'caption-sequence-format'), None): cnv_string,
+ ((TEXTNS,u'caption-sequence-name'), None): cnv_string,
+ ((TEXTNS,u'change-id'), None): cnv_IDREF,
+ ((TEXTNS,u'chapter'), None): cnv_string,
+ ((TEXTNS,u'citation-body-style-name'), None): cnv_StyleNameRef,
+ ((TEXTNS,u'citation-style-name'), None): cnv_StyleNameRef,
+ ((TEXTNS,u'class-names'), None): cnv_NCNames,
+ ((TEXTNS,u'column-name'), None): cnv_string,
+ ((TEXTNS,u'combine-entries'), None): cnv_boolean,
+ ((TEXTNS,u'combine-entries-with-dash'), None): cnv_boolean,
+ ((TEXTNS,u'combine-entries-with-pp'), None): cnv_boolean,
+ ((TEXTNS,u'comma-separated'), None): cnv_boolean,
+ ((TEXTNS,u'cond-style-name'), None): cnv_StyleNameRef,
+ ((TEXTNS,u'condition'), None): cnv_string,
+ ((TEXTNS,u'connection-name'), None): cnv_string,
+ ((TEXTNS,u'consecutive-numbering'), None): cnv_boolean,
+ ((TEXTNS,u'continue-numbering'), None): cnv_boolean,
+ ((TEXTNS,u'copy-outline-levels'), None): cnv_boolean,
+ ((TEXTNS,u'count-empty-lines'), None): cnv_boolean,
+ ((TEXTNS,u'count-in-text-boxes'), None): cnv_boolean,
+ ((TEXTNS,u'current-value'), None): cnv_boolean,
+ ((TEXTNS,u'custom1'), None): cnv_string,
+ ((TEXTNS,u'custom2'), None): cnv_string,
+ ((TEXTNS,u'custom3'), None): cnv_string,
+ ((TEXTNS,u'custom4'), None): cnv_string,
+ ((TEXTNS,u'custom5'), None): cnv_string,
+ ((TEXTNS,u'database-name'), None): cnv_string,
+ ((TEXTNS,u'date-adjust'), None): cnv_duration,
+ ((TEXTNS,u'date-value'), None): cnv_date,
+ ((TEXTNS,u'date-value'), None): cnv_dateTime,
+ ((TEXTNS,u'default-style-name'), None): cnv_StyleNameRef,
+ ((TEXTNS,u'description'), None): cnv_string,
+ ((TEXTNS,u'display'), None): cnv_string,
+ ((TEXTNS,u'display-levels'), None): cnv_positiveInteger,
+ ((TEXTNS,u'display-outline-level'), None): cnv_nonNegativeInteger,
+ ((TEXTNS,u'dont-balance-text-columns'), None): cnv_boolean,
+ ((TEXTNS,u'duration'), None): cnv_duration,
+ ((TEXTNS,u'edition'), None): cnv_string,
+ ((TEXTNS,u'editor'), None): cnv_string,
+ ((TEXTNS,u'filter-name'), None): cnv_string,
+ ((TEXTNS,u'first-row-end-column'), None): cnv_string,
+ ((TEXTNS,u'first-row-start-column'), None): cnv_string,
+ ((TEXTNS,u'fixed'), None): cnv_boolean,
+ ((TEXTNS,u'footnotes-position'), None): cnv_string,
+ ((TEXTNS,u'formula'), None): cnv_string,
+ ((TEXTNS,u'global'), None): cnv_boolean,
+ ((TEXTNS,u'howpublished'), None): cnv_string,
+ ((TEXTNS,u'id'), None): cnv_ID,
+# ((TEXTNS,u'id'), None): cnv_string,
+ ((TEXTNS,u'identifier'), None): cnv_string,
+ ((TEXTNS,u'ignore-case'), None): cnv_boolean,
+ ((TEXTNS,u'increment'), None): cnv_nonNegativeInteger,
+ ((TEXTNS,u'index-name'), None): cnv_string,
+ ((TEXTNS,u'index-scope'), None): cnv_string,
+ ((TEXTNS,u'institution'), None): cnv_string,
+ ((TEXTNS,u'is-hidden'), None): cnv_boolean,
+ ((TEXTNS,u'is-list-header'), None): cnv_boolean,
+ ((TEXTNS,u'isbn'), None): cnv_string,
+ ((TEXTNS,u'issn'), None): cnv_string,
+ ((TEXTNS,u'issn'), None): cnv_string,
+ ((TEXTNS,u'journal'), None): cnv_string,
+ ((TEXTNS,u'key'), None): cnv_string,
+ ((TEXTNS,u'key1'), None): cnv_string,
+ ((TEXTNS,u'key1-phonetic'), None): cnv_string,
+ ((TEXTNS,u'key2'), None): cnv_string,
+ ((TEXTNS,u'key2-phonetic'), None): cnv_string,
+ ((TEXTNS,u'kind'), None): cnv_string,
+ ((TEXTNS,u'label'), None): cnv_string,
+ ((TEXTNS,u'last-row-end-column'), None): cnv_string,
+ ((TEXTNS,u'last-row-start-column'), None): cnv_string,
+ ((TEXTNS,u'level'), None): cnv_positiveInteger,
+ ((TEXTNS,u'line-break'), None): cnv_boolean,
+ ((TEXTNS,u'line-number'), None): cnv_string,
+ ((TEXTNS,u'main-entry'), None): cnv_boolean,
+ ((TEXTNS,u'main-entry-style-name'), None): cnv_StyleNameRef,
+ ((TEXTNS,u'master-page-name'), None): cnv_StyleNameRef,
+ ((TEXTNS,u'min-label-distance'), None): cnv_string,
+ ((TEXTNS,u'min-label-width'), None): cnv_string,
+ ((TEXTNS,u'month'), None): cnv_string,
+ ((TEXTNS,u'name'), None): cnv_string,
+ ((TEXTNS,u'note-class'), None): cnv_textnoteclass,
+ ((TEXTNS,u'note'), None): cnv_string,
+ ((TEXTNS,u'number'), None): cnv_string,
+ ((TEXTNS,u'number-lines'), None): cnv_boolean,
+ ((TEXTNS,u'number-position'), None): cnv_string,
+ ((TEXTNS,u'numbered-entries'), None): cnv_boolean,
+ ((TEXTNS,u'offset'), None): cnv_string,
+ ((TEXTNS,u'organizations'), None): cnv_string,
+ ((TEXTNS,u'outline-level'), None): cnv_string,
+ ((TEXTNS,u'page-adjust'), None): cnv_integer,
+ ((TEXTNS,u'pages'), None): cnv_string,
+ ((TEXTNS,u'placeholder-type'), None): cnv_string,
+ ((TEXTNS,u'prefix'), None): cnv_string,
+ ((TEXTNS,u'protected'), None): cnv_boolean,
+ ((TEXTNS,u'protection-key'), None): cnv_string,
+ ((TEXTNS,u'publisher'), None): cnv_string,
+ ((TEXTNS,u'ref-name'), None): cnv_string,
+ ((TEXTNS,u'reference-format'), None): cnv_string,
+ ((TEXTNS,u'relative-tab-stop-position'), None): cnv_boolean,
+ ((TEXTNS,u'report-type'), None): cnv_string,
+ ((TEXTNS,u'restart-numbering'), None): cnv_boolean,
+ ((TEXTNS,u'restart-on-page'), None): cnv_boolean,
+ ((TEXTNS,u'row-number'), None): cnv_nonNegativeInteger,
+ ((TEXTNS,u'school'), None): cnv_string,
+ ((TEXTNS,u'section-name'), None): cnv_string,
+ ((TEXTNS,u'select-page'), None): cnv_string,
+ ((TEXTNS,u'separation-character'), None): cnv_string,
+ ((TEXTNS,u'series'), None): cnv_string,
+ ((TEXTNS,u'sort-algorithm'), None): cnv_string,
+ ((TEXTNS,u'sort-ascending'), None): cnv_boolean,
+ ((TEXTNS,u'sort-by-position'), None): cnv_boolean,
+ ((TEXTNS,u'space-before'), None): cnv_string,
+ ((TEXTNS,u'start-numbering-at'), None): cnv_string,
+ ((TEXTNS,u'start-value'), None): cnv_nonNegativeInteger,
+ ((TEXTNS,u'start-value'), None): cnv_positiveInteger,
+ ((TEXTNS,u'string-value'), None): cnv_string,
+ ((TEXTNS,u'string-value-if-false'), None): cnv_string,
+ ((TEXTNS,u'string-value-if-true'), None): cnv_string,
+ ((TEXTNS,u'string-value-phonetic'), None): cnv_string,
+ ((TEXTNS,u'style-name'), None): cnv_StyleNameRef,
+ ((TEXTNS,u'suffix'), None): cnv_string,
+ ((TEXTNS,u'tab-ref'), None): cnv_nonNegativeInteger,
+ ((TEXTNS,u'table-name'), None): cnv_string,
+ ((TEXTNS,u'table-type'), None): cnv_string,
+ ((TEXTNS,u'time-adjust'), None): cnv_duration,
+ ((TEXTNS,u'time-value'), None): cnv_dateTime,
+ ((TEXTNS,u'time-value'), None): cnv_time,
+ ((TEXTNS,u'title'), None): cnv_string,
+ ((TEXTNS,u'track-changes'), None): cnv_boolean,
+ ((TEXTNS,u'url'), None): cnv_string,
+ ((TEXTNS,u'use-caption'), None): cnv_boolean,
+ ((TEXTNS,u'use-chart-objects'), None): cnv_boolean,
+ ((TEXTNS,u'use-draw-objects'), None): cnv_boolean,
+ ((TEXTNS,u'use-floating-frames'), None): cnv_boolean,
+ ((TEXTNS,u'use-graphics'), None): cnv_boolean,
+ ((TEXTNS,u'use-index-marks'), None): cnv_boolean,
+ ((TEXTNS,u'use-index-source-styles'), None): cnv_boolean,
+ ((TEXTNS,u'use-keys-as-entries'), None): cnv_boolean,
+ ((TEXTNS,u'use-math-objects'), None): cnv_boolean,
+ ((TEXTNS,u'use-objects'), None): cnv_boolean,
+ ((TEXTNS,u'use-other-objects'), None): cnv_boolean,
+ ((TEXTNS,u'use-outline-level'), None): cnv_boolean,
+ ((TEXTNS,u'use-spreadsheet-objects'), None): cnv_boolean,
+ ((TEXTNS,u'use-tables'), None): cnv_boolean,
+ ((TEXTNS,u'value'), None): cnv_nonNegativeInteger,
+ ((TEXTNS,u'visited-style-name'), None): cnv_StyleNameRef,
+ ((TEXTNS,u'volume'), None): cnv_string,
+ ((TEXTNS,u'year'), None): cnv_string,
+ ((XFORMSNS,u'bind'), None): cnv_string,
+ ((XLINKNS,u'actuate'), None): cnv_string,
+ ((XLINKNS,u'href'), None): cnv_anyURI,
+ ((XLINKNS,u'show'), None): cnv_xlinkshow,
+ ((XLINKNS,u'title'), None): cnv_string,
+ ((XLINKNS,u'type'), None): cnv_string,
+}
+
+class AttrConverters:
+ def convert(self, attribute, value, element):
+ conversion = attrconverters.get((attribute,element), None)
+ if conversion is not None:
+ return conversion(attribute, value, element)
+ else:
+ conversion = attrconverters.get((attribute, None), None)
+ if conversion is not None:
+ return conversion(attribute, value, element)
+ return unicode(value)
+
diff --git a/src/odf/chart.py b/src/odf/chart.py
new file mode 100644
index 0000000000..cca83961ac
--- /dev/null
+++ b/src/odf/chart.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 CHARTNS
+from element import Element
+
+# Autogenerated
+def Axis(**args):
+ return Element(qname = (CHARTNS,'axis'), **args)
+
+def Categories(**args):
+ return Element(qname = (CHARTNS,'categories'), **args)
+
+def Chart(**args):
+ return Element(qname = (CHARTNS,'chart'), **args)
+
+def DataPoint(**args):
+ return Element(qname = (CHARTNS,'data-point'), **args)
+
+def Domain(**args):
+ return Element(qname = (CHARTNS,'domain'), **args)
+
+def ErrorIndicator(**args):
+ return Element(qname = (CHARTNS,'error-indicator'), **args)
+
+def Floor(**args):
+ return Element(qname = (CHARTNS,'floor'), **args)
+
+def Footer(**args):
+ return Element(qname = (CHARTNS,'footer'), **args)
+
+def Grid(**args):
+ return Element(qname = (CHARTNS,'grid'), **args)
+
+def Legend(**args):
+ return Element(qname = (CHARTNS,'legend'), **args)
+
+def MeanValue(**args):
+ return Element(qname = (CHARTNS,'mean-value'), **args)
+
+def PlotArea(**args):
+ return Element(qname = (CHARTNS,'plot-area'), **args)
+
+def RegressionCurve(**args):
+ return Element(qname = (CHARTNS,'regression-curve'), **args)
+
+def Series(**args):
+ return Element(qname = (CHARTNS,'series'), **args)
+
+def StockGainMarker(**args):
+ return Element(qname = (CHARTNS,'stock-gain-marker'), **args)
+
+def StockLossMarker(**args):
+ return Element(qname = (CHARTNS,'stock-loss-marker'), **args)
+
+def StockRangeLine(**args):
+ return Element(qname = (CHARTNS,'stock-range-line'), **args)
+
+def Subtitle(**args):
+ return Element(qname = (CHARTNS,'subtitle'), **args)
+
+def SymbolImage(**args):
+ return Element(qname = (CHARTNS,'symbol-image'), **args)
+
+def Title(**args):
+ return Element(qname = (CHARTNS,'title'), **args)
+
+def Wall(**args):
+ return Element(qname = (CHARTNS,'wall'), **args)
+
diff --git a/src/odf/config.py b/src/odf/config.py
new file mode 100644
index 0000000000..f33f361396
--- /dev/null
+++ b/src/odf/config.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 CONFIGNS
+from element import Element
+
+# Autogenerated
+def ConfigItem(**args):
+ return Element(qname = (CONFIGNS, 'config-item'), **args)
+
+def ConfigItemMapEntry(**args):
+ return Element(qname = (CONFIGNS,'config-item-map-entry'), **args)
+
+def ConfigItemMapIndexed(**args):
+ return Element(qname = (CONFIGNS,'config-item-map-indexed'), **args)
+
+def ConfigItemMapNamed(**args):
+ return Element(qname = (CONFIGNS,'config-item-map-named'), **args)
+
+def ConfigItemSet(**args):
+ return Element(qname = (CONFIGNS, 'config-item-set'), **args)
+
diff --git a/src/odf/dc.py b/src/odf/dc.py
new file mode 100644
index 0000000000..7c967768bb
--- /dev/null
+++ b/src/odf/dc.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 DCNS
+from element import Element
+
+# Autogenerated
+def Creator(**args):
+ return Element(qname = (DCNS,'creator'), **args)
+
+def Date(**args):
+ return Element(qname = (DCNS,'date'), **args)
+
+def Description(**args):
+ return Element(qname = (DCNS,'description'), **args)
+
+def Language(**args):
+ return Element(qname = (DCNS,'language'), **args)
+
+def Subject(**args):
+ return Element(qname = (DCNS,'subject'), **args)
+
+def Title(**args):
+ return Element(qname = (DCNS,'title'), **args)
+
+# The following complete the Dublin Core elements, but there is no
+# guarantee a compliant implementation of OpenDocument will preserve
+# these elements
+
+#def Contributor(**args):
+# return Element(qname = (DCNS,'contributor'), **args)
+
+#def Coverage(**args):
+# return Element(qname = (DCNS,'coverage'), **args)
+
+#def Format(**args):
+# return Element(qname = (DCNS,'format'), **args)
+
+#def Identifier(**args):
+# return Element(qname = (DCNS,'identifier'), **args)
+
+#def Publisher(**args):
+# return Element(qname = (DCNS,'publisher'), **args)
+
+#def Relation(**args):
+# return Element(qname = (DCNS,'relation'), **args)
+
+#def Rights(**args):
+# return Element(qname = (DCNS,'rights'), **args)
+
+#def Source(**args):
+# return Element(qname = (DCNS,'source'), **args)
+
+#def Type(**args):
+# return Element(qname = (DCNS,'type'), **args)
diff --git a/src/odf/dr3d.py b/src/odf/dr3d.py
new file mode 100644
index 0000000000..324ae1cf4f
--- /dev/null
+++ b/src/odf/dr3d.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 DR3DNS
+from element import Element
+from draw import StyleRefElement
+
+# Autogenerated
+def Cube(**args):
+ return StyleRefElement(qname = (DR3DNS,'cube'), **args)
+
+def Extrude(**args):
+ return StyleRefElement(qname = (DR3DNS,'extrude'), **args)
+
+def Light(Element):
+ return StyleRefElement(qname = (DR3DNS,'light'), **args)
+
+def Rotate(**args):
+ return StyleRefElement(qname = (DR3DNS,'rotate'), **args)
+
+def Scene(**args):
+ return StyleRefElement(qname = (DR3DNS,'scene'), **args)
+
+def Sphere(**args):
+ return StyleRefElement(qname = (DR3DNS,'sphere'), **args)
+
diff --git a/src/odf/draw.py b/src/odf/draw.py
new file mode 100644
index 0000000000..7692e5aa84
--- /dev/null
+++ b/src/odf/draw.py
@@ -0,0 +1,182 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 DRAWNS, STYLENS, PRESENTATIONNS
+from element import Element
+
+def StyleRefElement(stylename=None, classnames=None, **args):
+ qattrs = {}
+ if stylename is not None:
+ f = stylename.getAttrNS(STYLENS, 'family')
+ if f == 'graphic':
+ qattrs[(DRAWNS,u'style-name')]= stylename
+ elif f == 'presentation':
+ qattrs[(PRESENTATIONNS,u'style-name')]= stylename
+ else:
+ raise ValueError, "Style's family must be either 'graphic' or 'presentation'"
+ if classnames is not None:
+ f = classnames[0].getAttrNS(STYLENS, 'family')
+ if f == 'graphic':
+ qattrs[(DRAWNS,u'class-names')]= classnames
+ elif f == 'presentation':
+ qattrs[(PRESENTATIONNS,u'class-names')]= classnames
+ else:
+ raise ValueError, "Style's family must be either 'graphic' or 'presentation'"
+ return Element(qattributes=qattrs, **args)
+
+def DrawElement(name=None, **args):
+ e = Element(name=name, **args)
+ if not args.has_key('displayname'):
+ e.setAttrNS(DRAWNS,'display-name', name)
+ return e
+
+# Autogenerated
+def A(**args):
+ return Element(qname = (DRAWNS,'a'), **args)
+
+def Applet(**args):
+ return Element(qname = (DRAWNS,'applet'), **args)
+
+def AreaCircle(**args):
+ return Element(qname = (DRAWNS,'area-circle'), **args)
+
+def AreaPolygon(**args):
+ return Element(qname = (DRAWNS,'area-polygon'), **args)
+
+def AreaRectangle(**args):
+ return Element(qname = (DRAWNS,'area-rectangle'), **args)
+
+def Caption(**args):
+ return StyleRefElement(qname = (DRAWNS,'caption'), **args)
+
+def Circle(**args):
+ return StyleRefElement(qname = (DRAWNS,'circle'), **args)
+
+def Connector(**args):
+ return StyleRefElement(qname = (DRAWNS,'connector'), **args)
+
+def ContourPath(**args):
+ return Element(qname = (DRAWNS,'contour-path'), **args)
+
+def ContourPolygon(**args):
+ return Element(qname = (DRAWNS,'contour-polygon'), **args)
+
+def Control(**args):
+ return StyleRefElement(qname = (DRAWNS,'control'), **args)
+
+def CustomShape(**args):
+ return StyleRefElement(qname = (DRAWNS,'custom-shape'), **args)
+
+def Ellipse(**args):
+ return StyleRefElement(qname = (DRAWNS,'ellipse'), **args)
+
+def EnhancedGeometry(**args):
+ return Element(qname = (DRAWNS,'enhanced-geometry'), **args)
+
+def Equation(**args):
+ return Element(qname = (DRAWNS,'equation'), **args)
+
+def FillImage(**args):
+ return DrawElement(qname = (DRAWNS,'fill-image'), **args)
+
+def FloatingFrame(**args):
+ return Element(qname = (DRAWNS,'floating-frame'), **args)
+
+def Frame(**args):
+ return StyleRefElement(qname = (DRAWNS,'frame'), **args)
+
+def G(**args):
+ return StyleRefElement(qname = (DRAWNS,'g'), **args)
+
+def GluePoint(**args):
+ return Element(qname = (DRAWNS,'glue-point'), **args)
+
+def Gradient(**args):
+ return DrawElement(qname = (DRAWNS,'gradient'), **args)
+
+def Handle(**args):
+ return Element(qname = (DRAWNS,'handle'), **args)
+
+def Hatch(**args):
+ return DrawElement(qname = (DRAWNS,'hatch'), **args)
+
+def Image(**args):
+ return Element(qname = (DRAWNS,'image'), **args)
+
+def ImageMap(**args):
+ return Element(qname = (DRAWNS,'image-map'), **args)
+
+def Layer(**args):
+ return Element(qname = (DRAWNS,'layer'), **args)
+
+def LayerSet(**args):
+ return Element(qname = (DRAWNS,'layer-set'), **args)
+
+def Line(**args):
+ return StyleRefElement(qname = (DRAWNS,'line'), **args)
+
+def Marker(**args):
+ return DrawElement(qname = (DRAWNS,'marker'), **args)
+
+def Measure(**args):
+ return StyleRefElement(qname = (DRAWNS,'measure'), **args)
+
+def Object(**args):
+ return Element(qname = (DRAWNS,'object'), **args)
+
+def ObjectOle(**args):
+ return Element(qname = (DRAWNS,'object-ole'), **args)
+
+def Opacity(**args):
+ return DrawElement(qname = (DRAWNS,'opacity'), **args)
+
+def Page(**args):
+ return Element(qname = (DRAWNS,'page'), **args)
+
+def PageThumbnail(**args):
+ return StyleRefElement(qname = (DRAWNS,'page-thumbnail'), **args)
+
+def Param(**args):
+ return Element(qname = (DRAWNS,'param'), **args)
+
+def Path(**args):
+ return StyleRefElement(qname = (DRAWNS,'path'), **args)
+
+def Plugin(**args):
+ return Element(qname = (DRAWNS,'plugin'), **args)
+
+def Polygon(**args):
+ return StyleRefElement(qname = (DRAWNS,'polygon'), **args)
+
+def Polyline(**args):
+ return StyleRefElement(qname = (DRAWNS,'polyline'), **args)
+
+def Rect(**args):
+ return StyleRefElement(qname = (DRAWNS,'rect'), **args)
+
+def RegularPolygon(**args):
+ return StyleRefElement(qname = (DRAWNS,'regular-polygon'), **args)
+
+def StrokeDash(**args):
+ return DrawElement(qname = (DRAWNS,'stroke-dash'), **args)
+
+def TextBox(**args):
+ return Element(qname = (DRAWNS,'text-box'), **args)
+
diff --git a/src/odf/easyliststyle.py b/src/odf/easyliststyle.py
new file mode 100644
index 0000000000..b2a54c210b
--- /dev/null
+++ b/src/odf/easyliststyle.py
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+# Create a element from a text string.
+# Copyright (C) 2008 J. David Eisenberg
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Contributor(s):
+#
+
+import re
+from style import Style, TextProperties, ListLevelProperties
+from text import ListStyle,ListLevelStyleNumber,ListLevelStyleBullet
+
+"""
+Create a element from a string or array.
+
+List styles require a lot of code to create one level at a time.
+These routines take a string and delimiter, or a list of
+strings, and creates a element for you.
+Each item in the string (or array) represents a list level
+ * style for levels 1-10.
+ *
+ * If an item contains 1
, I
,
+ * i
, A
, or a
, then it is presumed
+ * to be a numbering style; otherwise it is a bulleted style.
+"""
+
+_MAX_LIST_LEVEL = 10
+SHOW_ALL_LEVELS = True
+SHOW_ONE_LEVEL = False
+
+def styleFromString(name, specifiers, delim, spacing, showAllLevels):
+ specArray = specifiers.split(delim)
+ return styleFromList( name, specArray, spacing, showAllLevels )
+
+def styleFromList( styleName, specArray, spacing, showAllLevels):
+ bullet = ""
+ numPrefix = ""
+ numSuffix = ""
+ numberFormat = ""
+ cssLengthNum = 0
+ cssLengthUnits = ""
+ numbered = False
+ displayLevels = 0
+ listStyle = ListStyle(name=styleName)
+ numFormatPattern = re.compile("([1IiAa])")
+ cssLengthPattern = re.compile("([^a-z]+)\\s*([a-z]+)?")
+ m = cssLengthPattern.search( spacing )
+ if (m != None):
+ cssLengthNum = float(m.group(1))
+ if (m.lastindex == 2):
+ cssLengthUnits = m.group(2)
+ i = 0
+ while i < len(specArray):
+ specification = specArray[i]
+ m = numFormatPattern.search(specification)
+ if (m != None):
+ numberFormat = m.group(1)
+ numPrefix = specification[0:m.start(1)]
+ numSuffix = specification[m.end(1):]
+ bullet = ""
+ numbered = True
+ if (showAllLevels):
+ displayLevels = i + 1
+ else:
+ displayLevels = 1
+ else: # it's a bullet style
+ bullet = specification
+ numPrefix = ""
+ numSuffix = ""
+ numberFormat = ""
+ displayLevels = 1
+ numbered = False
+ if (numbered):
+ lls = ListLevelStyleNumber(level=(i+1))
+ if (numPrefix != ''):
+ lls.setAttribute('numprefix', numPrefix)
+ if (numSuffix != ''):
+ lls.setAttribute('numsuffix', numSuffix)
+ lls.setAttribute('displaylevels', displayLevels)
+ else:
+ lls = ListLevelStyleBullet(level=(i+1),bulletchar=bullet[0])
+ llp = ListLevelProperties()
+ llp.setAttribute('spacebefore', str(cssLengthNum * (i+1)) + cssLengthUnits)
+ llp.setAttribute('minlabelwidth', str(cssLengthNum) + cssLengthUnits)
+ lls.addElement( llp )
+ listStyle.addElement(lls)
+ i += 1
+ return listStyle
+
+# vim: set expandtab sw=4 :
diff --git a/src/odf/element.py b/src/odf/element.py
new file mode 100644
index 0000000000..e6b3637bec
--- /dev/null
+++ b/src/odf/element.py
@@ -0,0 +1,454 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-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):
+#
+
+# Note: This script has copied a lot of text from xml.dom.minidom.
+# Whatever license applies to that file also applies to this file.
+#
+import xml.dom
+from xml.dom.minicompat import *
+from namespaces import nsdict
+import grammar
+from attrconverters import AttrConverters
+
+# The following code is pasted form xml.sax.saxutils
+# Tt makes it possible to run the code without the xml sax package installed
+# To make it possible to have in your text elements, it is necessary to escape the texts
+def _escape(data, entities={}):
+ """ Escape &, <, and > in a string of data.
+
+ You can escape other strings of data by passing a dictionary as
+ the optional entities parameter. The keys and values must all be
+ strings; each key will be replaced with its corresponding value.
+ """
+ data = data.replace("&", "&")
+ data = data.replace("<", "<")
+ data = data.replace(">", ">")
+ for chars, entity in entities.items():
+ data = data.replace(chars, entity)
+ return data
+
+def _quoteattr(data, entities={}):
+ """ Escape and quote an attribute value.
+
+ Escape &, <, and > in a string of data, then quote it for use as
+ an attribute value. The \" character will be escaped as well, if
+ necessary.
+
+ You can escape other strings of data by passing a dictionary as
+ the optional entities parameter. The keys and values must all be
+ strings; each key will be replaced with its corresponding value.
+ """
+ data = _escape(data, entities)
+ if '"' in data:
+ if "'" in data:
+ data = '"%s"' % data.replace('"', """)
+ else:
+ data = "'%s'" % data
+ else:
+ data = '"%s"' % data
+ return data
+
+def _nssplit(qualifiedName):
+ """ Split a qualified name into namespace part and local part. """
+ fields = qualifiedName.split(':', 1)
+ if len(fields) == 2:
+ return fields
+ else:
+ return (None, fields[0])
+
+def _nsassign(namespace):
+ return nsdict.setdefault(namespace,"ns" + str(len(nsdict)))
+
+# Exceptions
+class IllegalChild(StandardError):
+ """ Complains if you add an element to a parent where it is not allowed """
+class IllegalText(StandardError):
+ """ Complains if you add text or cdata to an element where it is not allowed """
+
+class Node(xml.dom.Node):
+ """ super class for more specific nodes """
+ parentNode = None
+ nextSibling = None
+ previousSibling = None
+
+ def hasChildNodes(self):
+ """ Tells whether this element has any children; text nodes,
+ subelements, whatever.
+ """
+ if self.childNodes:
+ return True
+ else:
+ return False
+
+ def _get_childNodes(self):
+ return self.childNodes
+
+ def _get_firstChild(self):
+ if self.childNodes:
+ return self.childNodes[0]
+
+ def _get_lastChild(self):
+ if self.childNodes:
+ return self.childNodes[-1]
+
+ def insertBefore(self, newChild, refChild):
+ if newChild.nodeType not in self._child_node_types:
+ raise IllegalChild, "%s cannot be child of %s" % (newChild.tagName, self.tagName)
+ if newChild.parentNode is not None:
+ newChild.parentNode.removeChild(newChild)
+ if refChild is None:
+ self.appendChild(newChild)
+ else:
+ try:
+ index = self.childNodes.index(refChild)
+ except ValueError:
+ raise xml.dom.NotFoundErr()
+ self.childNodes.insert(index, newChild)
+ newChild.nextSibling = refChild
+ refChild.previousSibling = newChild
+ if index:
+ node = self.childNodes[index-1]
+ node.nextSibling = newChild
+ newChild.previousSibling = node
+ else:
+ newChild.previousSibling = None
+ newChild.parentNode = self
+ return newChild
+
+ def appendChild(self, node):
+ if node.nodeType == self.DOCUMENT_FRAGMENT_NODE:
+ for c in tuple(node.childNodes):
+ self.appendChild(c)
+ ### The DOM does not clearly specify what to return in this case
+ return node
+ if node.nodeType not in self._child_node_types:
+ raise IllegalChild, "<%s> is not allowed in %s" % ( node.tagName, self.tagName)
+ if node.parentNode is not None:
+ node.parentNode.removeChild(node)
+ _append_child(self, node)
+ node.nextSibling = None
+ return node
+
+ def removeChild(self, oldChild):
+ #FIXME: update ownerDocument.element_dict or find other solution
+ try:
+ self.childNodes.remove(oldChild)
+ except ValueError:
+ raise xml.dom.NotFoundErr()
+ if oldChild.nextSibling is not None:
+ oldChild.nextSibling.previousSibling = oldChild.previousSibling
+ if oldChild.previousSibling is not None:
+ oldChild.previousSibling.nextSibling = oldChild.nextSibling
+ oldChild.nextSibling = oldChild.previousSibling = None
+ if self.ownerDocument:
+ self.ownerDocument.clear_caches()
+ oldChild.parentNode = None
+ return oldChild
+
+defproperty(Node, "firstChild", doc="First child node, or None.")
+defproperty(Node, "lastChild", doc="Last child node, or None.")
+
+def _append_child(self, node):
+ # fast path with less checks; usable by DOM builders if careful
+ childNodes = self.childNodes
+ if childNodes:
+ last = childNodes[-1]
+ node.__dict__["previousSibling"] = last
+ last.__dict__["nextSibling"] = node
+ childNodes.append(node)
+ node.__dict__["parentNode"] = self
+
+class Childless:
+ """Mixin that makes childless-ness easy to implement and avoids
+ the complexity of the Node methods that deal with children.
+ """
+
+ attributes = None
+ childNodes = EmptyNodeList()
+ firstChild = None
+ lastChild = None
+
+ def _get_firstChild(self):
+ return None
+
+ def _get_lastChild(self):
+ return None
+
+ def appendChild(self, node):
+ raise xml.dom.HierarchyRequestErr(
+ self.tagName + " nodes cannot have children")
+
+ def hasChildNodes(self):
+ return False
+
+ def insertBefore(self, newChild, refChild):
+ raise xml.dom.HierarchyRequestErr(
+ self.tagName + " nodes do not have children")
+
+ def removeChild(self, oldChild):
+ raise xml.dom.NotFoundErr(
+ self.tagName + " nodes do not have children")
+
+ def replaceChild(self, newChild, oldChild):
+ raise xml.dom.HierarchyRequestErr(
+ self.tagName + " nodes do not have children")
+
+class Text(Childless, Node):
+ nodeType = Node.TEXT_NODE
+ tagName = "Text"
+
+ def __init__(self, data):
+ self.data = data
+
+ def __str__(self):
+ return self.data
+
+ def toXml(self,level,f):
+ """ Write XML in UTF-8 """
+ if self.data:
+ f.write(_escape(unicode(self.data).encode('utf-8')))
+
+class CDATASection(Childless, Text):
+ nodeType = Node.CDATA_SECTION_NODE
+
+ def toXml(self,level,f):
+ if self.data:
+ f.write('' % self.data)
+
+class Element(Node):
+ """ Creates a arbitrary element and is intended to be subclassed not used on its own.
+ This element is the base of every element it defines a class which resembles
+ a xml-element. The main advantage of this kind of implementation is that you don't
+ have to create a toXML method for every different object. Every element
+ consists of an attribute, optional subelements, optional text and optional cdata.
+ """
+
+ nodeType = Node.ELEMENT_NODE
+ namespaces = {} # Due to shallow copy this is a static variable
+
+ _child_node_types = (Node.ELEMENT_NODE,
+ Node.PROCESSING_INSTRUCTION_NODE,
+ Node.COMMENT_NODE,
+ Node.TEXT_NODE,
+ Node.CDATA_SECTION_NODE,
+ Node.ENTITY_REFERENCE_NODE)
+
+ def __init__(self, attributes=None, text=None, cdata=None, qname=None, qattributes=None, check_grammar=True, **args):
+ if qname is not None:
+ self.qname = qname
+ assert(hasattr(self, 'qname'))
+ self.ownerDocument = None
+ self.childNodes=[]
+ self.allowed_children = grammar.allowed_children.get(self.qname)
+ namespace = self.qname[0]
+ prefix = _nsassign(namespace)
+ if not self.namespaces.has_key(namespace):
+ self.namespaces[namespace] = prefix
+ self.tagName = prefix + ":" + self.qname[1]
+ if text is not None:
+ self.addText(text)
+ if cdata is not None:
+ self.addCDATA(cdata)
+
+ allowed_attrs = self.allowed_attributes()
+ if allowed_attrs is not None:
+ allowed_args = [ a[1].lower().replace('-','') for a in allowed_attrs]
+ self.attributes={}
+ # Load the attributes from the 'attributes' argument
+ if attributes:
+ for attr, value in attributes.items():
+ self.setAttribute(attr, value)
+ # Load the qualified attributes
+ if qattributes:
+ for attr, value in qattributes.items():
+ self.setAttrNS(attr[0], attr[1], value)
+ if allowed_attrs is not None:
+ # Load the attributes from the 'args' argument
+ for arg in args.keys():
+ self.setAttribute(arg, args[arg])
+ else:
+ for arg in args.keys(): # If any attribute is allowed
+ self.attributes[arg]=args[arg]
+ if not check_grammar:
+ return
+ # Test that all mandatory attributes have been added.
+ required = grammar.required_attributes.get(self.qname)
+ if required:
+ for r in required:
+ if self.getAttrNS(r[0],r[1]) is None:
+ raise AttributeError, "Required attribute missing: %s in <%s>" % (r[1].lower().replace('-',''), self.tagName)
+
+ def allowed_attributes(self):
+ return grammar.allowed_attributes.get(self.qname)
+
+ def _setOwnerDoc(self, element):
+ element.ownerDocument = self.ownerDocument
+ for child in element.childNodes:
+ self._setOwnerDoc(child)
+
+ def addElement(self, element, check_grammar=True):
+ """ adds an element to an Element
+
+ Element.addElement(Element)
+ """
+ if check_grammar and self.allowed_children is not None:
+ if element.qname not in self.allowed_children:
+ raise IllegalChild, "<%s> is not allowed in <%s>" % ( element.tagName, self.tagName)
+ self.appendChild(element)
+ self._setOwnerDoc(element)
+ if self.ownerDocument:
+ self.ownerDocument.rebuild_caches(element)
+
+ def addText(self, text, check_grammar=True):
+ if check_grammar and self.qname not in grammar.allows_text:
+ raise IllegalText, "The <%s> element does not allow text" % self.tagName
+ else:
+ if text != '':
+ self.appendChild(Text(text))
+
+ def addCDATA(self, cdata, check_grammar=True):
+ if check_grammar and self.qname not in grammar.allows_text:
+ raise IllegalText, "The <%s> element does not allow text" % self.tagName
+ else:
+ self.appendChild(CDATASection(cdata))
+
+ def removeAttribute(self, attr, check_grammar=True):
+ """ Removes an attribute by name. """
+ allowed_attrs = self.allowed_attributes()
+ if allowed_attrs is None:
+ if type(attr) == type(()):
+ prefix, localname = attr
+ self.removeAttrNS(prefix, localname)
+ else:
+ raise AttributeError, "Unable to add simple attribute - use (namespace, localpart)"
+ else:
+ # Construct a list of allowed arguments
+ allowed_args = [ a[1].lower().replace('-','') for a in allowed_attrs]
+ if check_grammar and attr not in allowed_args:
+ raise AttributeError, "Attribute %s is not allowed in <%s>" % ( attr, self.tagName)
+ i = allowed_args.index(attr)
+ self.removeAttrNS(allowed_attrs[i][0], allowed_attrs[i][1])
+
+ def setAttribute(self, attr, value, check_grammar=True):
+ """ Add an attribute to the element
+ This is sort of a convenience method. All attributes in ODF have
+ namespaces. The library knows what attributes are legal and then allows
+ the user to provide the attribute as a keyword argument and the
+ library will add the correct namespace.
+ Must overwrite, If attribute already exists.
+ """
+ allowed_attrs = self.allowed_attributes()
+ if allowed_attrs is None:
+ if type(attr) == type(()):
+ prefix, localname = attr
+ self.setAttrNS(prefix, localname, value)
+ else:
+ raise AttributeError, "Unable to add simple attribute - use (namespace, localpart)"
+ else:
+ # Construct a list of allowed arguments
+ allowed_args = [ a[1].lower().replace('-','') for a in allowed_attrs]
+ if check_grammar and attr not in allowed_args:
+ raise AttributeError, "Attribute %s is not allowed in <%s>" % ( attr, self.tagName)
+ i = allowed_args.index(attr)
+ self.setAttrNS(allowed_attrs[i][0], allowed_attrs[i][1], value)
+
+ def setAttrNS(self, namespace, localpart, value):
+ """ Add an attribute to the element
+ In case you need to add an attribute the library doesn't know about
+ then you must provide the full qualified name
+ It will not check that the attribute is legal according to the schema.
+ Must overwrite, If attribute already exists.
+ """
+ allowed_attrs = self.allowed_attributes()
+ prefix = _nsassign(namespace)
+ if not self.namespaces.has_key(namespace):
+ self.namespaces[namespace] = prefix
+# if allowed_attrs and (namespace, localpart) not in allowed_attrs:
+# raise AttributeError, "Attribute %s:%s is not allowed in element <%s>" % ( prefix, localpart, self.tagName)
+ c = AttrConverters()
+ self.attributes[prefix + ":" + localpart] = c.convert((namespace, localpart), value, self.qname)
+
+ def getAttrNS(self, namespace, localpart):
+ prefix = _nsassign(namespace)
+ if not self.namespaces.has_key(namespace):
+ self.namespaces[namespace] = prefix
+ return self.attributes.get(prefix + ":" + localpart)
+
+ def removeAttrNS(self, namespace, localpart):
+ prefix = _nsassign(namespace)
+ if not self.namespaces.has_key(namespace):
+ self.namespaces[namespace] = prefix
+ del self.attributes[prefix + ":" + localpart]
+
+ def getAttribute(self, attr):
+ allowed_attrs = self.allowed_attributes()
+ if allowed_attrs is None:
+ if type(attr) == type(()):
+ prefix, localname = attr
+ return self.getAttrNS(prefix, localname)
+ else:
+ raise AttributeError, "Unable to get simple attribute - use (namespace, localpart)"
+ else:
+ # Construct a list of allowed arguments
+ allowed_args = [ a[1].lower().replace('-','') for a in allowed_attrs]
+ i = allowed_args.index(attr)
+ return self.getAttrNS(allowed_attrs[i][0], allowed_attrs[i][1])
+
+ def write_open_tag(self, level, f):
+ f.write('<'+self.tagName)
+ if level == 0:
+ for namespace, prefix in self.namespaces.items():
+ f.write(' xmlns:' + prefix + '="'+ _escape(str(namespace))+'"')
+ for attkey in self.attributes.keys():
+ f.write(' '+_escape(str(attkey))+'='+_quoteattr(unicode(self.attributes[attkey]).encode('utf-8')))
+ f.write('>')
+
+ def write_close_tag(self, level, f):
+ f.write(''+self.tagName+'>')
+
+ def toXml(self, level, f):
+ """ Generate XML stream out of the tree structure """
+ f.write('<'+self.tagName)
+ if level == 0:
+ for namespace, prefix in self.namespaces.items():
+ f.write(' xmlns:' + prefix + '="'+ _escape(str(namespace))+'"')
+ for attkey in self.attributes.keys():
+ f.write(' '+_escape(str(attkey))+'='+_quoteattr(unicode(self.attributes[attkey]).encode('utf-8')))
+ if self.childNodes:
+ f.write('>')
+ for element in self.childNodes:
+ element.toXml(level+1,f)
+ f.write(''+self.tagName+'>')
+ else:
+ f.write('/>')
+
+ def _getElementsByObj(self, obj, accumulator):
+ if self.qname == obj.qname:
+ accumulator.append(self)
+ for e in self.childNodes:
+ if e.nodeType == Node.ELEMENT_NODE:
+ accumulator = e._getElementsByObj(obj, accumulator)
+ return accumulator
+
+ def getElementsByType(self, element):
+ obj = element(check_grammar=False)
+ return self._getElementsByObj(obj,[])
+
diff --git a/src/odf/elementtypes.py b/src/odf/elementtypes.py
new file mode 100644
index 0000000000..4663b1e81d
--- /dev/null
+++ b/src/odf/elementtypes.py
@@ -0,0 +1,330 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# 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 *
+
+# Inline element don't cause a box
+# They are analogous to the HTML elements SPAN, B, I etc.
+inline_elements = (
+ (TEXTNS,u'a'),
+ (TEXTNS,u'author-initials'),
+ (TEXTNS,u'author-name'),
+ (TEXTNS,u'bibliography-mark'),
+ (TEXTNS,u'bookmark-ref'),
+ (TEXTNS,u'chapter'),
+ (TEXTNS,u'character-count'),
+ (TEXTNS,u'conditional-text'),
+ (TEXTNS,u'creation-date'),
+ (TEXTNS,u'creation-time'),
+ (TEXTNS,u'creator'),
+ (TEXTNS,u'database-display'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'database-next'),
+ (TEXTNS,u'database-row-number'),
+ (TEXTNS,u'database-row-select'),
+ (TEXTNS,u'date'),
+ (TEXTNS,u'dde-connection'),
+ (TEXTNS,u'description'),
+ (TEXTNS,u'editing-cycles'),
+ (TEXTNS,u'editing-duration'),
+ (TEXTNS,u'execute-macro'),
+ (TEXTNS,u'expression'),
+ (TEXTNS,u'file-name'),
+ (TEXTNS,u'hidden-paragraph'),
+ (TEXTNS,u'hidden-text'),
+ (TEXTNS,u'image-count'),
+ (TEXTNS,u'initial-creator'),
+ (TEXTNS,u'keywords'),
+ (TEXTNS,u'measure'),
+ (TEXTNS,u'modification-date'),
+ (TEXTNS,u'modification-time'),
+ (TEXTNS,u'note-ref'),
+ (TEXTNS,u'object-count'),
+ (TEXTNS,u'page-continuation'),
+ (TEXTNS,u'page-count'),
+ (TEXTNS,u'page-number'),
+ (TEXTNS,u'page-variable-get'),
+ (TEXTNS,u'page-variable-set'),
+ (TEXTNS,u'paragraph-count'),
+ (TEXTNS,u'placeholder'),
+ (TEXTNS,u'print-date'),
+ (TEXTNS,u'printed-by'),
+ (TEXTNS,u'print-time'),
+ (TEXTNS,u'reference-ref'),
+ (TEXTNS,u'ruby'),
+ (TEXTNS,u'ruby-base'),
+ (TEXTNS,u'ruby-text'),
+ (TEXTNS,u'script'),
+ (TEXTNS,u'sender-city'),
+ (TEXTNS,u'sender-company'),
+ (TEXTNS,u'sender-country'),
+ (TEXTNS,u'sender-email'),
+ (TEXTNS,u'sender-fax'),
+ (TEXTNS,u'sender-firstname'),
+ (TEXTNS,u'sender-initials'),
+ (TEXTNS,u'sender-lastname'),
+ (TEXTNS,u'sender-phone-private'),
+ (TEXTNS,u'sender-phone-work'),
+ (TEXTNS,u'sender-position'),
+ (TEXTNS,u'sender-postal-code'),
+ (TEXTNS,u'sender-state-or-province'),
+ (TEXTNS,u'sender-street'),
+ (TEXTNS,u'sender-title'),
+ (TEXTNS,u'sequence'),
+ (TEXTNS,u'sequence-ref'),
+ (TEXTNS,u'sheet-name'),
+ (TEXTNS,u'span'),
+ (TEXTNS,u'subject'),
+ (TEXTNS,u'table-count'),
+ (TEXTNS,u'table-formula'),
+ (TEXTNS,u'template-name'),
+ (TEXTNS,u'text-input'),
+ (TEXTNS,u'time'),
+ (TEXTNS,u'title'),
+ (TEXTNS,u'user-defined'),
+ (TEXTNS,u'user-field-get'),
+ (TEXTNS,u'user-field-input'),
+ (TEXTNS,u'variable-get'),
+ (TEXTNS,u'variable-input'),
+ (TEXTNS,u'variable-set'),
+ (TEXTNS,u'word-count'),
+)
+
+
+struct_elements = (
+ (CONFIGNS,'config-item-set'),
+ (TABLENS,u'table-cell'),
+)
+
+# It is almost impossible to determine what elements are block elements.
+# There are so many that don't fit the form
+block_elements = (
+ (TEXTNS,u'h'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'list-item'),
+ (TEXTNS,u'section'),
+)
+
+declarative_elements = (
+ (OFFICENS,u'font-face-decls'),
+ (PRESENTATIONNS,u'date-time-decl'),
+ (PRESENTATIONNS,u'footer-decl'),
+ (PRESENTATIONNS,u'header-decl'),
+ (TABLENS,u'table-template'),
+ (TEXTNS,u'alphabetical-index-entry-template'),
+ (TEXTNS,u'alphabetical-index-source'),
+ (TEXTNS,u'bibliography-entry-template'),
+ (TEXTNS,u'bibliography-source'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'illustration-index-entry-template'),
+ (TEXTNS,u'illustration-index-source'),
+ (TEXTNS,u'index-source-styles'),
+ (TEXTNS,u'index-title-template'),
+ (TEXTNS,u'note-continuation-notice-backward'),
+ (TEXTNS,u'note-continuation-notice-forward'),
+ (TEXTNS,u'notes-configuration'),
+ (TEXTNS,u'object-index-entry-template'),
+ (TEXTNS,u'object-index-source'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'table-index-entry-template'),
+ (TEXTNS,u'table-index-source'),
+ (TEXTNS,u'table-of-content-entry-template'),
+ (TEXTNS,u'table-of-content-source'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'user-index-entry-template'),
+ (TEXTNS,u'user-index-source'),
+ (TEXTNS,u'variable-decls'),
+)
+
+empty_elements = (
+ (ANIMNS,u'animate'),
+ (ANIMNS,u'animateColor'),
+ (ANIMNS,u'animateMotion'),
+ (ANIMNS,u'animateTransform'),
+ (ANIMNS,u'audio'),
+ (ANIMNS,u'param'),
+ (ANIMNS,u'set'),
+ (ANIMNS,u'transitionFilter'),
+ (CHARTNS,u'categories'),
+ (CHARTNS,u'data-point'),
+ (CHARTNS,u'domain'),
+ (CHARTNS,u'error-indicator'),
+ (CHARTNS,u'floor'),
+ (CHARTNS,u'grid'),
+ (CHARTNS,u'legend'),
+ (CHARTNS,u'mean-value'),
+ (CHARTNS,u'regression-curve'),
+ (CHARTNS,u'stock-gain-marker'),
+ (CHARTNS,u'stock-loss-marker'),
+ (CHARTNS,u'stock-range-line'),
+ (CHARTNS,u'symbol-image'),
+ (CHARTNS,u'wall'),
+ (DR3DNS,u'cube'),
+ (DR3DNS,u'extrude'),
+ (DR3DNS,u'light'),
+ (DR3DNS,u'rotate'),
+ (DR3DNS,u'sphere'),
+ (DRAWNS,u'contour-path'),
+ (DRAWNS,u'contour-polygon'),
+ (DRAWNS,u'equation'),
+ (DRAWNS,u'fill-image'),
+ (DRAWNS,u'floating-frame'),
+ (DRAWNS,u'glue-point'),
+ (DRAWNS,u'gradient'),
+ (DRAWNS,u'handle'),
+ (DRAWNS,u'hatch'),
+ (DRAWNS,u'layer'),
+ (DRAWNS,u'marker'),
+ (DRAWNS,u'opacity'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'param'),
+ (DRAWNS,u'stroke-dash'),
+ (FORMNS,u'connection-resource'),
+ (FORMNS,u'list-value'),
+ (FORMNS,u'property'),
+ (MANIFESTNS,u'algorithm'),
+ (MANIFESTNS,u'key-derivation'),
+ (METANS,u'auto-reload'),
+ (METANS,u'document-statistic'),
+ (METANS,u'hyperlink-behaviour'),
+ (METANS,u'template'),
+ (NUMBERNS,u'am-pm'),
+ (NUMBERNS,u'boolean'),
+ (NUMBERNS,u'day'),
+ (NUMBERNS,u'day-of-week'),
+ (NUMBERNS,u'era'),
+ (NUMBERNS,u'fraction'),
+ (NUMBERNS,u'hours'),
+ (NUMBERNS,u'minutes'),
+ (NUMBERNS,u'month'),
+ (NUMBERNS,u'quarter'),
+ (NUMBERNS,u'scientific-number'),
+ (NUMBERNS,u'seconds'),
+ (NUMBERNS,u'text-content'),
+ (NUMBERNS,u'week-of-year'),
+ (NUMBERNS,u'year'),
+ (OFFICENS,u'dde-source'),
+ (PRESENTATIONNS,u'date-time'),
+ (PRESENTATIONNS,u'footer'),
+ (PRESENTATIONNS,u'header'),
+ (PRESENTATIONNS,u'placeholder'),
+ (PRESENTATIONNS,u'play'),
+ (PRESENTATIONNS,u'show'),
+ (PRESENTATIONNS,u'sound'),
+ (SCRIPTNS,u'event-listener'),
+ (STYLENS,u'column'),
+ (STYLENS,u'column-sep'),
+ (STYLENS,u'drop-cap'),
+ (STYLENS,u'footnote-sep'),
+ (STYLENS,u'list-level-properties'),
+ (STYLENS,u'map'),
+ (STYLENS,u'ruby-properties'),
+ (STYLENS,u'table-column-properties'),
+ (STYLENS,u'tab-stop'),
+ (STYLENS,u'text-properties'),
+ (SVGNS,u'definition-src'),
+ (SVGNS,u'font-face-format'),
+ (SVGNS,u'font-face-name'),
+ (SVGNS,u'stop'),
+ (TABLENS,u'body'),
+ (TABLENS,u'cell-address'),
+ (TABLENS,u'cell-range-source'),
+ (TABLENS,u'change-deletion'),
+ (TABLENS,u'consolidation'),
+ (TABLENS,u'database-source-query'),
+ (TABLENS,u'database-source-sql'),
+ (TABLENS,u'database-source-table'),
+ (TABLENS,u'data-pilot-display-info'),
+ (TABLENS,u'data-pilot-field-reference'),
+ (TABLENS,u'data-pilot-group-member'),
+ (TABLENS,u'data-pilot-layout-info'),
+ (TABLENS,u'data-pilot-member'),
+ (TABLENS,u'data-pilot-sort-info'),
+ (TABLENS,u'data-pilot-subtotal'),
+ (TABLENS,u'dependency'),
+ (TABLENS,u'error-macro'),
+ (TABLENS,u'even-columns'),
+ (TABLENS,u'even-rows'),
+ (TABLENS,u'filter-condition'),
+ (TABLENS,u'first-column'),
+ (TABLENS,u'first-row'),
+ (TABLENS,u'highlighted-range'),
+ (TABLENS,u'insertion-cut-off'),
+ (TABLENS,u'iteration'),
+ (TABLENS,u'label-range'),
+ (TABLENS,u'last-column'),
+ (TABLENS,u'last-row'),
+ (TABLENS,u'movement-cut-off'),
+ (TABLENS,u'named-expression'),
+ (TABLENS,u'named-range'),
+ (TABLENS,u'null-date'),
+ (TABLENS,u'odd-columns'),
+ (TABLENS,u'odd-rows'),
+ (TABLENS,u'operation'),
+ (TABLENS,u'scenario'),
+ (TABLENS,u'sort-by'),
+ (TABLENS,u'sort-groups'),
+ (TABLENS,u'source-range-address'),
+ (TABLENS,u'source-service'),
+ (TABLENS,u'subtotal-field'),
+ (TABLENS,u'table-column'),
+ (TABLENS,u'table-source'),
+ (TABLENS,u'target-range-address'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'alphabetical-index-mark'),
+ (TEXTNS,u'alphabetical-index-mark-end'),
+ (TEXTNS,u'alphabetical-index-mark-start'),
+ (TEXTNS,u'bookmark'),
+ (TEXTNS,u'bookmark-end'),
+ (TEXTNS,u'bookmark-start'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'dde-connection-decl'),
+ (TEXTNS,u'index-entry-bibliography'),
+ (TEXTNS,u'index-entry-chapter'),
+ (TEXTNS,u'index-entry-link-end'),
+ (TEXTNS,u'index-entry-link-start'),
+ (TEXTNS,u'index-entry-page-number'),
+ (TEXTNS,u'index-entry-tab-stop'),
+ (TEXTNS,u'index-entry-text'),
+ (TEXTNS,u'index-source-style'),
+ (TEXTNS,u'line-break'),
+ (TEXTNS,u'page'),
+ (TEXTNS,u'reference-mark'),
+ (TEXTNS,u'reference-mark-end'),
+ (TEXTNS,u'reference-mark-start'),
+ (TEXTNS,u's'),
+ (TEXTNS,u'section-source'),
+ (TEXTNS,u'sequence-decl'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'sort-key'),
+ (TEXTNS,u'tab'),
+ (TEXTNS,u'toc-mark'),
+ (TEXTNS,u'toc-mark-end'),
+ (TEXTNS,u'toc-mark-start'),
+ (TEXTNS,u'user-field-decl'),
+ (TEXTNS,u'user-index-mark'),
+ (TEXTNS,u'user-index-mark-end'),
+ (TEXTNS,u'user-index-mark-start'),
+ (TEXTNS,u'variable-decl')
+)
diff --git a/src/odf/form.py b/src/odf/form.py
new file mode 100644
index 0000000000..7969b84018
--- /dev/null
+++ b/src/odf/form.py
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 FORMNS
+from element import Element
+
+
+# Autogenerated
+def Button(**args):
+ return Element(qname = (FORMNS,'button'), **args)
+
+def Checkbox(**args):
+ return Element(qname = (FORMNS,'checkbox'), **args)
+
+def Column(**args):
+ return Element(qname = (FORMNS,'column'), **args)
+
+def Combobox(**args):
+ return Element(qname = (FORMNS,'combobox'), **args)
+
+def ConnectionResource(**args):
+ return Element(qname = (FORMNS,'connection-resource'), **args)
+
+def Date(**args):
+ return Element(qname = (FORMNS,'date'), **args)
+
+def File(**args):
+ return Element(qname = (FORMNS,'file'), **args)
+
+def FixedText(**args):
+ return Element(qname = (FORMNS,'fixed-text'), **args)
+
+def Form(**args):
+ return Element(qname = (FORMNS,'form'), **args)
+
+def FormattedText(**args):
+ return Element(qname = (FORMNS,'formatted-text'), **args)
+
+def Frame(**args):
+ return Element(qname = (FORMNS,'frame'), **args)
+
+def GenericControl(**args):
+ return Element(qname = (FORMNS,'generic-control'), **args)
+
+def Grid(**args):
+ return Element(qname = (FORMNS,'grid'), **args)
+
+def Hidden(**args):
+ return Element(qname = (FORMNS,'hidden'), **args)
+
+def Image(**args):
+ return Element(qname = (FORMNS,'image'), **args)
+
+def ImageFrame(**args):
+ return Element(qname = (FORMNS,'image-frame'), **args)
+
+def Item(**args):
+ return Element(qname = (FORMNS,'item'), **args)
+
+def ListProperty(**args):
+ return Element(qname = (FORMNS,'list-property'), **args)
+
+def ListValue(**args):
+ return Element(qname = (FORMNS,'list-value'), **args)
+
+def Listbox(**args):
+ return Element(qname = (FORMNS,'listbox'), **args)
+
+def Number(**args):
+ return Element(qname = (FORMNS,'number'), **args)
+
+def Option(**args):
+ return Element(qname = (FORMNS,'option'), **args)
+
+def Password(**args):
+ return Element(qname = (FORMNS,'password'), **args)
+
+def Properties(**args):
+ return Element(qname = (FORMNS,'properties'), **args)
+
+def Property(**args):
+ return Element(qname = (FORMNS,'property'), **args)
+
+def Radio(**args):
+ return Element(qname = (FORMNS,'radio'), **args)
+
+def Text(**args):
+ return Element(qname = (FORMNS,'text'), **args)
+
+def Textarea(**args):
+ return Element(qname = (FORMNS,'textarea'), **args)
+
+def Time(**args):
+ return Element(qname = (FORMNS,'time'), **args)
+
+def ValueRange(**args):
+ return Element(qname = (FORMNS,'value-range'), **args)
+
diff --git a/src/odf/grammar.py b/src/odf/grammar.py
new file mode 100644
index 0000000000..1c74463bea
--- /dev/null
+++ b/src/odf/grammar.py
@@ -0,0 +1,8150 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-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):
+#
+
+__doc__=""" In principle the OpenDocument schema converted to python structures.
+Currently it contains the legal child elements of a given element.
+To be used for validation check in the API
+"""
+
+from namespaces import *
+
+# The following code is generated from the RelaxNG schema with this notice:
+
+# OASIS OpenDocument v1.0
+# OASIS standard, 1 May 2005
+# Relax-NG Manifest Schema
+
+# © 2002-2005 OASIS Open
+# © 1999-2005 Sun Microsystems, Inc.
+
+# This document and translations of it may be copied and furnished
+# to others, and derivative works that comment on or otherwise explain
+# it or assist in its implementation may be prepared, copied,
+# published and distributed, in whole or in part, without restriction
+# of any kind, provided that the above copyright notice and this
+# paragraph are included on all such copies and derivative works.
+# However, this document itself does not be modified in any way, such
+# as by removing the copyright notice or references to OASIS, except
+# as needed for the purpose of developing OASIS specifications, in
+# which case the procedures for copyrights defined in the OASIS
+# Intellectual Property Rights document must be followed, or as
+# required to translate it into languages other than English.
+#
+
+allowed_children = {
+ (DCNS,u'creator') : (
+ ),
+ (DCNS,u'date') : (
+ ),
+ (DCNS,u'description') : (
+ ),
+ (DCNS,u'language') : (
+ ),
+ (DCNS,u'subject') : (
+ ),
+ (DCNS,u'title') : (
+ ),
+# Completes Dublin Core start
+# (DCNS,'contributor') : (
+# ),
+# (DCNS,'coverage') : (
+# ),
+# (DCNS,'format') : (
+# ),
+# (DCNS,'identifier') : (
+# ),
+# (DCNS,'publisher') : (
+# ),
+# (DCNS,'relation') : (
+# ),
+# (DCNS,'rights') : (
+# ),
+# (DCNS,'source') : (
+# ),
+# (DCNS,'type') : (
+# ),
+# Completes Dublin Core end
+ (MATHNS,u'math') : None,
+
+ (XFORMSNS,u'model') : None,
+
+ (ANIMNS,u'animate') : (
+ ),
+ (ANIMNS,u'animateColor') : (
+ ),
+ (ANIMNS,u'animateMotion') : (
+ ),
+ (ANIMNS,u'animateTransform') : (
+ ),
+ (ANIMNS,u'audio') : (
+ ),
+ (ANIMNS,u'command') : (
+ (ANIMNS,u'param'),
+ ),
+# allowed_children
+ (ANIMNS,u'iterate') : (
+ (ANIMNS,u'animate'),
+ (ANIMNS,u'animateColor'),
+ (ANIMNS,u'animateMotion'),
+ (ANIMNS,u'animateTransform'),
+ (ANIMNS,u'audio'),
+ (ANIMNS,u'command'),
+ (ANIMNS,u'iterate'),
+ (ANIMNS,u'par'),
+ (ANIMNS,u'seq'),
+ (ANIMNS,u'set'),
+ (ANIMNS,u'transitionFilter'),
+ ),
+ (ANIMNS,u'par') : (
+ (ANIMNS,u'animate'),
+ (ANIMNS,u'animateColor'),
+ (ANIMNS,u'animateMotion'),
+ (ANIMNS,u'animateTransform'),
+ (ANIMNS,u'audio'),
+ (ANIMNS,u'command'),
+ (ANIMNS,u'iterate'),
+ (ANIMNS,u'par'),
+ (ANIMNS,u'seq'),
+ (ANIMNS,u'set'),
+ (ANIMNS,u'transitionFilter'),
+ ),
+# allowed_children
+ (ANIMNS,u'param') : (
+ ),
+ (ANIMNS,u'seq') : (
+ (ANIMNS,u'animate'),
+ (ANIMNS,u'animateColor'),
+ (ANIMNS,u'animateMotion'),
+ (ANIMNS,u'animateTransform'),
+ (ANIMNS,u'audio'),
+ (ANIMNS,u'command'),
+ (ANIMNS,u'iterate'),
+ (ANIMNS,u'par'),
+ (ANIMNS,u'seq'),
+ (ANIMNS,u'set'),
+ (ANIMNS,u'transitionFilter'),
+ ),
+ (ANIMNS,u'set') : (
+ ),
+ (ANIMNS,u'transitionFilter') : (
+ ),
+ (CHARTNS,u'axis') : (
+ (CHARTNS,u'categories'),
+ (CHARTNS,u'grid'),
+ (CHARTNS,u'title'),
+ ),
+# allowed_children
+ (CHARTNS,u'categories') : (
+ ),
+ (CHARTNS,u'chart') : (
+ (CHARTNS,u'footer'),
+ (CHARTNS,u'legend'),
+ (CHARTNS,u'plot-area'),
+ (CHARTNS,u'subtitle'),
+ (CHARTNS,u'title'),
+ (TABLENS,u'table'),
+ ),
+ (CHARTNS,u'data-point') : (
+ ),
+ (CHARTNS,u'domain') : (
+ ),
+ (CHARTNS,u'error-indicator') : (
+ ),
+ (CHARTNS,u'floor') : (
+ ),
+ (CHARTNS,u'footer') : (
+ (TEXTNS,u'p'),
+ ),
+ (CHARTNS,u'grid') : (
+ ),
+ (CHARTNS,u'legend') : (
+ ),
+# allowed_children
+ (CHARTNS,u'mean-value') : (
+ ),
+ (CHARTNS,u'plot-area') : (
+ (CHARTNS,u'axis'),
+ (CHARTNS,u'floor'),
+ (CHARTNS,u'series'),
+ (CHARTNS,u'stock-gain-marker'),
+ (CHARTNS,u'stock-loss-marker'),
+ (CHARTNS,u'stock-range-line'),
+ (CHARTNS,u'wall'),
+ (DR3DNS,u'light'),
+ ),
+ (CHARTNS,u'regression-curve') : (
+ ),
+ (CHARTNS,u'series') : (
+ (CHARTNS,u'data-point'),
+ (CHARTNS,u'domain'),
+ (CHARTNS,u'error-indicator'),
+ (CHARTNS,u'mean-value'),
+ (CHARTNS,u'regression-curve'),
+ ),
+ (CHARTNS,u'stock-gain-marker') : (
+ ),
+ (CHARTNS,u'stock-loss-marker') : (
+ ),
+# allowed_children
+ (CHARTNS,u'stock-range-line') : (
+ ),
+ (CHARTNS,u'subtitle') : (
+ (TEXTNS,u'p'),
+ ),
+ (CHARTNS,u'symbol-image') : (
+ ),
+ (CHARTNS,u'title') : (
+ (TEXTNS,u'p'),
+ ),
+ (CHARTNS,u'wall') : (
+ ),
+ (CONFIGNS,u'config-item') : (
+ ),
+ (CONFIGNS,u'config-item-map-entry') : (
+ (CONFIGNS,u'config-item'),
+ (CONFIGNS,u'config-item-map-indexed'),
+ (CONFIGNS,u'config-item-map-named'),
+ (CONFIGNS,u'config-item-set'),
+ ),
+ (CONFIGNS,u'config-item-map-indexed') : (
+ (CONFIGNS,u'config-item-map-entry'),
+ ),
+ (CONFIGNS,u'config-item-map-named') : (
+ (CONFIGNS,u'config-item-map-entry'),
+ ),
+# allowed_children
+ (CONFIGNS,u'config-item-set') : (
+ (CONFIGNS,u'config-item'),
+ (CONFIGNS,u'config-item-map-indexed'),
+ (CONFIGNS,u'config-item-map-named'),
+ (CONFIGNS,u'config-item-set'),
+ ),
+ (MANIFESTNS,u'algorithm') : (
+ ),
+ (MANIFESTNS,u'encryption-data') : (
+ (MANIFESTNS,u'algorithm'),
+ (MANIFESTNS,u'key-derivation'),
+ ),
+ (MANIFESTNS,u'file-entry') : (
+ (MANIFESTNS,u'encryption-data'),
+ ),
+ (MANIFESTNS,u'key-derivation') : (
+ ),
+ (MANIFESTNS,u'manifest') : (
+ (MANIFESTNS,u'file-entry'),
+ ),
+ (NUMBERNS,u'am-pm') : (
+ ),
+ (NUMBERNS,u'boolean') : (
+ ),
+# allowed_children
+ (NUMBERNS,u'boolean-style') : (
+ (NUMBERNS,u'boolean'),
+ (NUMBERNS,u'text'),
+ (STYLENS,u'map'),
+ (STYLENS,u'text-properties'),
+ ),
+ (NUMBERNS,u'currency-style') : (
+ (NUMBERNS,u'currency-symbol'),
+ (NUMBERNS,u'number'),
+ (NUMBERNS,u'text'),
+ (STYLENS,u'map'),
+ (STYLENS,u'text-properties'),
+ ),
+ (NUMBERNS,u'currency-symbol') : (
+ ),
+ (NUMBERNS,u'date-style') : (
+ (NUMBERNS,u'am-pm'),
+ (NUMBERNS,u'day'),
+ (NUMBERNS,u'day-of-week'),
+ (NUMBERNS,u'era'),
+ (NUMBERNS,u'hours'),
+ (NUMBERNS,u'minutes'),
+ (NUMBERNS,u'month'),
+ (NUMBERNS,u'quarter'),
+ (NUMBERNS,u'seconds'),
+ (NUMBERNS,u'text'),
+ (NUMBERNS,u'week-of-year'),
+ (NUMBERNS,u'year'),
+ (STYLENS,u'map'),
+ (STYLENS,u'text-properties'),
+ ),
+# allowed_children
+ (NUMBERNS,u'day') : (
+ ),
+ (NUMBERNS,u'day-of-week') : (
+ ),
+ (NUMBERNS,u'embedded-text') : (
+ ),
+ (NUMBERNS,u'era') : (
+ ),
+ (NUMBERNS,u'fraction') : (
+ ),
+ (NUMBERNS,u'hours') : (
+ ),
+ (NUMBERNS,u'minutes') : (
+ ),
+ (NUMBERNS,u'month') : (
+ ),
+ (NUMBERNS,u'number') : (
+ (NUMBERNS,u'embedded-text'),
+ ),
+ (NUMBERNS,u'number-style') : (
+ (NUMBERNS,u'fraction'),
+ (NUMBERNS,u'number'),
+ (NUMBERNS,u'scientific-number'),
+ (NUMBERNS,u'text'),
+ (STYLENS,u'map'),
+ (STYLENS,u'text-properties'),
+ ),
+# allowed_children
+ (NUMBERNS,u'percentage-style') : (
+ (NUMBERNS,u'number'),
+ (NUMBERNS,u'text'),
+ (STYLENS,u'map'),
+ (STYLENS,u'text-properties'),
+ ),
+ (NUMBERNS,u'quarter') : (
+ ),
+ (NUMBERNS,u'scientific-number') : (
+ ),
+ (NUMBERNS,u'seconds') : (
+ ),
+ (NUMBERNS,u'text') : (
+ ),
+ (NUMBERNS,u'text-content') : (
+ ),
+ (NUMBERNS,u'text-style') : (
+ (NUMBERNS,u'text'),
+ (NUMBERNS,u'text-content'),
+ (STYLENS,u'map'),
+ (STYLENS,u'text-properties'),
+ ),
+ (NUMBERNS,u'time-style') : (
+ (NUMBERNS,u'am-pm'),
+ (NUMBERNS,u'hours'),
+ (NUMBERNS,u'minutes'),
+ (NUMBERNS,u'seconds'),
+ (NUMBERNS,u'text'),
+ (STYLENS,u'map'),
+ (STYLENS,u'text-properties'),
+ ),
+# allowed_children
+ (NUMBERNS,u'week-of-year') : (
+ ),
+ (NUMBERNS,u'year') : (
+ ),
+ (DR3DNS,u'cube') : (
+ ),
+ (DR3DNS,u'extrude') : (
+ ),
+ (DR3DNS,u'light') : (
+ ),
+ (DR3DNS,u'rotate') : (
+ ),
+ (DR3DNS,u'scene') : (
+ (DR3DNS,u'cube'),
+ (DR3DNS,u'extrude'),
+ (DR3DNS,u'light'),
+ (DR3DNS,u'rotate'),
+ (DR3DNS,u'scene'),
+ (DR3DNS,u'sphere'),
+ ),
+ (DR3DNS,u'sphere') : (
+ ),
+ (DRAWNS,u'a') : (
+ (DRAWNS,u'frame'),
+ ),
+# allowed_children
+ (DRAWNS,u'applet') : (
+ (DRAWNS,u'param'),
+ ),
+ (DRAWNS,u'area-circle') : (
+ (OFFICENS,u'event-listeners'),
+ (SVGNS,u'desc'),
+ ),
+ (DRAWNS,u'area-polygon') : (
+ (OFFICENS,u'event-listeners'),
+ (SVGNS,u'desc'),
+ ),
+ (DRAWNS,u'area-rectangle') : (
+ (OFFICENS,u'event-listeners'),
+ (SVGNS,u'desc'),
+ ),
+ (DRAWNS,u'caption') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'circle') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+# allowed_children
+ (DRAWNS,u'connector') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'contour-path') : (
+ ),
+ (DRAWNS,u'contour-polygon') : (
+ ),
+ (DRAWNS,u'control') : (
+ (DRAWNS,u'glue-point'),
+ ),
+ (DRAWNS,u'custom-shape') : (
+ (DRAWNS,u'enhanced-geometry'),
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'ellipse') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'enhanced-geometry') : (
+ (DRAWNS,u'equation'),
+ (DRAWNS,u'handle'),
+ ),
+ (DRAWNS,u'equation') : (
+ ),
+ (DRAWNS,u'fill-image') : (
+ ),
+ (DRAWNS,u'floating-frame') : (
+ ),
+ (DRAWNS,u'frame') : (
+ (DRAWNS,u'applet'),
+ (DRAWNS,u'contour-path'),
+ (DRAWNS,u'contour-polygon'),
+ (DRAWNS,u'floating-frame'),
+ (DRAWNS,u'glue-point'),
+ (DRAWNS,u'image'),
+ (DRAWNS,u'image-map'),
+ (DRAWNS,u'object'),
+ (DRAWNS,u'object-ole'),
+ (DRAWNS,u'plugin'),
+ (DRAWNS,u'text-box'),
+ (OFFICENS,u'event-listeners'),
+ (SVGNS,u'desc'),
+ ),
+ (DRAWNS,u'g') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'glue-point'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (DRAWNS,u'glue-point') : (
+ ),
+ (DRAWNS,u'gradient') : (
+ ),
+ (DRAWNS,u'handle') : (
+ ),
+ (DRAWNS,u'hatch') : (
+ ),
+# allowed_children
+ (DRAWNS,u'image') : (
+ (OFFICENS,u'binary-data'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'image-map') : (
+ (DRAWNS,u'area-circle'),
+ (DRAWNS,u'area-polygon'),
+ (DRAWNS,u'area-rectangle'),
+ ),
+ (DRAWNS,u'layer') : (
+ ),
+ (DRAWNS,u'layer-set') : (
+ (DRAWNS,u'layer'),
+ ),
+ (DRAWNS,u'line') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'marker') : (
+ ),
+ (DRAWNS,u'measure') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'object') : (
+ (MATHNS,u'math'),
+ (OFFICENS,u'document'),
+ ),
+ (DRAWNS,u'object-ole') : (
+ (OFFICENS,u'binary-data'),
+ ),
+ (DRAWNS,u'opacity') : (
+ ),
+ (DRAWNS,u'page') : (
+ (ANIMNS,u'animate'),
+ (ANIMNS,u'animateColor'),
+ (ANIMNS,u'animateMotion'),
+ (ANIMNS,u'animateTransform'),
+ (ANIMNS,u'audio'),
+ (ANIMNS,u'command'),
+ (ANIMNS,u'iterate'),
+ (ANIMNS,u'par'),
+ (ANIMNS,u'seq'),
+ (ANIMNS,u'set'),
+ (ANIMNS,u'transitionFilter'),
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'forms'),
+ (PRESENTATIONNS,u'animations'),
+ (PRESENTATIONNS,u'notes'),
+ ),
+ (DRAWNS,u'page-thumbnail') : (
+ ),
+ (DRAWNS,u'param') : (
+ ),
+ (DRAWNS,u'path') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'plugin') : (
+ (DRAWNS,u'param'),
+ ),
+ (DRAWNS,u'polygon') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'polyline') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'rect') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'regular-polygon') : (
+ (DRAWNS,u'glue-point'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (DRAWNS,u'stroke-dash') : (
+ ),
+ (DRAWNS,u'text-box') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-index'),
+ ),
+ (FORMNS,u'button') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'checkbox') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'column') : (
+ (FORMNS,u'checkbox'),
+ (FORMNS,u'combobox'),
+ (FORMNS,u'date'),
+ (FORMNS,u'formatted-text'),
+ (FORMNS,u'listbox'),
+ (FORMNS,u'number'),
+ (FORMNS,u'text'),
+ (FORMNS,u'textarea'),
+ ),
+ (FORMNS,u'combobox') : (
+ (FORMNS,u'item'),
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'connection-resource') : (
+ ),
+ (FORMNS,u'date') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'file') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'fixed-text') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+# allowed_children
+ (FORMNS,u'form') : (
+ (FORMNS,u'button'),
+ (FORMNS,u'checkbox'),
+ (FORMNS,u'combobox'),
+ (FORMNS,u'connection-resource'),
+ (FORMNS,u'date'),
+ (FORMNS,u'file'),
+ (FORMNS,u'fixed-text'),
+ (FORMNS,u'form'),
+ (FORMNS,u'formatted-text'),
+ (FORMNS,u'frame'),
+ (FORMNS,u'generic-control'),
+ (FORMNS,u'grid'),
+ (FORMNS,u'hidden'),
+ (FORMNS,u'image'),
+ (FORMNS,u'image-frame'),
+ (FORMNS,u'listbox'),
+ (FORMNS,u'number'),
+ (FORMNS,u'password'),
+ (FORMNS,u'properties'),
+ (FORMNS,u'radio'),
+ (FORMNS,u'text'),
+ (FORMNS,u'textarea'),
+ (FORMNS,u'time'),
+ (FORMNS,u'value-range'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'formatted-text') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'frame') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'generic-control') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'grid') : (
+ (FORMNS,u'column'),
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'hidden') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'image') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'image-frame') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'item') : (
+ ),
+ (FORMNS,u'list-property') : (
+ (FORMNS,u'list-value'),
+ (FORMNS,u'list-value'),
+ (FORMNS,u'list-value'),
+ (FORMNS,u'list-value'),
+ (FORMNS,u'list-value'),
+ (FORMNS,u'list-value'),
+ (FORMNS,u'list-value'),
+ ),
+ (FORMNS,u'list-value') : (
+ ),
+ (FORMNS,u'listbox') : (
+ (FORMNS,u'option'),
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'number') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'option') : (
+ ),
+ (FORMNS,u'password') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'properties') : (
+ (FORMNS,u'list-property'),
+ (FORMNS,u'property'),
+ ),
+ (FORMNS,u'property') : (
+ ),
+ (FORMNS,u'radio') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'text') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'textarea') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ (TEXTNS,u'p'),
+ ),
+ (FORMNS,u'time') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (FORMNS,u'value-range') : (
+ (FORMNS,u'properties'),
+ (OFFICENS,u'event-listeners'),
+ ),
+ (METANS,u'auto-reload') : (
+ ),
+ (METANS,u'creation-date') : (
+ ),
+ (METANS,u'date-string') : (
+ ),
+ (METANS,u'document-statistic') : (
+ ),
+ (METANS,u'editing-cycles') : (
+ ),
+ (METANS,u'editing-duration') : (
+ ),
+ (METANS,u'generator') : (
+ ),
+ (METANS,u'hyperlink-behaviour') : (
+ ),
+ (METANS,u'initial-creator') : (
+ ),
+ (METANS,u'keyword') : (
+ ),
+ (METANS,u'print-date') : (
+ ),
+ (METANS,u'printed-by') : (
+ ),
+ (METANS,u'template') : (
+ ),
+ (METANS,u'user-defined') : (
+ ),
+# allowed_children
+ (OFFICENS,u'annotation') : (
+ (DCNS,u'creator'),
+ (DCNS,u'date'),
+ (METANS,u'date-string'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'p'),
+ ),
+ (OFFICENS,u'automatic-styles') : (
+ (NUMBERNS,u'boolean-style'),
+ (NUMBERNS,u'currency-style'),
+ (NUMBERNS,u'date-style'),
+ (NUMBERNS,u'number-style'),
+ (NUMBERNS,u'percentage-style'),
+ (NUMBERNS,u'text-style'),
+ (NUMBERNS,u'time-style'),
+ (STYLENS,u'page-layout'),
+ (STYLENS,u'style'),
+ (TEXTNS,u'list-style'),
+ ),
+ (OFFICENS,u'binary-data') : (
+ ),
+ (OFFICENS,u'body') : (
+ (OFFICENS,u'chart'),
+ (OFFICENS,u'drawing'),
+ (OFFICENS,u'image'),
+ (OFFICENS,u'presentation'),
+ (OFFICENS,u'spreadsheet'),
+ (OFFICENS,u'text'),
+ ),
+ (OFFICENS,u'change-info') : (
+ (DCNS,u'creator'),
+ (DCNS,u'date'),
+ (TEXTNS,u'p'),
+ ),
+ (OFFICENS,u'chart') : (
+ (CHARTNS,u'chart'),
+ (TABLENS,u'calculation-settings'),
+ (TABLENS,u'consolidation'),
+ (TABLENS,u'content-validations'),
+ (TABLENS,u'data-pilot-tables'),
+ (TABLENS,u'database-ranges'),
+ (TABLENS,u'dde-links'),
+ (TABLENS,u'label-ranges'),
+ (TABLENS,u'named-expressions'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'variable-decls'),
+ ),
+ (OFFICENS,u'dde-source') : (
+ ),
+ (OFFICENS,u'document') : (
+ (OFFICENS,u'automatic-styles'),
+ (OFFICENS,u'body'),
+ (OFFICENS,u'font-face-decls'),
+ (OFFICENS,u'master-styles'),
+ (OFFICENS,u'meta'),
+ (OFFICENS,u'scripts'),
+ (OFFICENS,u'settings'),
+ (OFFICENS,u'styles'),
+ ),
+ (OFFICENS,u'document-content') : (
+ (OFFICENS,u'automatic-styles'),
+ (OFFICENS,u'body'),
+ (OFFICENS,u'font-face-decls'),
+ (OFFICENS,u'scripts'),
+ ),
+ (OFFICENS,u'document-meta') : (
+ (OFFICENS,u'meta'),
+ ),
+ (OFFICENS,u'document-settings') : (
+ (OFFICENS,u'settings'),
+ ),
+ (OFFICENS,u'document-styles') : (
+ (OFFICENS,u'automatic-styles'),
+ (OFFICENS,u'font-face-decls'),
+ (OFFICENS,u'master-styles'),
+ (OFFICENS,u'styles'),
+ ),
+ (OFFICENS,u'drawing') : (
+ (DRAWNS,u'page'),
+ (TABLENS,u'calculation-settings'),
+ (TABLENS,u'consolidation'),
+ (TABLENS,u'content-validations'),
+ (TABLENS,u'data-pilot-tables'),
+ (TABLENS,u'database-ranges'),
+ (TABLENS,u'dde-links'),
+ (TABLENS,u'label-ranges'),
+ (TABLENS,u'named-expressions'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'variable-decls'),
+ ),
+ (OFFICENS,u'event-listeners') : (
+ (PRESENTATIONNS,u'event-listener'),
+ (SCRIPTNS,u'event-listener'),
+ ),
+ (OFFICENS,u'font-face-decls') : (
+ (STYLENS,u'font-face'),
+ ),
+# allowed_children
+ (OFFICENS,u'forms') : (
+ (XFORMSNS,u'model'),
+ (FORMNS,u'form'),
+ ),
+ (OFFICENS,u'image') : (
+ (DRAWNS,u'frame'),
+ ),
+ (OFFICENS,u'master-styles') : (
+ (DRAWNS,u'layer-set'),
+ (STYLENS,u'handout-master'),
+ (STYLENS,u'master-page'),
+ (TABLENS,u'table-template'),
+ ),
+ (OFFICENS,u'meta') : (
+ (DCNS,u'creator'),
+ (DCNS,u'date'),
+ (DCNS,u'description'),
+ (DCNS,u'language'),
+ (DCNS,u'subject'),
+ (DCNS,u'title'),
+# Completes Dublin Core start
+# (DCNS,'contributor'),
+# (DCNS,'coverage'),
+# (DCNS,'format'),
+# (DCNS,'identifier'),
+# (DCNS,'publisher'),
+# (DCNS,'relation'),
+# (DCNS,'rights'),
+# (DCNS,'source'),
+# (DCNS,'type'),
+# Completes Dublin Core end
+ (METANS,u'auto-reload'),
+ (METANS,u'creation-date'),
+ (METANS,u'document-statistic'),
+ (METANS,u'editing-cycles'),
+ (METANS,u'editing-duration'),
+ (METANS,u'generator'),
+ (METANS,u'hyperlink-behaviour'),
+ (METANS,u'initial-creator'),
+ (METANS,u'keyword'),
+ (METANS,u'print-date'),
+ (METANS,u'printed-by'),
+ (METANS,u'template'),
+ (METANS,u'user-defined'),
+ ),
+ (OFFICENS,u'presentation') : (
+ (DRAWNS,u'page'),
+ (PRESENTATIONNS,u'date-time-decl'),
+ (PRESENTATIONNS,u'footer-decl'),
+ (PRESENTATIONNS,u'header-decl'),
+ (PRESENTATIONNS,u'settings'),
+ (TABLENS,u'calculation-settings'),
+ (TABLENS,u'consolidation'),
+ (TABLENS,u'content-validations'),
+ (TABLENS,u'data-pilot-tables'),
+ (TABLENS,u'database-ranges'),
+ (TABLENS,u'dde-links'),
+ (TABLENS,u'label-ranges'),
+ (TABLENS,u'named-expressions'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'variable-decls'),
+ ),
+# allowed_children
+ (OFFICENS,u'script') : None,
+
+ (OFFICENS,u'scripts') : (
+ (OFFICENS,u'event-listeners'),
+ (OFFICENS,u'script'),
+ ),
+ (OFFICENS,u'settings') : (
+ (CONFIGNS,u'config-item-set'),
+ ),
+ (OFFICENS,u'spreadsheet') : (
+ (TABLENS,u'calculation-settings'),
+ (TABLENS,u'consolidation'),
+ (TABLENS,u'content-validations'),
+ (TABLENS,u'data-pilot-tables'),
+ (TABLENS,u'database-ranges'),
+ (TABLENS,u'dde-links'),
+ (TABLENS,u'label-ranges'),
+ (TABLENS,u'named-expressions'),
+ (TABLENS,u'table'),
+ (TABLENS,u'tracked-changes'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'variable-decls'),
+ ),
+ (OFFICENS,u'styles') : (
+ (NUMBERNS,u'boolean-style'),
+ (NUMBERNS,u'currency-style'),
+ (NUMBERNS,u'date-style'),
+ (NUMBERNS,u'number-style'),
+ (NUMBERNS,u'percentage-style'),
+ (NUMBERNS,u'text-style'),
+ (NUMBERNS,u'time-style'),
+ (DRAWNS,u'fill-image'),
+ (DRAWNS,u'gradient'),
+ (DRAWNS,u'hatch'),
+ (DRAWNS,u'marker'),
+ (DRAWNS,u'opacity'),
+ (DRAWNS,u'stroke-dash'),
+ (STYLENS,u'default-style'),
+ (STYLENS,u'presentation-page-layout'),
+ (STYLENS,u'style'),
+ (SVGNS,u'linearGradient'),
+ (SVGNS,u'radialGradient'),
+ (TEXTNS,u'bibliography-configuration'),
+ (TEXTNS,u'linenumbering-configuration'),
+ (TEXTNS,u'list-style'),
+ (TEXTNS,u'notes-configuration'),
+ (TEXTNS,u'outline-style'),
+ ),
+ (OFFICENS,u'text') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'forms'),
+ (TABLENS,u'calculation-settings'),
+ (TABLENS,u'consolidation'),
+ (TABLENS,u'content-validations'),
+ (TABLENS,u'data-pilot-tables'),
+ (TABLENS,u'database-ranges'),
+ (TABLENS,u'dde-links'),
+ (TABLENS,u'label-ranges'),
+ (TABLENS,u'named-expressions'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'page-sequence'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'tracked-changes'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'user-index'),
+ (TEXTNS,u'variable-decls'),
+ ),
+ (PRESENTATIONNS,u'animation-group') : (
+ (PRESENTATIONNS,u'dim'),
+ (PRESENTATIONNS,u'hide-shape'),
+ (PRESENTATIONNS,u'hide-text'),
+ (PRESENTATIONNS,u'play'),
+ (PRESENTATIONNS,u'show-shape'),
+ (PRESENTATIONNS,u'show-text'),
+ ),
+ (PRESENTATIONNS,u'animations') : (
+ (PRESENTATIONNS,u'animation-group'),
+ (PRESENTATIONNS,u'dim'),
+ (PRESENTATIONNS,u'hide-shape'),
+ (PRESENTATIONNS,u'hide-text'),
+ (PRESENTATIONNS,u'play'),
+ (PRESENTATIONNS,u'show-shape'),
+ (PRESENTATIONNS,u'show-text'),
+ ),
+ (PRESENTATIONNS,u'date-time') : (
+ ),
+ (PRESENTATIONNS,u'date-time-decl') : (
+ ),
+ (PRESENTATIONNS,u'dim') : (
+ (PRESENTATIONNS,u'sound'),
+ ),
+ (PRESENTATIONNS,u'event-listener') : (
+ (PRESENTATIONNS,u'sound'),
+ ),
+ (PRESENTATIONNS,u'footer') : (
+ ),
+ (PRESENTATIONNS,u'footer-decl') : (
+ ),
+ (PRESENTATIONNS,u'header') : (
+ ),
+ (PRESENTATIONNS,u'header-decl') : (
+ ),
+ (PRESENTATIONNS,u'hide-shape') : (
+ (PRESENTATIONNS,u'sound'),
+ ),
+ (PRESENTATIONNS,u'hide-text') : (
+ (PRESENTATIONNS,u'sound'),
+ ),
+# allowed_children
+ (PRESENTATIONNS,u'notes') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ ),
+ (PRESENTATIONNS,u'placeholder') : (
+ ),
+ (PRESENTATIONNS,u'play') : (
+ ),
+ (PRESENTATIONNS,u'settings') : (
+ (PRESENTATIONNS,u'show'),
+ ),
+ (PRESENTATIONNS,u'show') : (
+ ),
+ (PRESENTATIONNS,u'show-shape') : (
+ (PRESENTATIONNS,u'sound'),
+ ),
+ (PRESENTATIONNS,u'show-text') : (
+ (PRESENTATIONNS,u'sound'),
+ ),
+ (PRESENTATIONNS,u'sound') : (
+ ),
+ (SCRIPTNS,u'event-listener') : (
+ ),
+ (STYLENS,u'background-image') : (
+ (OFFICENS,u'binary-data'),
+ ),
+ (STYLENS,u'chart-properties') : (
+ (CHARTNS,u'symbol-image'),
+ ),
+ (STYLENS,u'column') : (
+ ),
+ (STYLENS,u'column-sep') : (
+ ),
+ (STYLENS,u'columns') : (
+ (STYLENS,u'column'),
+ (STYLENS,u'column-sep'),
+ ),
+ (STYLENS,u'default-style') : (
+ (STYLENS,u'chart-properties'),
+ (STYLENS,u'drawing-page-properties'),
+ (STYLENS,u'graphic-properties'),
+ (STYLENS,u'paragraph-properties'),
+ (STYLENS,u'ruby-properties'),
+ (STYLENS,u'section-properties'),
+ (STYLENS,u'table-cell-properties'),
+ (STYLENS,u'table-column-properties'),
+ (STYLENS,u'table-properties'),
+ (STYLENS,u'table-row-properties'),
+ (STYLENS,u'text-properties'),
+ ),
+ (STYLENS,u'drawing-page-properties') : (
+ (PRESENTATIONNS,u'sound'),
+ ),
+ (STYLENS,u'drop-cap') : (
+ ),
+ (STYLENS,u'font-face') : (
+ (SVGNS,u'definition-src'),
+ (SVGNS,u'font-face-src'),
+ ),
+ (STYLENS,u'footer') : (
+ (STYLENS,u'region-center'),
+ (STYLENS,u'region-left'),
+ (STYLENS,u'region-right'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'index-title'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'user-index'),
+ (TEXTNS,u'variable-decls'),
+ ),
+ (STYLENS,u'footer-left') : (
+ (STYLENS,u'region-center'),
+ (STYLENS,u'region-left'),
+ (STYLENS,u'region-right'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'index-title'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'user-index'),
+ (TEXTNS,u'variable-decls'),
+ ),
+ (STYLENS,u'footer-style') : (
+ (STYLENS,u'header-footer-properties'),
+ ),
+ (STYLENS,u'footnote-sep') : (
+ ),
+ (STYLENS,u'graphic-properties') : (
+ (STYLENS,u'background-image'),
+ (STYLENS,u'columns'),
+ (TEXTNS,u'list-style'),
+ ),
+ (STYLENS,u'handout-master') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ ),
+ (STYLENS,u'header') : (
+ (STYLENS,u'region-center'),
+ (STYLENS,u'region-left'),
+ (STYLENS,u'region-right'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'index-title'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'user-index'),
+ (TEXTNS,u'variable-decls'),
+ ),
+# allowed_children
+ (STYLENS,u'header-footer-properties') : (
+ (STYLENS,u'background-image'),
+ ),
+ (STYLENS,u'header-left') : (
+ (STYLENS,u'region-center'),
+ (STYLENS,u'region-left'),
+ (STYLENS,u'region-right'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'dde-connection-decls'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'index-title'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'sequence-decls'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-field-decls'),
+ (TEXTNS,u'user-index'),
+ (TEXTNS,u'variable-decls'),
+ ),
+ (STYLENS,u'header-style') : (
+ (STYLENS,u'header-footer-properties'),
+ ),
+ (STYLENS,u'list-level-properties') : (
+ ),
+ (STYLENS,u'map') : (
+ ),
+ (STYLENS,u'master-page') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'forms'),
+ (PRESENTATIONNS,u'notes'),
+ (STYLENS,u'footer'),
+ (STYLENS,u'footer-left'),
+ (STYLENS,u'header'),
+ (STYLENS,u'header-left'),
+ (STYLENS,u'style'),
+ ),
+ (STYLENS,u'page-layout') : (
+ (STYLENS,u'footer-style'),
+ (STYLENS,u'header-style'),
+ (STYLENS,u'page-layout-properties'),
+ ),
+ (STYLENS,u'page-layout-properties') : (
+ (STYLENS,u'background-image'),
+ (STYLENS,u'columns'),
+ (STYLENS,u'footnote-sep'),
+ ),
+ (STYLENS,u'paragraph-properties') : (
+ (STYLENS,u'background-image'),
+ (STYLENS,u'drop-cap'),
+ (STYLENS,u'tab-stops'),
+ ),
+ (STYLENS,u'presentation-page-layout') : (
+ (PRESENTATIONNS,u'placeholder'),
+ ),
+ (STYLENS,u'region-center') : (
+ (TEXTNS,u'p'),
+ ),
+ (STYLENS,u'region-left') : (
+ (TEXTNS,u'p'),
+ ),
+ (STYLENS,u'region-right') : (
+ (TEXTNS,u'p'),
+ ),
+ (STYLENS,u'ruby-properties') : (
+ ),
+ (STYLENS,u'section-properties') : (
+ (STYLENS,u'background-image'),
+ (STYLENS,u'columns'),
+ (TEXTNS,u'notes-configuration'),
+ ),
+ (STYLENS,u'style') : (
+ (STYLENS,u'chart-properties'),
+ (STYLENS,u'drawing-page-properties'),
+ (STYLENS,u'graphic-properties'),
+ (STYLENS,u'map'),
+ (STYLENS,u'paragraph-properties'),
+ (STYLENS,u'ruby-properties'),
+ (STYLENS,u'section-properties'),
+ (STYLENS,u'table-cell-properties'),
+ (STYLENS,u'table-column-properties'),
+ (STYLENS,u'table-properties'),
+ (STYLENS,u'table-row-properties'),
+ (STYLENS,u'text-properties'),
+ ),
+ (STYLENS,u'tab-stop') : (
+ ),
+ (STYLENS,u'tab-stops') : (
+ (STYLENS,u'tab-stop'),
+ ),
+ (STYLENS,u'table-cell-properties') : (
+ (STYLENS,u'background-image'),
+ ),
+ (STYLENS,u'table-column-properties') : (
+ ),
+ (STYLENS,u'table-properties') : (
+ (STYLENS,u'background-image'),
+ ),
+ (STYLENS,u'table-row-properties') : (
+ (STYLENS,u'background-image'),
+ ),
+ (STYLENS,u'text-properties') : (
+ ),
+ (SVGNS,u'definition-src') : (
+ ),
+ (SVGNS,u'desc') : (
+ ),
+ (SVGNS,u'font-face-format') : (
+ ),
+ (SVGNS,u'font-face-name') : (
+ ),
+ (SVGNS,u'font-face-src') : (
+ (SVGNS,u'font-face-name'),
+ (SVGNS,u'font-face-uri'),
+ ),
+ (SVGNS,u'font-face-uri') : (
+ (SVGNS,u'font-face-format'),
+ ),
+ (SVGNS,u'linearGradient') : (
+ (SVGNS,u'stop'),
+ ),
+ (SVGNS,u'radialGradient') : (
+ (SVGNS,u'stop'),
+ ),
+ (SVGNS,u'stop') : (
+ ),
+ (TABLENS,u'body') : (
+ ),
+ (TABLENS,u'calculation-settings') : (
+ (TABLENS,u'iteration'),
+ (TABLENS,u'null-date'),
+ ),
+# allowed_children
+ (TABLENS,u'cell-address') : (
+ ),
+ (TABLENS,u'cell-content-change') : (
+ (OFFICENS,u'change-info'),
+ (TABLENS,u'cell-address'),
+ (TABLENS,u'deletions'),
+ (TABLENS,u'dependencies'),
+ (TABLENS,u'previous'),
+ ),
+ (TABLENS,u'cell-content-deletion') : (
+ (TABLENS,u'cell-address'),
+ (TABLENS,u'change-track-table-cell'),
+ ),
+ (TABLENS,u'cell-range-source') : (
+ ),
+ (TABLENS,u'change-deletion') : (
+ ),
+ (TABLENS,u'change-track-table-cell') : (
+ (TEXTNS,u'p'),
+ ),
+ (TABLENS,u'consolidation') : (
+ ),
+ (TABLENS,u'content-validation') : (
+ (OFFICENS,u'event-listeners'),
+ (TABLENS,u'error-macro'),
+ (TABLENS,u'error-message'),
+ (TABLENS,u'help-message'),
+ ),
+ (TABLENS,u'content-validations') : (
+ (TABLENS,u'content-validation'),
+ ),
+ (TABLENS,u'covered-table-cell') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'annotation'),
+ (TABLENS,u'cell-range-source'),
+ (TABLENS,u'detective'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-index'),
+ ),
+ (TABLENS,u'cut-offs') : (
+ (TABLENS,u'insertion-cut-off'),
+ (TABLENS,u'movement-cut-off'),
+ ),
+ (TABLENS,u'data-pilot-display-info') : (
+ ),
+ (TABLENS,u'data-pilot-field') : (
+ (TABLENS,u'data-pilot-field-reference'),
+ (TABLENS,u'data-pilot-groups'),
+ (TABLENS,u'data-pilot-level'),
+ ),
+ (TABLENS,u'data-pilot-field-reference') : (
+ ),
+ (TABLENS,u'data-pilot-group') : (
+ (TABLENS,u'data-pilot-group-member'),
+ ),
+ (TABLENS,u'data-pilot-group-member') : (
+ ),
+ (TABLENS,u'data-pilot-groups') : (
+ (TABLENS,u'data-pilot-group'),
+ ),
+ (TABLENS,u'data-pilot-layout-info') : (
+ ),
+ (TABLENS,u'data-pilot-level') : (
+ (TABLENS,u'data-pilot-display-info'),
+ (TABLENS,u'data-pilot-layout-info'),
+ (TABLENS,u'data-pilot-members'),
+ (TABLENS,u'data-pilot-sort-info'),
+ (TABLENS,u'data-pilot-subtotals'),
+ ),
+ (TABLENS,u'data-pilot-member') : (
+ ),
+ (TABLENS,u'data-pilot-members') : (
+ (TABLENS,u'data-pilot-member'),
+ ),
+ (TABLENS,u'data-pilot-sort-info') : (
+ ),
+ (TABLENS,u'data-pilot-subtotal') : (
+ ),
+ (TABLENS,u'data-pilot-subtotals') : (
+ (TABLENS,u'data-pilot-subtotal'),
+ ),
+# allowed_children
+ (TABLENS,u'data-pilot-table') : (
+ (TABLENS,u'data-pilot-field'),
+ (TABLENS,u'database-source-query'),
+ (TABLENS,u'database-source-sql'),
+ (TABLENS,u'database-source-table'),
+ (TABLENS,u'source-cell-range'),
+ (TABLENS,u'source-service'),
+ ),
+ (TABLENS,u'data-pilot-tables') : (
+ (TABLENS,u'data-pilot-table'),
+ ),
+ (TABLENS,u'database-range') : (
+ (TABLENS,u'database-source-query'),
+ (TABLENS,u'database-source-sql'),
+ (TABLENS,u'database-source-table'),
+ (TABLENS,u'filter'),
+ (TABLENS,u'sort'),
+ (TABLENS,u'subtotal-rules'),
+ ),
+ (TABLENS,u'database-ranges') : (
+ (TABLENS,u'database-range'),
+ ),
+ (TABLENS,u'database-source-query') : (
+ ),
+ (TABLENS,u'database-source-sql') : (
+ ),
+ (TABLENS,u'database-source-table') : (
+ ),
+ (TABLENS,u'dde-link') : (
+ (OFFICENS,u'dde-source'),
+ (TABLENS,u'table'),
+ ),
+ (TABLENS,u'dde-links') : (
+ (TABLENS,u'dde-link'),
+ ),
+ (TABLENS,u'deletion') : (
+ (OFFICENS,u'change-info'),
+ (TABLENS,u'cut-offs'),
+ (TABLENS,u'deletions'),
+ (TABLENS,u'dependencies'),
+ ),
+ (TABLENS,u'deletions') : (
+ (TABLENS,u'cell-content-deletion'),
+ (TABLENS,u'change-deletion'),
+ ),
+ (TABLENS,u'dependencies') : (
+ (TABLENS,u'dependency'),
+ ),
+ (TABLENS,u'dependency') : (
+ ),
+ (TABLENS,u'detective') : (
+ (TABLENS,u'highlighted-range'),
+ (TABLENS,u'operation'),
+ ),
+ (TABLENS,u'error-macro') : (
+ ),
+ (TABLENS,u'error-message') : (
+ (TEXTNS,u'p'),
+ ),
+ (TABLENS,u'even-columns') : (
+ ),
+ (TABLENS,u'even-rows') : (
+ ),
+ (TABLENS,u'filter') : (
+ (TABLENS,u'filter-and'),
+ (TABLENS,u'filter-condition'),
+ (TABLENS,u'filter-or'),
+ ),
+ (TABLENS,u'filter-and') : (
+ (TABLENS,u'filter-condition'),
+ (TABLENS,u'filter-or'),
+ ),
+ (TABLENS,u'filter-condition') : (
+ ),
+ (TABLENS,u'filter-or') : (
+ (TABLENS,u'filter-and'),
+ (TABLENS,u'filter-condition'),
+ ),
+# allowed_children
+ (TABLENS,u'first-column') : (
+ ),
+ (TABLENS,u'first-row') : (
+ ),
+ (TABLENS,u'help-message') : (
+ (TEXTNS,u'p'),
+ ),
+ (TABLENS,u'highlighted-range') : (
+ ),
+ (TABLENS,u'insertion') : (
+ (OFFICENS,u'change-info'),
+ (TABLENS,u'deletions'),
+ (TABLENS,u'dependencies'),
+ ),
+ (TABLENS,u'insertion-cut-off') : (
+ ),
+ (TABLENS,u'iteration') : (
+ ),
+ (TABLENS,u'label-range') : (
+ ),
+ (TABLENS,u'label-ranges') : (
+ (TABLENS,u'label-range'),
+ ),
+ (TABLENS,u'last-column') : (
+ ),
+ (TABLENS,u'last-row') : (
+ ),
+ (TABLENS,u'movement') : (
+ (OFFICENS,u'change-info'),
+ (TABLENS,u'deletions'),
+ (TABLENS,u'dependencies'),
+ (TABLENS,u'source-range-address'),
+ (TABLENS,u'target-range-address'),
+ ),
+ (TABLENS,u'movement-cut-off') : (
+ ),
+ (TABLENS,u'named-expression') : (
+ ),
+ (TABLENS,u'named-expressions') : (
+ (TABLENS,u'named-expression'),
+ (TABLENS,u'named-range'),
+ ),
+ (TABLENS,u'named-range') : (
+ ),
+ (TABLENS,u'null-date') : (
+ ),
+ (TABLENS,u'odd-columns') : (
+ ),
+ (TABLENS,u'odd-rows') : (
+ ),
+ (TABLENS,u'operation') : (
+ ),
+ (TABLENS,u'previous') : (
+ (TABLENS,u'change-track-table-cell'),
+ ),
+ (TABLENS,u'scenario') : (
+ ),
+ (TABLENS,u'shapes') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ ),
+ (TABLENS,u'sort') : (
+ (TABLENS,u'sort-by'),
+ ),
+ (TABLENS,u'sort-by') : (
+ ),
+ (TABLENS,u'sort-groups') : (
+ ),
+ (TABLENS,u'source-cell-range') : (
+ (TABLENS,u'filter'),
+ ),
+ (TABLENS,u'source-range-address') : (
+ ),
+ (TABLENS,u'source-service') : (
+ ),
+ (TABLENS,u'subtotal-field') : (
+ ),
+ (TABLENS,u'subtotal-rule') : (
+ (TABLENS,u'subtotal-field'),
+ ),
+ (TABLENS,u'subtotal-rules') : (
+ (TABLENS,u'sort-groups'),
+ (TABLENS,u'subtotal-rule'),
+ ),
+# allowed_children
+ (TABLENS,u'table') : (
+ (OFFICENS,u'dde-source'),
+ (OFFICENS,u'forms'),
+ (TEXTNS,u'soft-page-break'),
+ (TABLENS,u'scenario'),
+ (TABLENS,u'shapes'),
+ (TABLENS,u'table-column'),
+ (TABLENS,u'table-column-group'),
+ (TABLENS,u'table-columns'),
+ (TABLENS,u'table-header-columns'),
+ (TABLENS,u'table-header-rows'),
+ (TABLENS,u'table-row'),
+ (TABLENS,u'table-row-group'),
+ (TABLENS,u'table-rows'),
+ (TABLENS,u'table-source'),
+ ),
+ (TABLENS,u'table-cell') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'annotation'),
+ (TABLENS,u'cell-range-source'),
+ (TABLENS,u'detective'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-index'),
+ ),
+ (TABLENS,u'table-column') : (
+ ),
+ (TABLENS,u'table-column-group') : (
+ (TABLENS,u'table-column'),
+ (TABLENS,u'table-column-group'),
+ (TABLENS,u'table-columns'),
+ (TABLENS,u'table-header-columns'),
+ ),
+ (TABLENS,u'table-columns') : (
+ (TABLENS,u'table-column'),
+ ),
+ (TABLENS,u'table-header-columns') : (
+ (TABLENS,u'table-column'),
+ ),
+ (TABLENS,u'table-header-rows') : (
+ (TABLENS,u'table-row'),
+ (TEXTNS,u'soft-page-break'),
+ ),
+ (TABLENS,u'table-row') : (
+ (TABLENS,u'covered-table-cell'),
+ (TABLENS,u'table-cell'),
+ ),
+ (TABLENS,u'table-row-group') : (
+ (TABLENS,u'table-header-rows'),
+ (TABLENS,u'table-row'),
+ (TABLENS,u'table-row-group'),
+ (TABLENS,u'table-rows'),
+ ),
+ (TABLENS,u'table-rows') : (
+ (TABLENS,u'table-row'),
+ (TEXTNS,u'soft-page-break'),
+ ),
+ (TABLENS,u'table-source') : (
+ ),
+ (TABLENS,u'table-template') : (
+ (TABLENS,u'body'),
+ (TABLENS,u'even-columns'),
+ (TABLENS,u'even-rows'),
+ (TABLENS,u'first-column'),
+ (TABLENS,u'first-row'),
+ (TABLENS,u'last-column'),
+ (TABLENS,u'last-row'),
+ (TABLENS,u'odd-columns'),
+ (TABLENS,u'odd-rows'),
+ ),
+ (TABLENS,u'target-range-address') : (
+ ),
+ (TABLENS,u'tracked-changes') : (
+ (TABLENS,u'cell-content-change'),
+ (TABLENS,u'deletion'),
+ (TABLENS,u'insertion'),
+ (TABLENS,u'movement'),
+ ),
+# allowed_children
+ (TEXTNS,u'a') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'annotation'),
+ (OFFICENS,u'event-listeners'),
+ (PRESENTATIONNS,u'date-time'),
+ (PRESENTATIONNS,u'footer'),
+ (PRESENTATIONNS,u'header'),
+ (TEXTNS,u'a'),
+ (TEXTNS,u'alphabetical-index-mark'),
+ (TEXTNS,u'alphabetical-index-mark-end'),
+ (TEXTNS,u'alphabetical-index-mark-start'),
+ (TEXTNS,u'author-initials'),
+ (TEXTNS,u'author-name'),
+ (TEXTNS,u'bibliography-mark'),
+ (TEXTNS,u'bookmark'),
+ (TEXTNS,u'bookmark-end'),
+ (TEXTNS,u'bookmark-ref'),
+ (TEXTNS,u'bookmark-start'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'chapter'),
+ (TEXTNS,u'conditional-text'),
+ (TEXTNS,u'creation-date'),
+ (TEXTNS,u'creation-time'),
+ (TEXTNS,u'creator'),
+ (TEXTNS,u'database-display'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'database-next'),
+ (TEXTNS,u'database-row-number'),
+ (TEXTNS,u'database-row-select'),
+ (TEXTNS,u'date'),
+ (TEXTNS,u'dde-connection'),
+ (TEXTNS,u'description'),
+ (TEXTNS,u'editing-cycles'),
+ (TEXTNS,u'editing-duration'),
+ (TEXTNS,u'execute-macro'),
+ (TEXTNS,u'expression'),
+ (TEXTNS,u'file-name'),
+ (TEXTNS,u'hidden-paragraph'),
+ (TEXTNS,u'hidden-text'),
+ (TEXTNS,u'initial-creator'),
+ (TEXTNS,u'keywords'),
+ (TEXTNS,u'line-break'),
+ (TEXTNS,u'measure'),
+ (TEXTNS,u'modification-date'),
+ (TEXTNS,u'modification-time'),
+ (TEXTNS,u'note'),
+ (TEXTNS,u'note-ref'),
+ (TEXTNS,u'page-count'),
+ (TEXTNS,u'paragraph-count'),
+ (TEXTNS,u'word-count'),
+ (TEXTNS,u'character-count'),
+ (TEXTNS,u'table-count'),
+ (TEXTNS,u'image-count'),
+ (TEXTNS,u'object-count'),
+ (TEXTNS,u'page-continuation'),
+ (TEXTNS,u'page-number'),
+ (TEXTNS,u'page-variable-get'),
+ (TEXTNS,u'page-variable-set'),
+ (TEXTNS,u'placeholder'),
+ (TEXTNS,u'print-date'),
+ (TEXTNS,u'print-time'),
+ (TEXTNS,u'printed-by'),
+ (TEXTNS,u'reference-mark'),
+ (TEXTNS,u'reference-mark-end'),
+ (TEXTNS,u'reference-mark-start'),
+ (TEXTNS,u'reference-ref'),
+ (TEXTNS,u'ruby'),
+ (TEXTNS,u's'),
+ (TEXTNS,u'script'),
+ (TEXTNS,u'sender-city'),
+ (TEXTNS,u'sender-company'),
+ (TEXTNS,u'sender-country'),
+ (TEXTNS,u'sender-email'),
+ (TEXTNS,u'sender-fax'),
+ (TEXTNS,u'sender-firstname'),
+ (TEXTNS,u'sender-initials'),
+ (TEXTNS,u'sender-lastname'),
+ (TEXTNS,u'sender-phone-private'),
+ (TEXTNS,u'sender-phone-work'),
+ (TEXTNS,u'sender-position'),
+ (TEXTNS,u'sender-postal-code'),
+ (TEXTNS,u'sender-state-or-province'),
+ (TEXTNS,u'sender-street'),
+ (TEXTNS,u'sender-title'),
+ (TEXTNS,u'sequence'),
+ (TEXTNS,u'sequence-ref'),
+ (TEXTNS,u'sheet-name'),
+ (TEXTNS,u'span'),
+ (TEXTNS,u'subject'),
+ (TEXTNS,u'tab'),
+ (TEXTNS,u'table-formula'),
+ (TEXTNS,u'template-name'),
+ (TEXTNS,u'text-input'),
+ (TEXTNS,u'time'),
+ (TEXTNS,u'title'),
+ (TEXTNS,u'toc-mark'),
+ (TEXTNS,u'toc-mark-end'),
+ (TEXTNS,u'toc-mark-start'),
+ (TEXTNS,u'user-defined'),
+ (TEXTNS,u'user-field-get'),
+ (TEXTNS,u'user-field-input'),
+ (TEXTNS,u'user-index-mark'),
+ (TEXTNS,u'user-index-mark-end'),
+ (TEXTNS,u'user-index-mark-start'),
+ (TEXTNS,u'variable-get'),
+ (TEXTNS,u'variable-input'),
+ (TEXTNS,u'variable-set'),
+ ),
+ (TEXTNS,u'alphabetical-index') : (
+ (TEXTNS,u'alphabetical-index-source'),
+ (TEXTNS,u'index-body'),
+ ),
+ (TEXTNS,u'alphabetical-index-auto-mark-file') : (
+ ),
+ (TEXTNS,u'alphabetical-index-entry-template') : (
+ (TEXTNS,u'index-entry-chapter'),
+ (TEXTNS,u'index-entry-page-number'),
+ (TEXTNS,u'index-entry-span'),
+ (TEXTNS,u'index-entry-tab-stop'),
+ (TEXTNS,u'index-entry-text'),
+ ),
+ (TEXTNS,u'alphabetical-index-mark') : (
+ ),
+ (TEXTNS,u'alphabetical-index-mark-end') : (
+ ),
+ (TEXTNS,u'alphabetical-index-mark-start') : (
+ ),
+ (TEXTNS,u'alphabetical-index-source') : (
+ (TEXTNS,u'alphabetical-index-entry-template'),
+ (TEXTNS,u'index-title-template'),
+ ),
+ (TEXTNS,u'author-initials') : (
+ ),
+ (TEXTNS,u'author-name') : (
+ ),
+ (TEXTNS,u'bibliography') : (
+ (TEXTNS,u'bibliography-source'),
+ (TEXTNS,u'index-body'),
+ ),
+ (TEXTNS,u'bibliography-configuration') : (
+ (TEXTNS,u'sort-key'),
+ ),
+ (TEXTNS,u'bibliography-entry-template') : (
+ (TEXTNS,u'index-entry-bibliography'),
+ (TEXTNS,u'index-entry-span'),
+ (TEXTNS,u'index-entry-tab-stop'),
+ ),
+# allowed_children
+ (TEXTNS,u'bibliography-mark') : (
+ ),
+ (TEXTNS,u'bibliography-source') : (
+ (TEXTNS,u'bibliography-entry-template'),
+ (TEXTNS,u'index-title-template'),
+ ),
+ (TEXTNS,u'bookmark') : (
+ ),
+ (TEXTNS,u'bookmark-end') : (
+ ),
+ (TEXTNS,u'bookmark-ref') : (
+ ),
+ (TEXTNS,u'bookmark-start') : (
+ ),
+ (TEXTNS,u'change') : (
+ ),
+ (TEXTNS,u'change-end') : (
+ ),
+ (TEXTNS,u'change-start') : (
+ ),
+ (TEXTNS,u'changed-region') : (
+ (TEXTNS,u'deletion'),
+ (TEXTNS,u'format-change'),
+ (TEXTNS,u'insertion'),
+ ),
+ (TEXTNS,u'chapter') : (
+ ),
+ (TEXTNS,u'conditional-text') : (
+ ),
+ (TEXTNS,u'creation-date') : (
+ ),
+ (TEXTNS,u'creation-time') : (
+ ),
+ (TEXTNS,u'creator') : (
+ ),
+ (TEXTNS,u'database-display') : (
+ (FORMNS,u'connection-resource'),
+ ),
+ (TEXTNS,u'database-name') : (
+ (FORMNS,u'connection-resource'),
+ ),
+ (TEXTNS,u'database-next') : (
+ (FORMNS,u'connection-resource'),
+ ),
+ (TEXTNS,u'database-row-number') : (
+ (FORMNS,u'connection-resource'),
+ ),
+ (TEXTNS,u'database-row-select') : (
+ (FORMNS,u'connection-resource'),
+ ),
+ (TEXTNS,u'date') : (
+ ),
+ (TEXTNS,u'dde-connection') : (
+ ),
+ (TEXTNS,u'dde-connection-decl') : (
+ ),
+ (TEXTNS,u'dde-connection-decls') : (
+ (TEXTNS,u'dde-connection-decl'),
+ ),
+# allowed_children
+ (TEXTNS,u'deletion') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'change-info'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-index'),
+ ),
+ (TEXTNS,u'description') : (
+ ),
+ (TEXTNS,u'editing-cycles') : (
+ ),
+ (TEXTNS,u'editing-duration') : (
+ ),
+ (TEXTNS,u'execute-macro') : (
+ (OFFICENS,u'event-listeners'),
+ ),
+ (TEXTNS,u'expression') : (
+ ),
+ (TEXTNS,u'file-name') : (
+ ),
+ (TEXTNS,u'format-change') : (
+ (OFFICENS,u'change-info'),
+ ),
+# allowed_children
+ (TEXTNS,u'h') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'annotation'),
+ (PRESENTATIONNS,u'date-time'),
+ (PRESENTATIONNS,u'footer'),
+ (PRESENTATIONNS,u'header'),
+ (TEXTNS,u'a'),
+ (TEXTNS,u'alphabetical-index-mark'),
+ (TEXTNS,u'alphabetical-index-mark-end'),
+ (TEXTNS,u'alphabetical-index-mark-start'),
+ (TEXTNS,u'author-initials'),
+ (TEXTNS,u'author-name'),
+ (TEXTNS,u'bibliography-mark'),
+ (TEXTNS,u'bookmark'),
+ (TEXTNS,u'bookmark-end'),
+ (TEXTNS,u'bookmark-ref'),
+ (TEXTNS,u'bookmark-start'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'chapter'),
+ (TEXTNS,u'conditional-text'),
+ (TEXTNS,u'creation-date'),
+ (TEXTNS,u'creation-time'),
+ (TEXTNS,u'creator'),
+ (TEXTNS,u'database-display'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'database-next'),
+ (TEXTNS,u'database-row-number'),
+ (TEXTNS,u'database-row-select'),
+ (TEXTNS,u'date'),
+ (TEXTNS,u'dde-connection'),
+ (TEXTNS,u'description'),
+ (TEXTNS,u'editing-cycles'),
+ (TEXTNS,u'editing-duration'),
+ (TEXTNS,u'execute-macro'),
+ (TEXTNS,u'expression'),
+ (TEXTNS,u'file-name'),
+ (TEXTNS,u'hidden-paragraph'),
+ (TEXTNS,u'hidden-text'),
+ (TEXTNS,u'initial-creator'),
+ (TEXTNS,u'keywords'),
+ (TEXTNS,u'line-break'),
+ (TEXTNS,u'measure'),
+ (TEXTNS,u'modification-date'),
+ (TEXTNS,u'modification-time'),
+ (TEXTNS,u'note'),
+ (TEXTNS,u'note-ref'),
+ (TEXTNS,u'number'),
+ (TEXTNS,u'page-count'),
+ (TEXTNS,u'paragraph-count'),
+ (TEXTNS,u'word-count'),
+ (TEXTNS,u'character-count'),
+ (TEXTNS,u'table-count'),
+ (TEXTNS,u'image-count'),
+ (TEXTNS,u'object-count'),
+ (TEXTNS,u'page-continuation'),
+ (TEXTNS,u'page-number'),
+ (TEXTNS,u'page-variable-get'),
+ (TEXTNS,u'page-variable-set'),
+ (TEXTNS,u'placeholder'),
+ (TEXTNS,u'print-date'),
+ (TEXTNS,u'print-time'),
+ (TEXTNS,u'printed-by'),
+ (TEXTNS,u'reference-mark'),
+ (TEXTNS,u'reference-mark-end'),
+ (TEXTNS,u'reference-mark-start'),
+ (TEXTNS,u'reference-ref'),
+ (TEXTNS,u'ruby'),
+ (TEXTNS,u's'),
+ (TEXTNS,u'script'),
+ (TEXTNS,u'sender-city'),
+ (TEXTNS,u'sender-company'),
+ (TEXTNS,u'sender-country'),
+ (TEXTNS,u'sender-email'),
+ (TEXTNS,u'sender-fax'),
+ (TEXTNS,u'sender-firstname'),
+ (TEXTNS,u'sender-initials'),
+ (TEXTNS,u'sender-lastname'),
+ (TEXTNS,u'sender-phone-private'),
+ (TEXTNS,u'sender-phone-work'),
+ (TEXTNS,u'sender-position'),
+ (TEXTNS,u'sender-postal-code'),
+ (TEXTNS,u'sender-state-or-province'),
+ (TEXTNS,u'sender-street'),
+ (TEXTNS,u'sender-title'),
+ (TEXTNS,u'sequence'),
+ (TEXTNS,u'sequence-ref'),
+ (TEXTNS,u'sheet-name'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'span'),
+ (TEXTNS,u'subject'),
+ (TEXTNS,u'tab'),
+ (TEXTNS,u'table-formula'),
+ (TEXTNS,u'template-name'),
+ (TEXTNS,u'text-input'),
+ (TEXTNS,u'time'),
+ (TEXTNS,u'title'),
+ (TEXTNS,u'toc-mark'),
+ (TEXTNS,u'toc-mark-end'),
+ (TEXTNS,u'toc-mark-start'),
+ (TEXTNS,u'user-defined'),
+ (TEXTNS,u'user-field-get'),
+ (TEXTNS,u'user-field-input'),
+ (TEXTNS,u'user-index-mark'),
+ (TEXTNS,u'user-index-mark-end'),
+ (TEXTNS,u'user-index-mark-start'),
+ (TEXTNS,u'variable-get'),
+ (TEXTNS,u'variable-input'),
+ (TEXTNS,u'variable-set'),
+ ),
+ (TEXTNS,u'hidden-paragraph') : (
+ ),
+ (TEXTNS,u'hidden-text') : (
+ ),
+ (TEXTNS,u'illustration-index') : (
+ (TEXTNS,u'illustration-index-source'),
+ (TEXTNS,u'index-body'),
+ ),
+ (TEXTNS,u'illustration-index-entry-template') : (
+ (TEXTNS,u'index-entry-page-number'),
+ (TEXTNS,u'index-entry-span'),
+ (TEXTNS,u'index-entry-tab-stop'),
+ (TEXTNS,u'index-entry-text'),
+ ),
+ (TEXTNS,u'illustration-index-source') : (
+ (TEXTNS,u'illustration-index-entry-template'),
+ (TEXTNS,u'index-title-template'),
+ ),
+# allowed_children
+ (TEXTNS,u'index-body') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'index-title'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-index'),
+ ),
+ (TEXTNS,u'index-entry-bibliography') : (
+ ),
+ (TEXTNS,u'index-entry-chapter') : (
+ ),
+ (TEXTNS,u'index-entry-link-end') : (
+ ),
+ (TEXTNS,u'index-entry-link-start') : (
+ ),
+ (TEXTNS,u'index-entry-page-number') : (
+ ),
+ (TEXTNS,u'index-entry-span') : (
+ ),
+ (TEXTNS,u'index-entry-tab-stop') : (
+ ),
+ (TEXTNS,u'index-entry-text') : (
+ ),
+ (TEXTNS,u'index-source-style') : (
+ ),
+ (TEXTNS,u'index-source-styles') : (
+ (TEXTNS,u'index-source-style'),
+ ),
+# allowed_children
+ (TEXTNS,u'index-title') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'index-title'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-index'),
+ ),
+ (TEXTNS,u'index-title-template') : (
+ ),
+ (TEXTNS,u'initial-creator') : (
+ ),
+ (TEXTNS,u'insertion') : (
+ (OFFICENS,u'change-info'),
+ ),
+ (TEXTNS,u'keywords') : (
+ ),
+ (TEXTNS,u'line-break') : (
+ ),
+ (TEXTNS,u'linenumbering-configuration') : (
+ (TEXTNS,u'linenumbering-separator'),
+ ),
+ (TEXTNS,u'linenumbering-separator') : (
+ ),
+ (TEXTNS,u'list') : (
+ (TEXTNS,u'list-header'),
+ (TEXTNS,u'list-item'),
+ ),
+ (TEXTNS,u'list-header') : (
+ (TEXTNS,u'h'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'number'),
+ (TEXTNS,u'p'),
+ ),
+ (TEXTNS,u'list-item') : (
+ (TEXTNS,u'h'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'number'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'soft-page-break'),
+ ),
+ (TEXTNS,u'list-level-style-bullet') : (
+ (STYLENS,u'list-level-properties'),
+ (STYLENS,u'text-properties'),
+ ),
+ (TEXTNS,u'list-level-style-image') : (
+ (OFFICENS,u'binary-data'),
+ (STYLENS,u'list-level-properties'),
+ ),
+ (TEXTNS,u'list-level-style-number') : (
+ (STYLENS,u'list-level-properties'),
+ (STYLENS,u'text-properties'),
+ ),
+ (TEXTNS,u'list-style') : (
+ (TEXTNS,u'list-level-style-bullet'),
+ (TEXTNS,u'list-level-style-image'),
+ (TEXTNS,u'list-level-style-number'),
+ ),
+ (TEXTNS,u'measure') : (
+ ),
+ (TEXTNS,u'modification-date') : (
+ ),
+ (TEXTNS,u'modification-time') : (
+ ),
+ (TEXTNS,u'note') : (
+ (TEXTNS,u'note-body'),
+ (TEXTNS,u'note-citation'),
+ ),
+# allowed_children
+ (TEXTNS,u'note-body') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-index'),
+ ),
+ (TEXTNS,u'note-citation') : (
+ ),
+ (TEXTNS,u'note-continuation-notice-backward') : (
+ ),
+ (TEXTNS,u'note-continuation-notice-forward') : (
+ ),
+ (TEXTNS,u'note-ref') : (
+ ),
+ (TEXTNS,u'notes-configuration') : (
+ (TEXTNS,u'note-continuation-notice-backward'),
+ (TEXTNS,u'note-continuation-notice-forward'),
+ ),
+ (TEXTNS,u'number') : (
+ ),
+ (TEXTNS,u'numbered-paragraph') : (
+ (TEXTNS,u'h'),
+ (TEXTNS,u'number'),
+ (TEXTNS,u'p'),
+ ),
+ (TEXTNS,u'object-count') : (
+ ),
+ (TEXTNS,u'object-index') : (
+ (TEXTNS,u'index-body'),
+ (TEXTNS,u'object-index-source'),
+ ),
+ (TEXTNS,u'object-index-entry-template') : (
+ (TEXTNS,u'index-entry-page-number'),
+ (TEXTNS,u'index-entry-span'),
+ (TEXTNS,u'index-entry-tab-stop'),
+ (TEXTNS,u'index-entry-text'),
+ ),
+ (TEXTNS,u'object-index-source') : (
+ (TEXTNS,u'index-title-template'),
+ (TEXTNS,u'object-index-entry-template'),
+ ),
+ (TEXTNS,u'outline-level-style') : (
+ (STYLENS,u'list-level-properties'),
+ (STYLENS,u'text-properties'),
+ ),
+ (TEXTNS,u'outline-style') : (
+ (TEXTNS,u'outline-level-style'),
+ ),
+# allowed_children
+ (TEXTNS,u'p') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'annotation'),
+ (PRESENTATIONNS,u'date-time'),
+ (PRESENTATIONNS,u'footer'),
+ (PRESENTATIONNS,u'header'),
+ (TEXTNS,u'a'),
+ (TEXTNS,u'alphabetical-index-mark'),
+ (TEXTNS,u'alphabetical-index-mark-end'),
+ (TEXTNS,u'alphabetical-index-mark-start'),
+ (TEXTNS,u'author-initials'),
+ (TEXTNS,u'author-name'),
+ (TEXTNS,u'bibliography-mark'),
+ (TEXTNS,u'bookmark'),
+ (TEXTNS,u'bookmark-end'),
+ (TEXTNS,u'bookmark-ref'),
+ (TEXTNS,u'bookmark-start'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'chapter'),
+ (TEXTNS,u'character-count'),
+ (TEXTNS,u'conditional-text'),
+ (TEXTNS,u'creation-date'),
+ (TEXTNS,u'creation-time'),
+ (TEXTNS,u'creator'),
+ (TEXTNS,u'database-display'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'database-next'),
+ (TEXTNS,u'database-row-number'),
+ (TEXTNS,u'database-row-select'),
+ (TEXTNS,u'date'),
+ (TEXTNS,u'dde-connection'),
+ (TEXTNS,u'description'),
+ (TEXTNS,u'editing-cycles'),
+ (TEXTNS,u'editing-duration'),
+ (TEXTNS,u'execute-macro'),
+ (TEXTNS,u'expression'),
+ (TEXTNS,u'file-name'),
+ (TEXTNS,u'hidden-paragraph'),
+ (TEXTNS,u'hidden-text'),
+ (TEXTNS,u'image-count'),
+ (TEXTNS,u'initial-creator'),
+ (TEXTNS,u'keywords'),
+ (TEXTNS,u'line-break'),
+ (TEXTNS,u'measure'),
+ (TEXTNS,u'modification-date'),
+ (TEXTNS,u'modification-time'),
+ (TEXTNS,u'note'),
+ (TEXTNS,u'note-ref'),
+ (TEXTNS,u'object-count'),
+ (TEXTNS,u'page-continuation'),
+ (TEXTNS,u'page-count'),
+ (TEXTNS,u'page-number'),
+ (TEXTNS,u'page-variable-get'),
+ (TEXTNS,u'page-variable-set'),
+ (TEXTNS,u'paragraph-count'),
+ (TEXTNS,u'placeholder'),
+ (TEXTNS,u'print-date'),
+ (TEXTNS,u'printed-by'),
+ (TEXTNS,u'print-time'),
+ (TEXTNS,u'reference-mark'),
+ (TEXTNS,u'reference-mark-end'),
+ (TEXTNS,u'reference-mark-start'),
+ (TEXTNS,u'reference-ref'),
+ (TEXTNS,u'ruby'),
+ (TEXTNS,u's'),
+ (TEXTNS,u'script'),
+ (TEXTNS,u'sender-city'),
+ (TEXTNS,u'sender-company'),
+ (TEXTNS,u'sender-country'),
+ (TEXTNS,u'sender-email'),
+ (TEXTNS,u'sender-fax'),
+ (TEXTNS,u'sender-firstname'),
+ (TEXTNS,u'sender-initials'),
+ (TEXTNS,u'sender-lastname'),
+ (TEXTNS,u'sender-phone-private'),
+ (TEXTNS,u'sender-phone-work'),
+ (TEXTNS,u'sender-position'),
+ (TEXTNS,u'sender-postal-code'),
+ (TEXTNS,u'sender-state-or-province'),
+ (TEXTNS,u'sender-street'),
+ (TEXTNS,u'sender-title'),
+ (TEXTNS,u'sequence'),
+ (TEXTNS,u'sequence-ref'),
+ (TEXTNS,u'sheet-name'),
+ (TEXTNS,u'soft-page-break'),
+ (TEXTNS,u'span'),
+ (TEXTNS,u'subject'),
+ (TEXTNS,u'tab'),
+ (TEXTNS,u'table-count'),
+ (TEXTNS,u'table-formula'),
+ (TEXTNS,u'template-name'),
+ (TEXTNS,u'text-input'),
+ (TEXTNS,u'time'),
+ (TEXTNS,u'title'),
+ (TEXTNS,u'toc-mark'),
+ (TEXTNS,u'toc-mark-end'),
+ (TEXTNS,u'toc-mark-start'),
+ (TEXTNS,u'user-defined'),
+ (TEXTNS,u'user-field-get'),
+ (TEXTNS,u'user-field-input'),
+ (TEXTNS,u'user-index-mark'),
+ (TEXTNS,u'user-index-mark-end'),
+ (TEXTNS,u'user-index-mark-start'),
+ (TEXTNS,u'variable-get'),
+ (TEXTNS,u'variable-input'),
+ (TEXTNS,u'variable-set'),
+ (TEXTNS,u'word-count'),
+ ),
+ (TEXTNS,u'page') : (
+ ),
+ (TEXTNS,u'page-continuation') : (
+ ),
+ (TEXTNS,u'page-number') : (
+ ),
+ (TEXTNS,u'page-sequence') : (
+ (TEXTNS,u'page'),
+ ),
+ (TEXTNS,u'page-variable-get') : (
+ ),
+ (TEXTNS,u'page-variable-set') : (
+ ),
+ (TEXTNS,u'placeholder') : (
+ ),
+ (TEXTNS,u'print-date') : (
+ ),
+ (TEXTNS,u'print-time') : (
+ ),
+ (TEXTNS,u'printed-by') : (
+ ),
+ (TEXTNS,u'reference-mark') : (
+ ),
+ (TEXTNS,u'reference-mark-end') : (
+ ),
+ (TEXTNS,u'reference-mark-start') : (
+ ),
+ (TEXTNS,u'ruby') : (
+ (TEXTNS,u'ruby-base'),
+ (TEXTNS,u'ruby-text'),
+ ),
+ (TEXTNS,u'ruby-base') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'annotation'),
+ (PRESENTATIONNS,u'date-time'),
+ (PRESENTATIONNS,u'footer'),
+ (PRESENTATIONNS,u'header'),
+ (TEXTNS,u'a'),
+ (TEXTNS,u'alphabetical-index-mark'),
+ (TEXTNS,u'alphabetical-index-mark-end'),
+ (TEXTNS,u'alphabetical-index-mark-start'),
+ (TEXTNS,u'author-initials'),
+ (TEXTNS,u'author-name'),
+ (TEXTNS,u'bibliography-mark'),
+ (TEXTNS,u'bookmark'),
+ (TEXTNS,u'bookmark-end'),
+ (TEXTNS,u'bookmark-ref'),
+ (TEXTNS,u'bookmark-start'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'chapter'),
+ (TEXTNS,u'conditional-text'),
+ (TEXTNS,u'creation-date'),
+ (TEXTNS,u'creation-time'),
+ (TEXTNS,u'creator'),
+ (TEXTNS,u'database-display'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'database-next'),
+ (TEXTNS,u'database-row-number'),
+ (TEXTNS,u'database-row-select'),
+ (TEXTNS,u'date'),
+ (TEXTNS,u'dde-connection'),
+ (TEXTNS,u'description'),
+ (TEXTNS,u'editing-cycles'),
+ (TEXTNS,u'editing-duration'),
+ (TEXTNS,u'execute-macro'),
+ (TEXTNS,u'expression'),
+ (TEXTNS,u'file-name'),
+ (TEXTNS,u'hidden-paragraph'),
+ (TEXTNS,u'hidden-text'),
+ (TEXTNS,u'initial-creator'),
+ (TEXTNS,u'keywords'),
+ (TEXTNS,u'line-break'),
+ (TEXTNS,u'measure'),
+ (TEXTNS,u'modification-date'),
+ (TEXTNS,u'modification-time'),
+ (TEXTNS,u'note'),
+ (TEXTNS,u'note-ref'),
+ (TEXTNS,u'page-count'),
+ (TEXTNS,u'paragraph-count'),
+ (TEXTNS,u'word-count'),
+ (TEXTNS,u'character-count'),
+ (TEXTNS,u'table-count'),
+ (TEXTNS,u'image-count'),
+ (TEXTNS,u'object-count'),
+ (TEXTNS,u'page-continuation'),
+ (TEXTNS,u'page-number'),
+ (TEXTNS,u'page-variable-get'),
+ (TEXTNS,u'page-variable-set'),
+ (TEXTNS,u'placeholder'),
+ (TEXTNS,u'print-date'),
+ (TEXTNS,u'print-time'),
+ (TEXTNS,u'printed-by'),
+ (TEXTNS,u'reference-mark'),
+ (TEXTNS,u'reference-mark-end'),
+ (TEXTNS,u'reference-mark-start'),
+ (TEXTNS,u'reference-ref'),
+ (TEXTNS,u'ruby'),
+ (TEXTNS,u's'),
+ (TEXTNS,u'script'),
+ (TEXTNS,u'sender-city'),
+ (TEXTNS,u'sender-company'),
+ (TEXTNS,u'sender-country'),
+ (TEXTNS,u'sender-email'),
+ (TEXTNS,u'sender-fax'),
+ (TEXTNS,u'sender-firstname'),
+ (TEXTNS,u'sender-initials'),
+ (TEXTNS,u'sender-lastname'),
+ (TEXTNS,u'sender-phone-private'),
+ (TEXTNS,u'sender-phone-work'),
+ (TEXTNS,u'sender-position'),
+ (TEXTNS,u'sender-postal-code'),
+ (TEXTNS,u'sender-state-or-province'),
+ (TEXTNS,u'sender-street'),
+ (TEXTNS,u'sender-title'),
+ (TEXTNS,u'sequence'),
+ (TEXTNS,u'sequence-ref'),
+ (TEXTNS,u'sheet-name'),
+ (TEXTNS,u'span'),
+ (TEXTNS,u'subject'),
+ (TEXTNS,u'tab'),
+ (TEXTNS,u'table-formula'),
+ (TEXTNS,u'template-name'),
+ (TEXTNS,u'text-input'),
+ (TEXTNS,u'time'),
+ (TEXTNS,u'title'),
+ (TEXTNS,u'toc-mark'),
+ (TEXTNS,u'toc-mark-end'),
+ (TEXTNS,u'toc-mark-start'),
+ (TEXTNS,u'user-defined'),
+ (TEXTNS,u'user-field-get'),
+ (TEXTNS,u'user-field-input'),
+ (TEXTNS,u'user-index-mark'),
+ (TEXTNS,u'user-index-mark-end'),
+ (TEXTNS,u'user-index-mark-start'),
+ (TEXTNS,u'variable-get'),
+ (TEXTNS,u'variable-input'),
+ (TEXTNS,u'variable-set'),
+ ),
+ (TEXTNS,u'ruby-text') : (
+ ),
+ (TEXTNS,u's') : (
+ ),
+ (TEXTNS,u'script') : (
+ ),
+ (TEXTNS,u'section') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'dde-source'),
+ (TABLENS,u'table'),
+ (TEXTNS,u'alphabetical-index'),
+ (TEXTNS,u'bibliography'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'illustration-index'),
+ (TEXTNS,u'list'),
+ (TEXTNS,u'numbered-paragraph'),
+ (TEXTNS,u'object-index'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'section'),
+ (TEXTNS,u'section-source'),
+ (TEXTNS,u'table-index'),
+ (TEXTNS,u'table-of-content'),
+ (TEXTNS,u'user-index'),
+ ),
+ (TEXTNS,u'section-source') : (
+ ),
+ (TEXTNS,u'sender-city') : (
+ ),
+ (TEXTNS,u'sender-company') : (
+ ),
+ (TEXTNS,u'sender-country') : (
+ ),
+ (TEXTNS,u'sender-email') : (
+ ),
+ (TEXTNS,u'sender-fax') : (
+ ),
+ (TEXTNS,u'sender-firstname') : (
+ ),
+ (TEXTNS,u'sender-initials') : (
+ ),
+ (TEXTNS,u'sender-lastname') : (
+ ),
+ (TEXTNS,u'sender-phone-private') : (
+ ),
+ (TEXTNS,u'sender-phone-work') : (
+ ),
+ (TEXTNS,u'sender-position') : (
+ ),
+ (TEXTNS,u'sender-postal-code') : (
+ ),
+ (TEXTNS,u'sender-state-or-province') : (
+ ),
+ (TEXTNS,u'sender-street') : (
+ ),
+ (TEXTNS,u'sender-title') : (
+ ),
+ (TEXTNS,u'sequence') : (
+ ),
+ (TEXTNS,u'sequence-decl') : (
+ ),
+ (TEXTNS,u'sequence-decls') : (
+ (TEXTNS,u'sequence-decl'),
+ ),
+ (TEXTNS,u'sequence-ref') : (
+ ),
+ (TEXTNS,u'sheet-name') : (
+ ),
+ (TEXTNS,u'sort-key') : (
+ ),
+ (TEXTNS,u'span') : (
+ (DR3DNS,u'scene'),
+ (DRAWNS,u'a'),
+ (DRAWNS,u'caption'),
+ (DRAWNS,u'circle'),
+ (DRAWNS,u'connector'),
+ (DRAWNS,u'control'),
+ (DRAWNS,u'custom-shape'),
+ (DRAWNS,u'ellipse'),
+ (DRAWNS,u'frame'),
+ (DRAWNS,u'g'),
+ (DRAWNS,u'line'),
+ (DRAWNS,u'measure'),
+ (DRAWNS,u'page-thumbnail'),
+ (DRAWNS,u'path'),
+ (DRAWNS,u'polygon'),
+ (DRAWNS,u'polyline'),
+ (DRAWNS,u'rect'),
+ (DRAWNS,u'regular-polygon'),
+ (OFFICENS,u'annotation'),
+ (PRESENTATIONNS,u'date-time'),
+ (PRESENTATIONNS,u'footer'),
+ (PRESENTATIONNS,u'header'),
+ (TEXTNS,u'a'),
+ (TEXTNS,u'alphabetical-index-mark'),
+ (TEXTNS,u'alphabetical-index-mark-end'),
+ (TEXTNS,u'alphabetical-index-mark-start'),
+ (TEXTNS,u'author-initials'),
+ (TEXTNS,u'author-name'),
+ (TEXTNS,u'bibliography-mark'),
+ (TEXTNS,u'bookmark'),
+ (TEXTNS,u'bookmark-end'),
+ (TEXTNS,u'bookmark-ref'),
+ (TEXTNS,u'bookmark-start'),
+ (TEXTNS,u'change'),
+ (TEXTNS,u'change-end'),
+ (TEXTNS,u'change-start'),
+ (TEXTNS,u'chapter'),
+ (TEXTNS,u'conditional-text'),
+ (TEXTNS,u'creation-date'),
+ (TEXTNS,u'creation-time'),
+ (TEXTNS,u'creator'),
+ (TEXTNS,u'database-display'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'database-next'),
+ (TEXTNS,u'database-row-number'),
+ (TEXTNS,u'database-row-select'),
+ (TEXTNS,u'date'),
+ (TEXTNS,u'dde-connection'),
+ (TEXTNS,u'description'),
+ (TEXTNS,u'editing-cycles'),
+ (TEXTNS,u'editing-duration'),
+ (TEXTNS,u'execute-macro'),
+ (TEXTNS,u'expression'),
+ (TEXTNS,u'file-name'),
+ (TEXTNS,u'hidden-paragraph'),
+ (TEXTNS,u'hidden-text'),
+ (TEXTNS,u'initial-creator'),
+ (TEXTNS,u'keywords'),
+ (TEXTNS,u'line-break'),
+ (TEXTNS,u'measure'),
+ (TEXTNS,u'modification-date'),
+ (TEXTNS,u'modification-time'),
+ (TEXTNS,u'note'),
+ (TEXTNS,u'note-ref'),
+ (TEXTNS,u'page-count'),
+ (TEXTNS,u'paragraph-count'),
+ (TEXTNS,u'word-count'),
+ (TEXTNS,u'character-count'),
+ (TEXTNS,u'table-count'),
+ (TEXTNS,u'image-count'),
+ (TEXTNS,u'object-count'),
+ (TEXTNS,u'page-continuation'),
+ (TEXTNS,u'page-number'),
+ (TEXTNS,u'page-variable-get'),
+ (TEXTNS,u'page-variable-set'),
+ (TEXTNS,u'placeholder'),
+ (TEXTNS,u'print-date'),
+ (TEXTNS,u'print-time'),
+ (TEXTNS,u'printed-by'),
+ (TEXTNS,u'reference-mark'),
+ (TEXTNS,u'reference-mark-end'),
+ (TEXTNS,u'reference-mark-start'),
+ (TEXTNS,u'reference-ref'),
+ (TEXTNS,u'ruby'),
+ (TEXTNS,u's'),
+ (TEXTNS,u'script'),
+ (TEXTNS,u'sender-city'),
+ (TEXTNS,u'sender-company'),
+ (TEXTNS,u'sender-country'),
+ (TEXTNS,u'sender-email'),
+ (TEXTNS,u'sender-fax'),
+ (TEXTNS,u'sender-firstname'),
+ (TEXTNS,u'sender-initials'),
+ (TEXTNS,u'sender-lastname'),
+ (TEXTNS,u'sender-phone-private'),
+ (TEXTNS,u'sender-phone-work'),
+ (TEXTNS,u'sender-position'),
+ (TEXTNS,u'sender-postal-code'),
+ (TEXTNS,u'sender-state-or-province'),
+ (TEXTNS,u'sender-street'),
+ (TEXTNS,u'sender-title'),
+ (TEXTNS,u'sequence'),
+ (TEXTNS,u'sequence-ref'),
+ (TEXTNS,u'sheet-name'),
+ (TEXTNS,u'span'),
+ (TEXTNS,u'subject'),
+ (TEXTNS,u'tab'),
+ (TEXTNS,u'table-formula'),
+ (TEXTNS,u'template-name'),
+ (TEXTNS,u'text-input'),
+ (TEXTNS,u'time'),
+ (TEXTNS,u'title'),
+ (TEXTNS,u'toc-mark'),
+ (TEXTNS,u'toc-mark-end'),
+ (TEXTNS,u'toc-mark-start'),
+ (TEXTNS,u'user-defined'),
+ (TEXTNS,u'user-field-get'),
+ (TEXTNS,u'user-field-input'),
+ (TEXTNS,u'user-index-mark'),
+ (TEXTNS,u'user-index-mark-end'),
+ (TEXTNS,u'user-index-mark-start'),
+ (TEXTNS,u'variable-get'),
+ (TEXTNS,u'variable-input'),
+ (TEXTNS,u'variable-set'),
+ ),
+ (TEXTNS,u'subject') : (
+ ),
+ (TEXTNS,u'tab') : (
+ ),
+ (TEXTNS,u'table-formula') : (
+ ),
+ (TEXTNS,u'table-index') : (
+ (TEXTNS,u'index-body'),
+ (TEXTNS,u'table-index-source'),
+ ),
+ (TEXTNS,u'table-index-entry-template') : (
+ (TEXTNS,u'index-entry-page-number'),
+ (TEXTNS,u'index-entry-span'),
+ (TEXTNS,u'index-entry-tab-stop'),
+ (TEXTNS,u'index-entry-text'),
+ ),
+ (TEXTNS,u'table-index-source') : (
+ (TEXTNS,u'index-title-template'),
+ (TEXTNS,u'table-index-entry-template'),
+ ),
+ (TEXTNS,u'table-of-content') : (
+ (TEXTNS,u'index-body'),
+ (TEXTNS,u'table-of-content-source'),
+ ),
+ (TEXTNS,u'table-of-content-entry-template') : (
+ (TEXTNS,u'index-entry-chapter'),
+ (TEXTNS,u'index-entry-link-end'),
+ (TEXTNS,u'index-entry-link-start'),
+ (TEXTNS,u'index-entry-page-number'),
+ (TEXTNS,u'index-entry-span'),
+ (TEXTNS,u'index-entry-tab-stop'),
+ (TEXTNS,u'index-entry-text'),
+ ),
+ (TEXTNS,u'table-of-content-source') : (
+ (TEXTNS,u'index-source-styles'),
+ (TEXTNS,u'index-title-template'),
+ (TEXTNS,u'table-of-content-entry-template'),
+ ),
+ (TEXTNS,u'template-name') : (
+ ),
+ (TEXTNS,u'text-input') : (
+ ),
+ (TEXTNS,u'time') : (
+ ),
+ (TEXTNS,u'title') : (
+ ),
+ (TEXTNS,u'toc-mark') : (
+ ),
+ (TEXTNS,u'toc-mark-end') : (
+ ),
+ (TEXTNS,u'toc-mark-start') : (
+ ),
+# allowed_children
+ (TEXTNS,u'tracked-changes') : (
+ (TEXTNS,u'changed-region'),
+ ),
+ (TEXTNS,u'user-defined') : (
+ ),
+ (TEXTNS,u'user-field-decl') : (
+ ),
+ (TEXTNS,u'user-field-decls') : (
+ (TEXTNS,u'user-field-decl'),
+ ),
+ (TEXTNS,u'user-field-get') : (
+ ),
+ (TEXTNS,u'user-field-input') : (
+ ),
+ (TEXTNS,u'user-index') : (
+ (TEXTNS,u'index-body'),
+ (TEXTNS,u'user-index-source'),
+ ),
+ (TEXTNS,u'user-index-entry-template') : (
+ (TEXTNS,u'index-entry-chapter'),
+ (TEXTNS,u'index-entry-page-number'),
+ (TEXTNS,u'index-entry-span'),
+ (TEXTNS,u'index-entry-tab-stop'),
+ (TEXTNS,u'index-entry-text'),
+ ),
+# allowed_children
+ (TEXTNS,u'user-index-mark') : (
+ ),
+ (TEXTNS,u'user-index-mark-end') : (
+ ),
+ (TEXTNS,u'user-index-mark-start') : (
+ ),
+ (TEXTNS,u'user-index-source') : (
+ (TEXTNS,u'index-source-styles'),
+ (TEXTNS,u'index-title-template'),
+ (TEXTNS,u'user-index-entry-template'),
+ ),
+ (TEXTNS,u'variable-decl') : (
+ ),
+ (TEXTNS,u'variable-decls') : (
+ (TEXTNS,u'variable-decl'),
+ ),
+ (TEXTNS,u'variable-get') : (
+ ),
+ (TEXTNS,u'variable-input') : (
+ ),
+ (TEXTNS,u'variable-set') : (
+ ),
+}
+
+struct_elements = ( # Unused?
+ (CONFIGNS,'config-item-set'),
+ (TABLENS,u'table-cell'),
+)
+#
+# List of elements that allows text nodes
+#
+allows_text = (
+ (CONFIGNS,u'config-item'),
+ (DCNS,u'creator'),
+ (DCNS,u'date'),
+ (DCNS,u'description'),
+ (DCNS,u'language'),
+ (DCNS,u'subject'),
+ (DCNS,u'title'),
+# Completes Dublin Core start
+# (DCNS,'contributor'),
+# (DCNS,'coverage'),
+# (DCNS,'format'),
+# (DCNS,'identifier'),
+# (DCNS,'publisher'),
+# (DCNS,'relation'),
+# (DCNS,'rights'),
+# (DCNS,'source'),
+# (DCNS,'type'),
+# Completes Dublin Core end
+ (FORMNS,u'item'),
+ (FORMNS,u'option'),
+ (MATHNS,u'math'),
+ (METANS,u'creation-date'),
+ (METANS,u'date-string'),
+ (METANS,u'editing-cycles'),
+ (METANS,u'editing-duration'),
+ (METANS,u'generator'),
+ (METANS,u'initial-creator'),
+ (METANS,u'keyword'),
+ (METANS,u'print-date'),
+ (METANS,u'printed-by'),
+ (METANS,u'user-defined'),
+ (NUMBERNS,u'currency-symbol'),
+ (NUMBERNS,u'embedded-text'),
+ (NUMBERNS,u'text'),
+ (OFFICENS,u'binary-data'),
+ (OFFICENS,u'script'),
+ (PRESENTATIONNS,u'date-time-decl'),
+ (PRESENTATIONNS,u'footer-decl'),
+ (PRESENTATIONNS,u'header-decl'),
+ (SVGNS,u'desc'),
+ (TEXTNS,u'a'),
+ (TEXTNS,u'author-initials'),
+ (TEXTNS,u'author-name'),
+ (TEXTNS,u'bibliography-mark'),
+ (TEXTNS,u'bookmark-ref'),
+ (TEXTNS,u'chapter'),
+ (TEXTNS,u'character-count'),
+ (TEXTNS,u'conditional-text'),
+ (TEXTNS,u'creation-date'),
+ (TEXTNS,u'creation-time'),
+ (TEXTNS,u'creator'),
+ (TEXTNS,u'database-display'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'database-row-number'),
+ (TEXTNS,u'date'),
+ (TEXTNS,u'dde-connection'),
+ (TEXTNS,u'description'),
+ (TEXTNS,u'editing-cycles'),
+ (TEXTNS,u'editing-duration'),
+ (TEXTNS,u'execute-macro'),
+ (TEXTNS,u'expression'),
+ (TEXTNS,u'file-name'),
+ (TEXTNS,u'h'),
+ (TEXTNS,u'hidden-paragraph'),
+ (TEXTNS,u'hidden-text'),
+ (TEXTNS,u'image-count'),
+ (TEXTNS,u'index-entry-span'),
+ (TEXTNS,u'index-title-template'),
+ (TEXTNS,u'initial-creator'),
+ (TEXTNS,u'keywords'),
+ (TEXTNS,u'linenumbering-separator'),
+ (TEXTNS,u'measure'),
+ (TEXTNS,u'modification-date'),
+ (TEXTNS,u'modification-time'),
+ (TEXTNS,u'note-citation'),
+ (TEXTNS,u'note-continuation-notice-backward'),
+ (TEXTNS,u'note-continuation-notice-forward'),
+ (TEXTNS,u'note-ref'),
+ (TEXTNS,u'number'),
+ (TEXTNS,u'object-count'),
+ (TEXTNS,u'p'),
+ (TEXTNS,u'page-continuation'),
+ (TEXTNS,u'page-count'),
+ (TEXTNS,u'page-number'),
+ (TEXTNS,u'page-variable-get'),
+ (TEXTNS,u'page-variable-set'),
+ (TEXTNS,u'paragraph-count'),
+ (TEXTNS,u'placeholder'),
+ (TEXTNS,u'print-date'),
+ (TEXTNS,u'print-time'),
+ (TEXTNS,u'printed-by'),
+ (TEXTNS,u'reference-ref'),
+ (TEXTNS,u'ruby-base'),
+ (TEXTNS,u'ruby-text'),
+ (TEXTNS,u'script'),
+ (TEXTNS,u'sender-city'),
+ (TEXTNS,u'sender-company'),
+ (TEXTNS,u'sender-country'),
+ (TEXTNS,u'sender-email'),
+ (TEXTNS,u'sender-fax'),
+ (TEXTNS,u'sender-firstname'),
+ (TEXTNS,u'sender-initials'),
+ (TEXTNS,u'sender-lastname'),
+ (TEXTNS,u'sender-phone-private'),
+ (TEXTNS,u'sender-phone-work'),
+ (TEXTNS,u'sender-position'),
+ (TEXTNS,u'sender-postal-code'),
+ (TEXTNS,u'sender-state-or-province'),
+ (TEXTNS,u'sender-street'),
+ (TEXTNS,u'sender-title'),
+ (TEXTNS,u'sequence'),
+ (TEXTNS,u'sequence-ref'),
+ (TEXTNS,u'sheet-name'),
+ (TEXTNS,u'span'),
+ (TEXTNS,u'subject'),
+ (TEXTNS,u'table-count'),
+ (TEXTNS,u'table-formula'),
+ (TEXTNS,u'template-name'),
+ (TEXTNS,u'text-input'),
+ (TEXTNS,u'time'),
+ (TEXTNS,u'title'),
+ (TEXTNS,u'user-defined'),
+ (TEXTNS,u'user-field-get'),
+ (TEXTNS,u'user-field-input'),
+ (TEXTNS,u'variable-get'),
+ (TEXTNS,u'variable-input'),
+ (TEXTNS,u'variable-set'),
+ (TEXTNS,u'word-count'),
+)
+
+# Only the elements with at least one required attribute is listed
+
+required_attributes = {
+ (ANIMNS,u'animate'): (
+ (SMILNS,u'attributeName'),
+ ),
+ (ANIMNS,u'animateColor'): (
+ (SMILNS,u'attributeName'),
+ ),
+ (ANIMNS,u'animateMotion'): (
+ (SMILNS,u'attributeName'),
+ ),
+ (ANIMNS,u'animateTransform'): (
+ (SVGNS,u'type'),
+ (SMILNS,u'attributeName'),
+ ),
+ (ANIMNS,u'command'): (
+ (ANIMNS,u'command'),
+ ),
+ (ANIMNS,u'param'): (
+ (ANIMNS,u'name'),
+ (ANIMNS,u'value'),
+ ),
+ (ANIMNS,u'set'): (
+ (SMILNS,u'attributeName'),
+ ),
+ (ANIMNS,u'transitionFilter'): (
+ (SMILNS,u'type'),
+ ),
+ (CHARTNS,u'axis'): (
+ (CHARTNS,u'dimension'),
+ ),
+ (CHARTNS,u'chart'): (
+ (CHARTNS,u'class'),
+ ),
+ (CHARTNS,u'symbol-image'): (
+ (XLINKNS,u'href'),
+ ),
+ (CONFIGNS,u'config-item'): (
+ (CONFIGNS,u'type'),
+ (CONFIGNS,u'name'),
+ ),
+ (CONFIGNS,u'config-item-map-indexed'): (
+ (CONFIGNS,u'name'),
+ ),
+ (CONFIGNS,u'config-item-map-named'): (
+ (CONFIGNS,u'name'),
+ ),
+ (CONFIGNS,u'config-item-set'): (
+ (CONFIGNS,u'name'),
+ ),
+ (NUMBERNS,u'boolean-style'): (
+ (STYLENS,u'name'),
+ ),
+ (NUMBERNS,u'currency-style'): (
+ (STYLENS,u'name'),
+ ),
+ (NUMBERNS,u'date-style'): (
+ (STYLENS,u'name'),
+ ),
+ (NUMBERNS,u'embedded-text'): (
+ (NUMBERNS,u'position'),
+ ),
+ (NUMBERNS,u'number-style'): (
+ (STYLENS,u'name'),
+ ),
+ (NUMBERNS,u'percentage-style'): (
+ (STYLENS,u'name'),
+ ),
+ (NUMBERNS,u'text-style'): (
+ (STYLENS,u'name'),
+ ),
+ (NUMBERNS,u'time-style'): (
+ (STYLENS,u'name'),
+ ),
+ (DR3DNS,u'extrude'): (
+ (SVGNS,u'd'),
+ (SVGNS,u'viewBox'),
+ ),
+ (DR3DNS,u'light'): (
+ (DR3DNS,u'direction'),
+ ),
+ (DR3DNS,u'rotate'): (
+ (SVGNS,u'viewBox'),
+ (SVGNS,u'd'),
+ ),
+ (DRAWNS,u'a'): (
+ (XLINKNS,u'href'),
+ ),
+ (DRAWNS,u'area-circle'): (
+ (SVGNS,u'cy'),
+ (SVGNS,u'cx'),
+ (SVGNS,u'r'),
+ ),
+ (DRAWNS,u'area-polygon'): (
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'points'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (SVGNS,u'viewBox'),
+ ),
+ (DRAWNS,u'area-rectangle'): (
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ ),
+ (DRAWNS,u'contour-path'): (
+ (DRAWNS,u'recreate-on-edit'),
+ (SVGNS,u'viewBox'),
+ (SVGNS,u'd'),
+ ),
+ (DRAWNS,u'contour-polygon'): (
+ (DRAWNS,u'points'),
+ (DRAWNS,u'recreate-on-edit'),
+ (SVGNS,u'viewBox'),
+ ),
+ (DRAWNS,u'control'): (
+ (DRAWNS,u'control'),
+ ),
+ (DRAWNS,u'fill-image'): (
+ (XLINKNS,u'href'),
+ (DRAWNS,u'name'),
+ ),
+ (DRAWNS,u'floating-frame'): (
+ (XLINKNS,u'href'),
+ ),
+ (DRAWNS,u'glue-point'): (
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (DRAWNS,u'align'),
+ (DRAWNS,u'id'),
+ ),
+ (DRAWNS,u'gradient'): (
+ (DRAWNS,u'style'),
+ ),
+ (DRAWNS,u'handle'): (
+ (DRAWNS,u'handle-position'),
+ ),
+ (DRAWNS,u'hatch'): (
+ (DRAWNS,u'style'),
+ (DRAWNS,u'name'),
+ ),
+ (DRAWNS,u'layer'): (
+ (DRAWNS,u'name'),
+ ),
+ (DRAWNS,u'line'): (
+ (SVGNS,u'y1'),
+ (SVGNS,u'x2'),
+ (SVGNS,u'x1'),
+ (SVGNS,u'y2'),
+ ),
+ (DRAWNS,u'marker'): (
+ (SVGNS,u'd'),
+ (DRAWNS,u'name'),
+ (SVGNS,u'viewBox'),
+ ),
+ (DRAWNS,u'measure'): (
+ (SVGNS,u'y1'),
+ (SVGNS,u'x2'),
+ (SVGNS,u'x1'),
+ (SVGNS,u'y2'),
+ ),
+ (DRAWNS,u'opacity'): (
+ (DRAWNS,u'style'),
+ ),
+ (DRAWNS,u'page'): (
+ (DRAWNS,u'master-page-name'),
+ ),
+ (DRAWNS,u'path'): (
+ (SVGNS,u'd'),
+ (SVGNS,u'viewBox'),
+ ),
+ (DRAWNS,u'plugin'): (
+ (XLINKNS,u'href'),
+ ),
+ (DRAWNS,u'polygon'): (
+ (DRAWNS,u'points'),
+ (SVGNS,u'viewBox'),
+ ),
+ (DRAWNS,u'polyline'): (
+ (DRAWNS,u'points'),
+ (SVGNS,u'viewBox'),
+ ),
+ (DRAWNS,u'regular-polygon'): (
+ (DRAWNS,u'corners'),
+ ),
+ (DRAWNS,u'stroke-dash'): (
+ (DRAWNS,u'name'),
+ ),
+ (FORMNS,u'button'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'checkbox'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'combobox'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'connection-resource'): (
+ (XLINKNS,u'href'),
+ ),
+ (FORMNS,u'date'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'file'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'fixed-text'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'formatted-text'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'frame'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'generic-control'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'grid'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'hidden'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'image'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'image-frame'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'list-property'): (
+ (FORMNS,u'property-name'),
+ ),
+ (FORMNS,u'list-value'): (
+ (OFFICENS,u'string-value'),
+ ),
+ (FORMNS,u'listbox'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'number'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'password'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'property'): (
+ (FORMNS,u'property-name'),
+ ),
+ (FORMNS,u'radio'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'text'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'textarea'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'time'): (
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'value-range'): (
+ (FORMNS,u'id'),
+ ),
+ (MANIFESTNS,u'algorithm') : (
+ (MANIFESTNS,u'algorithm-name'),
+ (MANIFESTNS,u'initialisation-vector'),
+ ),
+ (MANIFESTNS,u'encryption-data') : (
+ (MANIFESTNS,u'checksum-type'),
+ (MANIFESTNS,u'checksum'),
+ ),
+ (MANIFESTNS,u'file-entry') : (
+ (MANIFESTNS,u'full-path'),
+ (MANIFESTNS,u'media-type'),
+ ),
+ (MANIFESTNS,u'key-derivation') : (
+ (MANIFESTNS,u'key-derivation-name'),
+ (MANIFESTNS,u'salt'),
+ (MANIFESTNS,u'iteration-count'),
+ ),
+# required_attributes
+ (METANS,u'template'): (
+ (XLINKNS,u'href'),
+ ),
+ (METANS,u'user-defined'): (
+ (METANS,u'name'),
+ ),
+ (OFFICENS,u'dde-source'): (
+ (OFFICENS,u'dde-topic'),
+ (OFFICENS,u'dde-application'),
+ (OFFICENS,u'dde-item'),
+ ),
+ (OFFICENS,u'document'): (
+ (OFFICENS,u'mimetype'),
+ ),
+ (OFFICENS,u'script'): (
+ (SCRIPTNS,u'language'),
+ ),
+ (PRESENTATIONNS,u'date-time-decl'): (
+ (PRESENTATIONNS,u'source'),
+ (PRESENTATIONNS,u'name'),
+ ),
+ (PRESENTATIONNS,u'dim'): (
+ (DRAWNS,u'color'),
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'event-listener'): (
+ (PRESENTATIONNS,u'action'),
+ (SCRIPTNS,u'event-name'),
+ ),
+ (PRESENTATIONNS,u'footer-decl'): (
+ (PRESENTATIONNS,u'name'),
+ ),
+ (PRESENTATIONNS,u'header-decl'): (
+ (PRESENTATIONNS,u'name'),
+ ),
+ (PRESENTATIONNS,u'hide-shape'): (
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'hide-text'): (
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'placeholder'): (
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (SVGNS,u'height'),
+ (PRESENTATIONNS,u'object'),
+ (SVGNS,u'width'),
+ ),
+ (PRESENTATIONNS,u'play'): (
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'show'): (
+ (PRESENTATIONNS,u'name'),
+ (PRESENTATIONNS,u'pages'),
+ ),
+ (PRESENTATIONNS,u'show-shape'): (
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'show-text'): (
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'sound'): (
+ (XLINKNS,u'href'),
+ ),
+ (SCRIPTNS,u'event-listener'): (
+ (SCRIPTNS,u'language'),
+ (SCRIPTNS,u'event-name'),
+ ),
+ (STYLENS,u'column'): (
+ (STYLENS,u'rel-width'),
+ ),
+ (STYLENS,u'column-sep'): (
+ (STYLENS,u'width'),
+ ),
+ (STYLENS,u'columns'): (
+ (FONS,u'column-count'),
+ ),
+ (STYLENS,u'font-face'): (
+ (STYLENS,u'name'),
+ ),
+ (STYLENS,u'handout-master'): (
+ (STYLENS,u'page-layout-name'),
+ ),
+ (STYLENS,u'map'): (
+ (STYLENS,u'apply-style-name'),
+ (STYLENS,u'condition'),
+ ),
+ (STYLENS,u'master-page'): (
+ (STYLENS,u'page-layout-name'),
+ (STYLENS,u'name'),
+ ),
+ (STYLENS,u'page-layout'): (
+ (STYLENS,u'name'),
+ ),
+ (STYLENS,u'presentation-page-layout'): (
+ (STYLENS,u'name'),
+ ),
+ (STYLENS,u'style'): (
+ (STYLENS,u'name'),
+ ),
+ (STYLENS,u'tab-stop'): (
+ (STYLENS,u'position'),
+ ),
+ (SVGNS,u'definition-src'): (
+ (XLINKNS,u'href'),
+ ),
+ (SVGNS,u'font-face-uri'): (
+ (XLINKNS,u'href'),
+ ),
+ (SVGNS,u'linearGradient'): (
+ (DRAWNS,u'name'),
+ ),
+ (SVGNS,u'radialGradient'): (
+ (DRAWNS,u'name'),
+ ),
+ (SVGNS,u'stop'): (
+ (SVGNS,u'offset'),
+ ),
+ (TABLENS,u'body'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'cell-address'): (
+ (TABLENS,u'column'),
+ (TABLENS,u'table'),
+ (TABLENS,u'row'),
+ ),
+ (TABLENS,u'cell-content-change'): (
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'cell-range-source'): (
+ (TABLENS,u'last-row-spanned'),
+ (TABLENS,u'last-column-spanned'),
+ (XLINKNS,u'href'),
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'consolidation'): (
+ (TABLENS,u'function'),
+ (TABLENS,u'source-cell-range-addresses'),
+ (TABLENS,u'target-cell-address'),
+ ),
+ (TABLENS,u'content-validation'): (
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'data-pilot-display-info'): (
+ (TABLENS,u'member-count'),
+ (TABLENS,u'data-field'),
+ (TABLENS,u'enabled'),
+ (TABLENS,u'display-member-mode'),
+ ),
+# required_attributes
+ (TABLENS,u'data-pilot-field'): (
+ (TABLENS,u'source-field-name'),
+ ),
+ (TABLENS,u'data-pilot-field-reference'): (
+ (TABLENS,u'field-name'),
+ (TABLENS,u'type'),
+ ),
+ (TABLENS,u'data-pilot-group'): (
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'data-pilot-group-member'): (
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'data-pilot-groups'): (
+ (TABLENS,u'source-field-name'),
+ (TABLENS,u'step'),
+ (TABLENS,u'grouped-by'),
+ ),
+ (TABLENS,u'data-pilot-layout-info'): (
+ (TABLENS,u'add-empty-lines'),
+ (TABLENS,u'layout-mode'),
+ ),
+ (TABLENS,u'data-pilot-member'): (
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'data-pilot-sort-info'): (
+ (TABLENS,u'order'),
+ ),
+ (TABLENS,u'data-pilot-subtotal'): (
+ (TABLENS,u'function'),
+ ),
+ (TABLENS,u'data-pilot-table'): (
+ (TABLENS,u'target-range-address'),
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'database-range'): (
+ (TABLENS,u'target-range-address'),
+ ),
+ (TABLENS,u'database-source-query'): (
+ (TABLENS,u'query-name'),
+ (TABLENS,u'database-name'),
+ ),
+ (TABLENS,u'database-source-sql'): (
+ (TABLENS,u'database-name'),
+ (TABLENS,u'sql-statement'),
+ ),
+ (TABLENS,u'database-source-table'): (
+ (TABLENS,u'database-table-name'),
+ (TABLENS,u'database-name'),
+ ),
+ (TABLENS,u'deletion'): (
+ (TABLENS,u'position'),
+ (TABLENS,u'type'),
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'dependency'): (
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'even-columns'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'even-rows'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'filter-condition'): (
+ (TABLENS,u'operator'),
+ (TABLENS,u'field-number'),
+ (TABLENS,u'value'),
+ ),
+ (TABLENS,u'first-column'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'first-row'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'insertion'): (
+ (TABLENS,u'position'),
+ (TABLENS,u'type'),
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'insertion-cut-off'): (
+ (TABLENS,u'position'),
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'label-range'): (
+ (TABLENS,u'label-cell-range-address'),
+ (TABLENS,u'data-cell-range-address'),
+ (TABLENS,u'orientation'),
+ ),
+ (TABLENS,u'last-column'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'last-row'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'movement'): (
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'named-expression'): (
+ (TABLENS,u'expression'),
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'named-range'): (
+ (TABLENS,u'name'),
+ (TABLENS,u'cell-range-address'),
+ ),
+ (TABLENS,u'odd-columns'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'odd-rows'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'operation'): (
+ (TABLENS,u'index'),
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'scenario'): (
+ (TABLENS,u'is-active'),
+ (TABLENS,u'scenario-ranges'),
+ ),
+ (TABLENS,u'sort-by'): (
+ (TABLENS,u'field-number'),
+ ),
+ (TABLENS,u'source-cell-range'): (
+ (TABLENS,u'cell-range-address'),
+ ),
+ (TABLENS,u'source-service'): (
+ (TABLENS,u'source-name'),
+ (TABLENS,u'object-name'),
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'subtotal-field'): (
+ (TABLENS,u'function'),
+ (TABLENS,u'field-number'),
+ ),
+ (TABLENS,u'subtotal-rule'): (
+ (TABLENS,u'group-by-field-number'),
+ ),
+ (TABLENS,u'table-source'): (
+ (XLINKNS,u'href'),
+ ),
+ (TABLENS,u'table-template'): (
+ (TEXTNS,u'last-row-end-column'),
+ (TEXTNS,u'first-row-end-column'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'last-row-start-column'),
+ (TEXTNS,u'first-row-start-column'),
+ ),
+ (TEXTNS,u'a'): (
+ (XLINKNS,u'href'),
+ ),
+# required_attributes
+ (TEXTNS,u'alphabetical-index'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'): (
+ (XLINKNS,u'href'),
+ ),
+ (TEXTNS,u'alphabetical-index-entry-template'): (
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'alphabetical-index-mark'): (
+ (TEXTNS,u'string-value'),
+ ),
+ (TEXTNS,u'alphabetical-index-mark-end'): (
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'alphabetical-index-mark-start'): (
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'bibliography'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'bibliography-entry-template'): (
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'bibliography-type'),
+ ),
+ (TEXTNS,u'bibliography-mark'): (
+ (TEXTNS,u'bibliography-type'),
+ ),
+ (TEXTNS,u'bookmark'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'bookmark-end'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'bookmark-start'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'change'): (
+ (TEXTNS,u'change-id'),
+ ),
+ (TEXTNS,u'change-end'): (
+ (TEXTNS,u'change-id'),
+ ),
+ (TEXTNS,u'change-start'): (
+ (TEXTNS,u'change-id'),
+ ),
+ (TEXTNS,u'changed-region'): (
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'chapter'): (
+ (TEXTNS,u'display'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'conditional-text'): (
+ (TEXTNS,u'string-value-if-true'),
+ (TEXTNS,u'string-value-if-false'),
+ (TEXTNS,u'condition'),
+ ),
+ (TEXTNS,u'database-display'): (
+ (TEXTNS,u'column-name'),
+ (TEXTNS,u'table-name'),
+ ),
+ (TEXTNS,u'database-name'): (
+ (TEXTNS,u'table-name'),
+ ),
+ (TEXTNS,u'database-next'): (
+ (TEXTNS,u'table-name'),
+ ),
+ (TEXTNS,u'database-row-number'): (
+ (TEXTNS,u'table-name'),
+ ),
+ (TEXTNS,u'database-row-select'): (
+ (TEXTNS,u'table-name'),
+ ),
+ (TEXTNS,u'dde-connection'): (
+ (TEXTNS,u'connection-name'),
+ ),
+ (TEXTNS,u'dde-connection-decl'): (
+ (OFFICENS,u'dde-topic'),
+ (OFFICENS,u'dde-application'),
+ (OFFICENS,u'name'),
+ (OFFICENS,u'dde-item'),
+ ),
+ (TEXTNS,u'h'): (
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'hidden-paragraph'): (
+ (TEXTNS,u'condition'),
+ ),
+ (TEXTNS,u'hidden-text'): (
+ (TEXTNS,u'string-value'),
+ (TEXTNS,u'condition'),
+ ),
+ (TEXTNS,u'illustration-index'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'illustration-index-entry-template'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-entry-bibliography'): (
+ (TEXTNS,u'bibliography-data-field'),
+ ),
+ (TEXTNS,u'index-source-style'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-source-styles'): (
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'index-title'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'list-level-style-bullet'): (
+ (TEXTNS,u'bullet-char'),
+ (TEXTNS,u'level'),
+ ),
+ (TEXTNS,u'list-level-style-image'): (
+ (TEXTNS,u'level'),
+ ),
+ (TEXTNS,u'list-level-style-number'): (
+ (TEXTNS,u'level'),
+ ),
+ (TEXTNS,u'list-style'): (
+ (STYLENS,u'name'),
+ ),
+ (TEXTNS,u'measure'): (
+ (TEXTNS,u'kind'),
+ ),
+ (TEXTNS,u'note'): (
+ (TEXTNS,u'note-class'),
+ ),
+ (TEXTNS,u'note-ref'): (
+ (TEXTNS,u'note-class'),
+ ),
+ (TEXTNS,u'notes-configuration'): (
+ (TEXTNS,u'note-class'),
+ ),
+ (TEXTNS,u'object-index'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'object-index-entry-template'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'outline-level-style'): (
+ (TEXTNS,u'level'),
+ ),
+ (TEXTNS,u'page'): (
+ (TEXTNS,u'master-page-name'),
+ ),
+ (TEXTNS,u'page-continuation'): (
+ (TEXTNS,u'select-page'),
+ ),
+ (TEXTNS,u'placeholder'): (
+ (TEXTNS,u'placeholder-type'),
+ ),
+ (TEXTNS,u'reference-mark'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'reference-mark-end'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'reference-mark-start'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'section'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'sequence'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'sequence-decl'): (
+ (TEXTNS,u'display-outline-level'),
+ (TEXTNS,u'name'),
+ ),
+# required_attributes
+ (TEXTNS,u'sort-key'): (
+ (TEXTNS,u'key'),
+ ),
+ (TEXTNS,u'table-index'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'table-index-entry-template'): (
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'table-of-content'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'table-of-content-entry-template'): (
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'toc-mark'): (
+ (TEXTNS,u'string-value'),
+ ),
+ (TEXTNS,u'toc-mark-end'): (
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'toc-mark-start'): (
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'user-defined'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'user-field-decl'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'user-field-get'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'user-field-input'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'user-index'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'user-index-entry-template'): (
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'outline-level'),
+ ),
+# required_attributes
+ (TEXTNS,u'user-index-mark'): (
+ (TEXTNS,u'index-name'),
+ (TEXTNS,u'string-value'),
+ ),
+ (TEXTNS,u'user-index-mark-end'): (
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'user-index-mark-start'): (
+ (TEXTNS,u'index-name'),
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'user-index-source'): (
+ (TEXTNS,u'index-name'),
+ ),
+ (TEXTNS,u'variable-decl'): (
+ (TEXTNS,u'name'),
+ (OFFICENS,u'value-type'),
+ ),
+ (TEXTNS,u'variable-get'): (
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'variable-input'): (
+ (TEXTNS,u'name'),
+ (OFFICENS,u'value-type'),
+ ),
+ (TEXTNS,u'variable-set'): (
+ (TEXTNS,u'name'),
+ ),
+}
+
+# Empty list means the element has no allowed attributes
+# None means anything goes
+
+allowed_attributes = {
+ (DCNS,u'creator'):(
+ ),
+ (DCNS,u'date'):(
+ ),
+ (DCNS,u'description'):(
+ ),
+ (DCNS,u'language'):(
+ ),
+ (DCNS,u'subject'):(
+ ),
+ (DCNS,u'title'):(
+ ),
+# Completes Dublin Core start
+# (DCNS,'contributor') : (
+# ),
+# (DCNS,'coverage') : (
+# ),
+# (DCNS,'format') : (
+# ),
+# (DCNS,'identifier') : (
+# ),
+# (DCNS,'publisher') : (
+# ),
+# (DCNS,'relation') : (
+# ),
+# (DCNS,'rights') : (
+# ),
+# (DCNS,'source') : (
+# ),
+# (DCNS,'type') : (
+# ),
+# Completes Dublin Core end
+ (MATHNS,u'math'): None,
+ (XFORMSNS,u'model'): None,
+ (ANIMNS,u'animate'):(
+ (SMILNS,u'from'),
+ (SMILNS,u'calcMode'),
+ (SMILNS,u'keySplines'),
+ (SMILNS,u'repeatCount'),
+ (SMILNS,u'repeatDur'),
+ (SMILNS,u'attributeName'),
+ (SMILNS,u'to'),
+ (ANIMNS,u'sub-item'),
+ (SMILNS,u'values'),
+ (SMILNS,u'keyTimes'),
+ (SMILNS,u'additive'),
+ (ANIMNS,u'formula'),
+ (SMILNS,u'accumulate'),
+ (SMILNS,u'targetElement'),
+ (SMILNS,u'by'),
+ (SMILNS,u'fill'),
+ ),
+ (ANIMNS,u'animateColor'):(
+ (SMILNS,u'additive'),
+ (SMILNS,u'calcMode'),
+ (SMILNS,u'from'),
+ (SMILNS,u'keySplines'),
+ (SMILNS,u'attributeName'),
+ (ANIMNS,u'color-interpolation-direction'),
+ (SMILNS,u'to'),
+ (ANIMNS,u'sub-item'),
+ (SMILNS,u'targetElement'),
+ (SMILNS,u'keyTimes'),
+ (ANIMNS,u'formula'),
+ (SMILNS,u'accumulate'),
+ (SMILNS,u'values'),
+ (SMILNS,u'fill'),
+ (SMILNS,u'by'),
+ (ANIMNS,u'color-interpolation'),
+ ),
+# allowed_attributes
+ (ANIMNS,u'animateMotion'):(
+ (SVGNS,u'origin'),
+ (SMILNS,u'additive'),
+ (SMILNS,u'calcMode'),
+ (SMILNS,u'from'),
+ (SMILNS,u'values'),
+ (SMILNS,u'keySplines'),
+ (SMILNS,u'attributeName'),
+ (SMILNS,u'to'),
+ (ANIMNS,u'sub-item'),
+ (SMILNS,u'targetElement'),
+ (SMILNS,u'keyTimes'),
+ (ANIMNS,u'formula'),
+ (SMILNS,u'accumulate'),
+ (SVGNS,u'path'),
+ (SMILNS,u'by'),
+ (SMILNS,u'fill'),
+ ),
+ (ANIMNS,u'animateTransform'):(
+ (SMILNS,u'additive'),
+ (SMILNS,u'from'),
+ (SMILNS,u'attributeName'),
+ (SMILNS,u'to'),
+ (ANIMNS,u'sub-item'),
+ (SMILNS,u'targetElement'),
+ (ANIMNS,u'formula'),
+ (SMILNS,u'accumulate'),
+ (SMILNS,u'values'),
+ (SVGNS,u'type'),
+ (SMILNS,u'by'),
+ (SMILNS,u'fill'),
+ ),
+ (ANIMNS,u'audio'):(
+ (PRESENTATIONNS,u'node-type'),
+ (SMILNS,u'begin'),
+ (ANIMNS,u'audio-level'),
+ (PRESENTATIONNS,u'group-id'),
+ (SMILNS,u'repeatDur'),
+ (SMILNS,u'repeatCount'),
+ (PRESENTATIONNS,u'preset-class'),
+ (PRESENTATIONNS,u'preset-id'),
+ (XLINKNS,u'href'),
+ (PRESENTATIONNS,u'preset-sub-type'),
+ (SMILNS,u'end'),
+ (SMILNS,u'dur'),
+ (ANIMNS,u'id'),
+ (PRESENTATIONNS,u'master-element'),
+ ),
+ (ANIMNS,u'command'):(
+ (PRESENTATIONNS,u'node-type'),
+ (SMILNS,u'begin'),
+ (SMILNS,u'end'),
+ (PRESENTATIONNS,u'group-id'),
+ (PRESENTATIONNS,u'preset-class'),
+ (PRESENTATIONNS,u'preset-id'),
+ (ANIMNS,u'sub-item'),
+ (ANIMNS,u'command'),
+ (PRESENTATIONNS,u'preset-sub-type'),
+ (SMILNS,u'targetElement'),
+ (ANIMNS,u'id'),
+ (PRESENTATIONNS,u'master-element'),
+ ),
+ (ANIMNS,u'iterate'):(
+ (SMILNS,u'decelerate'),
+ (SMILNS,u'repeatDur'),
+ (ANIMNS,u'iterate-interval'),
+ (SMILNS,u'repeatCount'),
+ (SMILNS,u'accelerate'),
+ (ANIMNS,u'id'),
+ (SMILNS,u'fill'),
+ (ANIMNS,u'iterate-type'),
+ (SMILNS,u'end'),
+ (SMILNS,u'endsync'),
+ (PRESENTATIONNS,u'preset-sub-type'),
+ (PRESENTATIONNS,u'preset-id'),
+ (SMILNS,u'restartDefault'),
+ (PRESENTATIONNS,u'master-element'),
+ (SMILNS,u'begin'),
+ (PRESENTATIONNS,u'preset-class'),
+ (SMILNS,u'targetElement'),
+ (SMILNS,u'dur'),
+ (SMILNS,u'restart'),
+ (PRESENTATIONNS,u'node-type'),
+ (PRESENTATIONNS,u'group-id'),
+ (SMILNS,u'autoReverse'),
+ (SMILNS,u'fillDefault'),
+ ),
+ (ANIMNS,u'par'):(
+ (PRESENTATIONNS,u'node-type'),
+ (SMILNS,u'decelerate'),
+ (SMILNS,u'begin'),
+ (SMILNS,u'end'),
+ (PRESENTATIONNS,u'group-id'),
+ (SMILNS,u'accelerate'),
+ (SMILNS,u'repeatDur'),
+ (SMILNS,u'repeatCount'),
+ (SMILNS,u'autoReverse'),
+ (PRESENTATIONNS,u'preset-class'),
+ (SMILNS,u'fillDefault'),
+ (PRESENTATIONNS,u'preset-id'),
+ (PRESENTATIONNS,u'preset-sub-type'),
+ (SMILNS,u'restartDefault'),
+ (SMILNS,u'endsync'),
+ (SMILNS,u'dur'),
+ (SMILNS,u'fill'),
+ (ANIMNS,u'id'),
+ (SMILNS,u'restart'),
+ (PRESENTATIONNS,u'master-element'),
+ ),
+ (ANIMNS,u'param'):(
+ (ANIMNS,u'name'),
+ (ANIMNS,u'value'),
+ ),
+ (ANIMNS,u'seq'):(
+ (PRESENTATIONNS,u'node-type'),
+ (SMILNS,u'decelerate'),
+ (SMILNS,u'begin'),
+ (SMILNS,u'end'),
+ (PRESENTATIONNS,u'group-id'),
+ (SMILNS,u'accelerate'),
+ (SMILNS,u'repeatDur'),
+ (SMILNS,u'endsync'),
+ (SMILNS,u'restartDefault'),
+ (PRESENTATIONNS,u'preset-class'),
+ (SMILNS,u'fillDefault'),
+ (PRESENTATIONNS,u'preset-id'),
+ (SMILNS,u'autoReverse'),
+ (PRESENTATIONNS,u'preset-sub-type'),
+ (SMILNS,u'repeatCount'),
+ (SMILNS,u'dur'),
+ (SMILNS,u'fill'),
+ (ANIMNS,u'id'),
+ (SMILNS,u'restart'),
+ (PRESENTATIONNS,u'master-element'),
+ ),
+ (ANIMNS,u'set'):(
+ (SMILNS,u'additive'),
+ (SMILNS,u'attributeName'),
+ (SMILNS,u'to'),
+ (ANIMNS,u'sub-item'),
+ (SMILNS,u'targetElement'),
+ (SMILNS,u'accumulate'),
+ (SMILNS,u'fill'),
+ ),
+ (ANIMNS,u'transitionFilter'):(
+ (SMILNS,u'direction'),
+ (SMILNS,u'subtype'),
+ (SMILNS,u'additive'),
+ (SMILNS,u'calcMode'),
+ (SMILNS,u'from'),
+ (SMILNS,u'fadeColor'),
+ (SMILNS,u'to'),
+ (ANIMNS,u'sub-item'),
+ (SMILNS,u'targetElement'),
+ (SMILNS,u'mode'),
+ (ANIMNS,u'formula'),
+ (SMILNS,u'accumulate'),
+ (SMILNS,u'values'),
+ (SMILNS,u'type'),
+ (SMILNS,u'by'),
+ (SMILNS,u'fill'),
+ ),
+# allowed_attributes
+ (CHARTNS,u'axis'):(
+ (CHARTNS,u'style-name'),
+ (CHARTNS,u'dimension'),
+ (CHARTNS,u'name'),
+ ),
+ (CHARTNS,u'categories'):(
+ (TABLENS,u'cell-range-address'),
+ ),
+ (CHARTNS,u'chart'):(
+ (CHARTNS,u'column-mapping'),
+ (CHARTNS,u'row-mapping'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (CHARTNS,u'style-name'),
+ (CHARTNS,u'class'),
+ ),
+ (CHARTNS,u'data-point'):(
+ (CHARTNS,u'repeated'),
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'domain'):(
+ (TABLENS,u'cell-range-address'),
+ ),
+ (CHARTNS,u'error-indicator'):(
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'floor'):(
+ (SVGNS,u'width'),
+ (CHARTNS,u'style-name'),
+ ),
+# allowed_attributes
+ (CHARTNS,u'footer'):(
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'cell-range'),
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'grid'):(
+ (CHARTNS,u'style-name'),
+ (CHARTNS,u'class'),
+ ),
+ (CHARTNS,u'legend'):(
+ (CHARTNS,u'legend-align'),
+ (STYLENS,u'legend-expansion-aspect-ratio'),
+ (STYLENS,u'legend-expansion'),
+ (CHARTNS,u'legend-position'),
+ (CHARTNS,u'style-name'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ ),
+ (CHARTNS,u'mean-value'):(
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'plot-area'):(
+ (DR3DNS,u'ambient-color'),
+ (DR3DNS,u'distance'),
+ (DR3DNS,u'vrp'),
+ (DR3DNS,u'focal-length'),
+ (CHARTNS,u'data-source-has-labels'),
+ (DR3DNS,u'lighting-mode'),
+ (DR3DNS,u'shade-mode'),
+ (DR3DNS,u'transform'),
+ (DR3DNS,u'shadow-slant'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (CHARTNS,u'style-name'),
+ (DR3DNS,u'vup'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (DR3DNS,u'vpn'),
+ (TABLENS,u'cell-range-address'),
+ (DR3DNS,u'projection'),
+ ),
+ (CHARTNS,u'regression-curve'):(
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'series'):(
+ (CHARTNS,u'style-name'),
+ (CHARTNS,u'attached-axis'),
+ (CHARTNS,u'values-cell-range-address'),
+ (CHARTNS,u'label-cell-address'),
+ (CHARTNS,u'class'),
+ ),
+ (CHARTNS,u'stock-gain-marker'):(
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'stock-loss-marker'):(
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'stock-range-line'):(
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'subtitle'):(
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'cell-range'),
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'symbol-image'):(
+ (XLINKNS,u'href'),
+ ),
+ (CHARTNS,u'title'):(
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'cell-range'),
+ (CHARTNS,u'style-name'),
+ ),
+ (CHARTNS,u'wall'):(
+ (SVGNS,u'width'),
+ (CHARTNS,u'style-name'),
+ ),
+ (CONFIGNS,u'config-item'):(
+ (CONFIGNS,u'type'),
+ (CONFIGNS,u'name'),
+ ),
+ (CONFIGNS,u'config-item-map-entry'):(
+ (CONFIGNS,u'name'),
+ ),
+ (CONFIGNS,u'config-item-map-indexed'):(
+ (CONFIGNS,u'name'),
+ ),
+ (CONFIGNS,u'config-item-map-named'):(
+ (CONFIGNS,u'name'),
+ ),
+ (CONFIGNS,u'config-item-set'):(
+ (CONFIGNS,u'name'),
+ ),
+# allowed_attributes
+ (NUMBERNS,u'am-pm'):(
+ ),
+ (NUMBERNS,u'boolean'):(
+ ),
+ (NUMBERNS,u'boolean-style'):(
+ (NUMBERNS,u'transliteration-language'),
+ (STYLENS,u'name'),
+ (NUMBERNS,u'language'),
+ (NUMBERNS,u'title'),
+ (NUMBERNS,u'country'),
+ (NUMBERNS,u'transliteration-format'),
+ (NUMBERNS,u'transliteration-style'),
+ (STYLENS,u'volatile'),
+ (NUMBERNS,u'transliteration-country'),
+ ),
+ (NUMBERNS,u'currency-style'):(
+ (NUMBERNS,u'transliteration-language'),
+ (STYLENS,u'name'),
+ (NUMBERNS,u'language'),
+ (NUMBERNS,u'title'),
+ (NUMBERNS,u'country'),
+ (NUMBERNS,u'transliteration-format'),
+ (NUMBERNS,u'transliteration-style'),
+ (STYLENS,u'volatile'),
+ (NUMBERNS,u'transliteration-country'),
+ (NUMBERNS,u'automatic-order'),
+ ),
+ (NUMBERNS,u'currency-symbol'):(
+ (NUMBERNS,u'country'),
+ (NUMBERNS,u'language'),
+ ),
+ (NUMBERNS,u'date-style'):(
+ (NUMBERNS,u'transliteration-language'),
+ (STYLENS,u'name'),
+ (NUMBERNS,u'language'),
+ (NUMBERNS,u'title'),
+ (NUMBERNS,u'country'),
+ (NUMBERNS,u'transliteration-format'),
+ (NUMBERNS,u'transliteration-style'),
+ (NUMBERNS,u'format-source'),
+ (STYLENS,u'volatile'),
+ (NUMBERNS,u'transliteration-country'),
+ (NUMBERNS,u'automatic-order'),
+ ),
+ (NUMBERNS,u'day'):(
+ (NUMBERNS,u'style'),
+ (NUMBERNS,u'calendar'),
+ ),
+ (NUMBERNS,u'day-of-week'):(
+ (NUMBERNS,u'style'),
+ (NUMBERNS,u'calendar'),
+ ),
+ (NUMBERNS,u'embedded-text'):(
+ (NUMBERNS,u'position'),
+ ),
+ (NUMBERNS,u'era'):(
+ (NUMBERNS,u'style'),
+ (NUMBERNS,u'calendar'),
+ ),
+ (NUMBERNS,u'fraction'):(
+ (NUMBERNS,u'grouping'),
+ (NUMBERNS,u'min-denominator-digits'),
+ (NUMBERNS,u'min-numerator-digits'),
+ (NUMBERNS,u'min-integer-digits'),
+ (NUMBERNS,u'denominator-value'),
+ ),
+ (NUMBERNS,u'hours'):(
+ (NUMBERNS,u'style'),
+ ),
+ (NUMBERNS,u'minutes'):(
+ (NUMBERNS,u'style'),
+ ),
+ (NUMBERNS,u'month'):(
+ (NUMBERNS,u'style'),
+ (NUMBERNS,u'calendar'),
+ (NUMBERNS,u'possessive-form'),
+ (NUMBERNS,u'textual'),
+ ),
+ (NUMBERNS,u'number'):(
+ (NUMBERNS,u'display-factor'),
+ (NUMBERNS,u'decimal-places'),
+ (NUMBERNS,u'decimal-replacement'),
+ (NUMBERNS,u'min-integer-digits'),
+ (NUMBERNS,u'grouping'),
+ ),
+ (NUMBERNS,u'number-style'):(
+ (NUMBERNS,u'transliteration-language'),
+ (STYLENS,u'name'),
+ (NUMBERNS,u'language'),
+ (NUMBERNS,u'title'),
+ (NUMBERNS,u'country'),
+ (NUMBERNS,u'transliteration-format'),
+ (NUMBERNS,u'transliteration-style'),
+ (STYLENS,u'volatile'),
+ (NUMBERNS,u'transliteration-country'),
+ ),
+# allowed_attributes
+ (NUMBERNS,u'percentage-style'):(
+ (NUMBERNS,u'transliteration-language'),
+ (STYLENS,u'name'),
+ (NUMBERNS,u'language'),
+ (NUMBERNS,u'title'),
+ (NUMBERNS,u'country'),
+ (NUMBERNS,u'transliteration-format'),
+ (NUMBERNS,u'transliteration-style'),
+ (STYLENS,u'volatile'),
+ (NUMBERNS,u'transliteration-country'),
+ ),
+ (NUMBERNS,u'quarter'):(
+ (NUMBERNS,u'style'),
+ (NUMBERNS,u'calendar'),
+ ),
+ (NUMBERNS,u'scientific-number'):(
+ (NUMBERNS,u'min-exponent-digits'),
+ (NUMBERNS,u'decimal-places'),
+ (NUMBERNS,u'min-integer-digits'),
+ (NUMBERNS,u'grouping'),
+ ),
+ (NUMBERNS,u'seconds'):(
+ (NUMBERNS,u'style'),
+ (NUMBERNS,u'decimal-places'),
+ ),
+ (NUMBERNS,u'text'):(
+ ),
+ (NUMBERNS,u'text-content'):(
+ ),
+ (NUMBERNS,u'text-style'):(
+ (NUMBERNS,u'transliteration-language'),
+ (STYLENS,u'name'),
+ (NUMBERNS,u'language'),
+ (NUMBERNS,u'title'),
+ (NUMBERNS,u'country'),
+ (NUMBERNS,u'transliteration-format'),
+ (NUMBERNS,u'transliteration-style'),
+ (STYLENS,u'volatile'),
+ (NUMBERNS,u'transliteration-country'),
+ ),
+ (NUMBERNS,u'time-style'):(
+ (NUMBERNS,u'transliteration-language'),
+ (NUMBERNS,u'transliteration-format'),
+ (STYLENS,u'name'),
+ (NUMBERNS,u'language'),
+ (NUMBERNS,u'title'),
+ (NUMBERNS,u'country'),
+ (NUMBERNS,u'truncate-on-overflow'),
+ (NUMBERNS,u'transliteration-style'),
+ (NUMBERNS,u'format-source'),
+ (STYLENS,u'volatile'),
+ (NUMBERNS,u'transliteration-country'),
+ ),
+ (NUMBERNS,u'week-of-year'):(
+ (NUMBERNS,u'calendar'),
+ ),
+ (NUMBERNS,u'year'):(
+ (NUMBERNS,u'style'),
+ (NUMBERNS,u'calendar'),
+ ),
+ (DR3DNS,u'cube'):(
+ (DR3DNS,u'min-edge'),
+ (DR3DNS,u'max-edge'),
+ (DRAWNS,u'layer'),
+ (DR3DNS,u'transform'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (DRAWNS,u'id'),
+ ),
+ (DR3DNS,u'extrude'):(
+ (DRAWNS,u'layer'),
+ (SVGNS,u'd'),
+ (DR3DNS,u'transform'),
+ (SVGNS,u'viewBox'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (DRAWNS,u'id'),
+ ),
+ (DR3DNS,u'light'):(
+ (DR3DNS,u'diffuse-color'),
+ (DR3DNS,u'direction'),
+ (DR3DNS,u'specular'),
+ (DR3DNS,u'enabled'),
+ ),
+ (DR3DNS,u'rotate'):(
+ (DRAWNS,u'layer'),
+ (SVGNS,u'd'),
+ (DR3DNS,u'transform'),
+ (SVGNS,u'viewBox'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (DRAWNS,u'id'),
+ ),
+# allowed_attributes
+ (DR3DNS,u'scene'):(
+ (DR3DNS,u'ambient-color'),
+ (DR3DNS,u'distance'),
+ (DR3DNS,u'focal-length'),
+ (DR3DNS,u'lighting-mode'),
+ (DR3DNS,u'projection'),
+ (DR3DNS,u'shade-mode'),
+ (DR3DNS,u'shadow-slant'),
+ (DR3DNS,u'transform'),
+ (DR3DNS,u'vpn'),
+ (DR3DNS,u'vrp'),
+ (DR3DNS,u'vup'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'layer'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (PRESENTATIONNS,u'style-name'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (SVGNS,u'x'),
+ (SVGNS,u'y'),
+ (TABLENS,u'end-cell-address'),
+ (TABLENS,u'end-x'),
+ (TABLENS,u'end-y'),
+ (TABLENS,u'table-background'),
+ (TEXTNS,u'anchor-page-number'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DR3DNS,u'sphere'):(
+ (DRAWNS,u'layer'),
+ (DR3DNS,u'center'),
+ (DR3DNS,u'transform'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (DRAWNS,u'id'),
+ (DR3DNS,u'size'),
+ ),
+ (DRAWNS,u'a'):(
+ (OFFICENS,u'name'),
+ (XLINKNS,u'show'),
+ (OFFICENS,u'target-frame-name'),
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (OFFICENS,u'server-map'),
+ ),
+ (DRAWNS,u'applet'):(
+ (DRAWNS,u'code'),
+ (XLINKNS,u'show'),
+ (DRAWNS,u'object'),
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (DRAWNS,u'archive'),
+ (DRAWNS,u'may-script'),
+ ),
+ (DRAWNS,u'area-circle'):(
+ (OFFICENS,u'name'),
+ (XLINKNS,u'show'),
+ (SVGNS,u'cx'),
+ (XLINKNS,u'type'),
+ (DRAWNS,u'nohref'),
+ (SVGNS,u'cy'),
+ (XLINKNS,u'href'),
+ (SVGNS,u'r'),
+ (OFFICENS,u'target-frame-name'),
+ ),
+ (DRAWNS,u'area-polygon'):(
+ (OFFICENS,u'name'),
+ (XLINKNS,u'show'),
+ (XLINKNS,u'type'),
+ (SVGNS,u'height'),
+ (DRAWNS,u'nohref'),
+ (SVGNS,u'width'),
+ (XLINKNS,u'href'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (OFFICENS,u'target-frame-name'),
+ (SVGNS,u'viewBox'),
+ (DRAWNS,u'points'),
+ ),
+ (DRAWNS,u'area-rectangle'):(
+ (OFFICENS,u'name'),
+ (XLINKNS,u'show'),
+ (XLINKNS,u'type'),
+ (SVGNS,u'height'),
+ (DRAWNS,u'nohref'),
+ (SVGNS,u'width'),
+ (XLINKNS,u'href'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (OFFICENS,u'target-frame-name'),
+ ),
+ (DRAWNS,u'caption'):(
+ (TABLENS,u'table-background'),
+ (DRAWNS,u'layer'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'caption-point-y'),
+ (DRAWNS,u'caption-point-x'),
+ (DRAWNS,u'transform'),
+ (TABLENS,u'end-y'),
+ (DRAWNS,u'corner-radius'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (SVGNS,u'height'),
+ (DRAWNS,u'id'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'circle'):(
+ (DRAWNS,u'end-angle'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'kind'),
+ (DRAWNS,u'layer'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'start-angle'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'transform'),
+ (DRAWNS,u'z-index'),
+ (PRESENTATIONNS,u'class-names'),
+ (PRESENTATIONNS,u'style-name'),
+ (SVGNS,u'cx'),
+ (SVGNS,u'cy'),
+ (SVGNS,u'height'),
+ (SVGNS,u'r'),
+ (SVGNS,u'width'),
+ (SVGNS,u'x'),
+ (SVGNS,u'y'),
+ (TABLENS,u'end-cell-address'),
+ (TABLENS,u'end-x'),
+ (TABLENS,u'end-y'),
+ (TABLENS,u'table-background'),
+ (TEXTNS,u'anchor-page-number'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'connector'):(
+ (DRAWNS,u'layer'),
+ (DRAWNS,u'end-shape'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y1'),
+ (SVGNS,u'y2'),
+ (TABLENS,u'table-background'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'transform'),
+ (DRAWNS,u'id'),
+ (TABLENS,u'end-y'),
+ (TABLENS,u'end-x'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (DRAWNS,u'type'),
+ (DRAWNS,u'start-shape'),
+ (DRAWNS,u'z-index'),
+ (PRESENTATIONNS,u'style-name'),
+ (DRAWNS,u'start-glue-point'),
+ (SVGNS,u'x2'),
+ (SVGNS,u'x1'),
+ (TEXTNS,u'anchor-type'),
+ (DRAWNS,u'line-skew'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'end-glue-point'),
+ (DRAWNS,u'text-style-name'),
+ ),
+ (DRAWNS,u'contour-path'):(
+ (SVGNS,u'd'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'recreate-on-edit'),
+ (SVGNS,u'viewBox'),
+ (SVGNS,u'height'),
+ ),
+ (DRAWNS,u'contour-polygon'):(
+ (SVGNS,u'width'),
+ (DRAWNS,u'points'),
+ (DRAWNS,u'recreate-on-edit'),
+ (SVGNS,u'viewBox'),
+ (SVGNS,u'height'),
+ ),
+ (DRAWNS,u'control'):(
+ (DRAWNS,u'control'),
+ (DRAWNS,u'layer'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'text-style-name'),
+ (TABLENS,u'table-background'),
+ (DRAWNS,u'transform'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'end-y'),
+ (DRAWNS,u'id'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'custom-shape'):(
+ (DRAWNS,u'engine'),
+ (DRAWNS,u'layer'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'text-style-name'),
+ (TABLENS,u'table-background'),
+ (DRAWNS,u'transform'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'end-y'),
+ (DRAWNS,u'data'),
+ (DRAWNS,u'id'),
+ (TEXTNS,u'anchor-type'),
+ ),
+# allowed_attributes
+ (DRAWNS,u'ellipse'):(
+ (DRAWNS,u'layer'),
+ (DRAWNS,u'start-angle'),
+ (SVGNS,u'cy'),
+ (SVGNS,u'cx'),
+ (TABLENS,u'table-background'),
+ (TABLENS,u'end-cell-address'),
+ (SVGNS,u'rx'),
+ (DRAWNS,u'transform'),
+ (DRAWNS,u'id'),
+ (SVGNS,u'width'),
+ (TABLENS,u'end-y'),
+ (TABLENS,u'end-x'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (DRAWNS,u'end-angle'),
+ (DRAWNS,u'z-index'),
+ (PRESENTATIONNS,u'style-name'),
+ (SVGNS,u'height'),
+ (TEXTNS,u'anchor-type'),
+ (SVGNS,u'ry'),
+ (DRAWNS,u'kind'),
+ (DRAWNS,u'name'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (DRAWNS,u'text-style-name'),
+ ),
+ (DRAWNS,u'enhanced-geometry'):(
+ (DRAWNS,u'extrusion-rotation-center'),
+ (DRAWNS,u'extrusion-shininess'),
+ (DRAWNS,u'extrusion-rotation-angle'),
+ (DRAWNS,u'extrusion-allowed'),
+ (DRAWNS,u'extrusion-first-light-level'),
+ (DRAWNS,u'extrusion-specularity'),
+ (DRAWNS,u'extrusion-viewpoint'),
+ (DRAWNS,u'extrusion-second-light-level'),
+ (DRAWNS,u'extrusion-origin'),
+ (DRAWNS,u'extrusion-color'),
+ (SVGNS,u'viewBox'),
+ (DR3DNS,u'projection'),
+ (DRAWNS,u'extrusion-metal'),
+ (DRAWNS,u'extrusion-number-of-line-segments'),
+ (DRAWNS,u'text-path-same-letter-heights'),
+ (DRAWNS,u'extrusion-first-light-harsh'),
+ (DRAWNS,u'enhanced-path'),
+ (DRAWNS,u'text-rotate-angle'),
+ (DRAWNS,u'type'),
+ (DRAWNS,u'glue-point-leaving-directions'),
+ (DRAWNS,u'concentric-gradient-fill-allowed'),
+ (DRAWNS,u'text-path-scale'),
+ (DRAWNS,u'extrusion-brightness'),
+ (DRAWNS,u'extrusion-first-light-direction'),
+ (DRAWNS,u'extrusion-light-face'),
+ (DRAWNS,u'text-path-allowed'),
+ (DRAWNS,u'glue-points'),
+ (DRAWNS,u'mirror-vertical'),
+ (DRAWNS,u'extrusion-depth'),
+ (DRAWNS,u'extrusion-diffusion'),
+ (DRAWNS,u'extrusion-second-light-direction'),
+ (DRAWNS,u'extrusion-skew'),
+ (DR3DNS,u'shade-mode'),
+ (DRAWNS,u'path-stretchpoint-y'),
+ (DRAWNS,u'modifiers'),
+ (DRAWNS,u'extrusion'),
+ (DRAWNS,u'path-stretchpoint-x'),
+ (DRAWNS,u'text-areas'),
+ (DRAWNS,u'mirror-horizontal'),
+ (DRAWNS,u'text-path-mode'),
+ (DRAWNS,u'extrusion-second-light-harsh'),
+ (DRAWNS,u'glue-point-type'),
+ (DRAWNS,u'text-path'),
+ ),
+ (DRAWNS,u'equation'):(
+ (DRAWNS,u'formula'),
+ (DRAWNS,u'name'),
+ ),
+ (DRAWNS,u'fill-image'):(
+ (DRAWNS,u'name'),
+ (XLINKNS,u'show'),
+ (XLINKNS,u'actuate'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (XLINKNS,u'href'),
+ (DRAWNS,u'display-name'),
+ (XLINKNS,u'type'),
+ ),
+ (DRAWNS,u'floating-frame'):(
+ (XLINKNS,u'href'),
+ (XLINKNS,u'actuate'),
+ (DRAWNS,u'frame-name'),
+ (XLINKNS,u'type'),
+ (XLINKNS,u'show'),
+ ),
+ (DRAWNS,u'frame'):(
+ (DRAWNS,u'copy-of'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'layer'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'transform'),
+ (DRAWNS,u'z-index'),
+ (PRESENTATIONNS,u'class'),
+ (PRESENTATIONNS,u'class-names'),
+ (PRESENTATIONNS,u'placeholder'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'user-transformed'),
+ (STYLENS,u'rel-height'),
+ (STYLENS,u'rel-width'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (SVGNS,u'x'),
+ (SVGNS,u'y'),
+ (TABLENS,u'end-cell-address'),
+ (TABLENS,u'end-x'),
+ (TABLENS,u'end-y'),
+ (TABLENS,u'table-background'),
+ (TEXTNS,u'anchor-page-number'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'g'):(
+ (DRAWNS,u'id'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (DRAWNS,u'z-index'),
+ (PRESENTATIONNS,u'class-names'),
+ (PRESENTATIONNS,u'style-name'),
+ (SVGNS,u'y'),
+ (TABLENS,u'end-cell-address'),
+ (TABLENS,u'end-x'),
+ (TABLENS,u'end-y'),
+ (TABLENS,u'table-background'),
+ (TEXTNS,u'anchor-page-number'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'glue-point'):(
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (DRAWNS,u'align'),
+ (DRAWNS,u'id'),
+ ),
+ (DRAWNS,u'gradient'):(
+ (DRAWNS,u'style'),
+ (DRAWNS,u'angle'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'end-color'),
+ (DRAWNS,u'start-color'),
+ (DRAWNS,u'cy'),
+ (DRAWNS,u'cx'),
+ (DRAWNS,u'display-name'),
+ (DRAWNS,u'border'),
+ (DRAWNS,u'end-intensity'),
+ (DRAWNS,u'start-intensity'),
+ ),
+ (DRAWNS,u'handle'):(
+ (DRAWNS,u'handle-radius-range-minimum'),
+ (DRAWNS,u'handle-switched'),
+ (DRAWNS,u'handle-range-y-maximum'),
+ (DRAWNS,u'handle-mirror-horizontal'),
+ (DRAWNS,u'handle-range-x-maximum'),
+ (DRAWNS,u'handle-mirror-vertical'),
+ (DRAWNS,u'handle-range-y-minimum'),
+ (DRAWNS,u'handle-radius-range-maximum'),
+ (DRAWNS,u'handle-range-x-minimum'),
+ (DRAWNS,u'handle-position'),
+ (DRAWNS,u'handle-polar'),
+ ),
+ (DRAWNS,u'hatch'):(
+ (DRAWNS,u'distance'),
+ (DRAWNS,u'style'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'color'),
+ (DRAWNS,u'display-name'),
+ (DRAWNS,u'rotation'),
+ ),
+ (DRAWNS,u'image'):(
+ (DRAWNS,u'filter-name'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'show'),
+ ),
+ (DRAWNS,u'image-map'):(
+ ),
+ (DRAWNS,u'layer'):(
+ (DRAWNS,u'protected'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'display'),
+ ),
+ (DRAWNS,u'layer-set'):(
+ ),
+ (DRAWNS,u'line'):(
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'layer'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'style-name'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'transform'),
+ (DRAWNS,u'z-index'),
+ (PRESENTATIONNS,u'class-names'),
+ (PRESENTATIONNS,u'style-name'),
+ (SVGNS,u'x1'),
+ (SVGNS,u'x2'),
+ (SVGNS,u'y1'),
+ (SVGNS,u'y2'),
+ (TABLENS,u'end-cell-address'),
+ (TABLENS,u'end-x'),
+ (TABLENS,u'end-y'),
+ (TABLENS,u'table-background'),
+ (TEXTNS,u'anchor-page-number'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'marker'):(
+ (SVGNS,u'd'),
+ (DRAWNS,u'display-name'),
+ (DRAWNS,u'name'),
+ (SVGNS,u'viewBox'),
+ ),
+# allowed_attributes
+ (DRAWNS,u'measure'):(
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'layer'),
+ (SVGNS,u'y2'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'transform'),
+ (TABLENS,u'table-background'),
+ (SVGNS,u'x2'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y1'),
+ (TABLENS,u'end-y'),
+ (SVGNS,u'x1'),
+ (DRAWNS,u'id'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'object'):(
+ (XLINKNS,u'type'),
+ (XLINKNS,u'href'),
+ (DRAWNS,u'notify-on-update-of-ranges'),
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'show'),
+ ),
+ (DRAWNS,u'object-ole'):(
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (DRAWNS,u'class-id'),
+ (XLINKNS,u'show'),
+ ),
+ (DRAWNS,u'opacity'):(
+ (DRAWNS,u'style'),
+ (DRAWNS,u'angle'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'start'),
+ (DRAWNS,u'cy'),
+ (DRAWNS,u'cx'),
+ (DRAWNS,u'end'),
+ (DRAWNS,u'display-name'),
+ (DRAWNS,u'border'),
+ ),
+ (DRAWNS,u'page'):(
+ (PRESENTATIONNS,u'presentation-page-layout-name'),
+ (DRAWNS,u'name'),
+ (PRESENTATIONNS,u'use-footer-name'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'use-header-name'),
+ (DRAWNS,u'master-page-name'),
+ (DRAWNS,u'id'),
+ (PRESENTATIONNS,u'use-date-time-name'),
+ ),
+ (DRAWNS,u'page-thumbnail'):(
+ (TABLENS,u'table-background'),
+ (PRESENTATIONNS,u'user-transformed'),
+ (DRAWNS,u'layer'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'transform'),
+ (DRAWNS,u'page-number'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'end-y'),
+ (PRESENTATIONNS,u'placeholder'),
+ (PRESENTATIONNS,u'class'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'param'):(
+ (DRAWNS,u'name'),
+ (DRAWNS,u'value'),
+ ),
+ (DRAWNS,u'path'):(
+ (TABLENS,u'table-background'),
+ (DRAWNS,u'layer'),
+ (TABLENS,u'end-cell-address'),
+ (SVGNS,u'd'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'transform'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (TEXTNS,u'anchor-type'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'end-y'),
+ (SVGNS,u'viewBox'),
+ (DRAWNS,u'name'),
+ ),
+ (DRAWNS,u'plugin'):(
+ (XLINKNS,u'type'),
+ (XLINKNS,u'href'),
+ (DRAWNS,u'mime-type'),
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'show'),
+ ),
+ (DRAWNS,u'polygon'):(
+ (TABLENS,u'table-background'),
+ (DRAWNS,u'layer'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'transform'),
+ (PRESENTATIONNS,u'style-name'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'points'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'end-y'),
+ (SVGNS,u'viewBox'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'polyline'):(
+ (TABLENS,u'table-background'),
+ (DRAWNS,u'layer'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'transform'),
+ (PRESENTATIONNS,u'style-name'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'points'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (TEXTNS,u'anchor-page-number'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'end-y'),
+ (SVGNS,u'viewBox'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'rect'):(
+ (DRAWNS,u'corner-radius'),
+ (DRAWNS,u'id'),
+ (DRAWNS,u'layer'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'transform'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (PRESENTATIONNS,u'style-name'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (SVGNS,u'x'),
+ (SVGNS,u'y'),
+ (TABLENS,u'end-cell-address'),
+ (TABLENS,u'end-x'),
+ (TABLENS,u'end-y'),
+ (TABLENS,u'table-background'),
+ (TEXTNS,u'anchor-page-number'),
+ (TEXTNS,u'anchor-type'),
+ ),
+# allowed_attributes
+ (DRAWNS,u'regular-polygon'):(
+ (TABLENS,u'table-background'),
+ (DRAWNS,u'layer'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'text-style-name'),
+ (TEXTNS,u'anchor-page-number'),
+ (DRAWNS,u'concave'),
+ (DRAWNS,u'sharpness'),
+ (DRAWNS,u'transform'),
+ (SVGNS,u'height'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'z-index'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (DRAWNS,u'corners'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'end-y'),
+ (DRAWNS,u'id'),
+ (TEXTNS,u'anchor-type'),
+ ),
+ (DRAWNS,u'stroke-dash'):(
+ (DRAWNS,u'distance'),
+ (DRAWNS,u'dots1-length'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'dots2-length'),
+ (DRAWNS,u'style'),
+ (DRAWNS,u'dots1'),
+ (DRAWNS,u'display-name'),
+ (DRAWNS,u'dots2'),
+ ),
+ (DRAWNS,u'text-box'):(
+ (FONS,u'min-width'),
+ (DRAWNS,u'corner-radius'),
+ (FONS,u'max-height'),
+ (FONS,u'min-height'),
+ (DRAWNS,u'chain-next-name'),
+ (FONS,u'max-width'),
+ ),
+ (FORMNS,u'button'):(
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'focus-on-click'),
+ (FORMNS,u'image-align'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'button-type'),
+ (FORMNS,u'title'),
+ (FORMNS,u'default-button'),
+ (FORMNS,u'value'),
+ (FORMNS,u'label'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'image-data'),
+ (XLINKNS,u'href'),
+ (FORMNS,u'toggle'),
+ (FORMNS,u'xforms-submission'),
+ (OFFICENS,u'target-frame'),
+ (FORMNS,u'id'),
+ (FORMNS,u'image-position'),
+ ),
+ (FORMNS,u'checkbox'):(
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'image-align'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'title'),
+ (FORMNS,u'is-tristate'),
+ (FORMNS,u'current-state'),
+ (FORMNS,u'value'),
+ (FORMNS,u'label'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'state'),
+ (FORMNS,u'visual-effect'),
+ (FORMNS,u'id'),
+ (FORMNS,u'image-position'),
+ ),
+ (FORMNS,u'column'):(
+ (FORMNS,u'control-implementation'),
+ (FORMNS,u'text-style-name'),
+ (FORMNS,u'name'),
+ (FORMNS,u'label'),
+ ),
+ (FORMNS,u'combobox'):(
+ (FORMNS,u'convert-empty-to-null'),
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'dropdown'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'auto-complete'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'readonly'),
+ (FORMNS,u'list-source'),
+ (FORMNS,u'title'),
+ (FORMNS,u'list-source-type'),
+ (FORMNS,u'id'),
+ (FORMNS,u'current-value'),
+ (FORMNS,u'size'),
+ ),
+ (FORMNS,u'connection-resource'):(
+ (XLINKNS,u'href'),
+ ),
+ (FORMNS,u'date'):(
+ (FORMNS,u'convert-empty-to-null'),
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (FORMNS,u'min-value'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'max-value'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'readonly'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'title'),
+ (FORMNS,u'id'),
+ (FORMNS,u'current-value'),
+ ),
+ (FORMNS,u'file'):(
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'title'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'readonly'),
+ (FORMNS,u'id'),
+ (FORMNS,u'current-value'),
+ ),
+ (FORMNS,u'fixed-text'):(
+ (FORMNS,u'name'),
+ (FORMNS,u'for'),
+ (FORMNS,u'title'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'multi-line'),
+ (FORMNS,u'label'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'form'):(
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (FORMNS,u'allow-deletes'),
+ (FORMNS,u'command-type'),
+ (FORMNS,u'apply-filter'),
+ (XLINKNS,u'type'),
+ (FORMNS,u'method'),
+ (OFFICENS,u'target-frame'),
+ (FORMNS,u'navigation-mode'),
+ (FORMNS,u'detail-fields'),
+ (FORMNS,u'master-fields'),
+ (FORMNS,u'allow-updates'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-cycle'),
+ (FORMNS,u'control-implementation'),
+ (FORMNS,u'escape-processing'),
+ (FORMNS,u'filter'),
+ (FORMNS,u'command'),
+ (FORMNS,u'datasource'),
+ (FORMNS,u'enctype'),
+ (FORMNS,u'allow-inserts'),
+ (FORMNS,u'ignore-result'),
+ (FORMNS,u'order'),
+ ),
+ (FORMNS,u'formatted-text'):(
+ (FORMNS,u'convert-empty-to-null'),
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'max-value'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'title'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'readonly'),
+ (FORMNS,u'min-value'),
+ (FORMNS,u'validation'),
+ (FORMNS,u'id'),
+ (FORMNS,u'current-value'),
+ ),
+ (FORMNS,u'frame'):(
+ (FORMNS,u'name'),
+ (FORMNS,u'for'),
+ (FORMNS,u'title'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'label'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'generic-control'):(
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'name'),
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'grid'):(
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'title'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'hidden'):(
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'name'),
+ (FORMNS,u'value'),
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'image'):(
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'button-type'),
+ (FORMNS,u'title'),
+ (FORMNS,u'value'),
+ (OFFICENS,u'target-frame'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'image-data'),
+ (XLINKNS,u'href'),
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'image-frame'):(
+ (FORMNS,u'name'),
+ (FORMNS,u'title'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'readonly'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'image-data'),
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'item'):(
+ (FORMNS,u'label'),
+ ),
+ (FORMNS,u'list-property'):(
+ (FORMNS,u'property-name'),
+ (OFFICENS,u'value-type'),
+ ),
+ (FORMNS,u'list-value'):(
+ (OFFICENS,u'string-value'),
+ ),
+# allowed_attributes
+ (FORMNS,u'listbox'):(
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'bound-column'),
+ (FORMNS,u'multiple'),
+ (FORMNS,u'name'),
+ (FORMNS,u'dropdown'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'list-source'),
+ (FORMNS,u'title'),
+ (FORMNS,u'list-source-type'),
+ (FORMNS,u'id'),
+ (FORMNS,u'xforms-list-source'),
+ (FORMNS,u'size'),
+ ),
+ (FORMNS,u'number'):(
+ (FORMNS,u'convert-empty-to-null'),
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (FORMNS,u'min-value'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'max-value'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'readonly'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'title'),
+ (FORMNS,u'id'),
+ (FORMNS,u'current-value'),
+ ),
+ (FORMNS,u'option'):(
+ (FORMNS,u'current-selected'),
+ (FORMNS,u'selected'),
+ (FORMNS,u'value'),
+ (FORMNS,u'label'),
+ ),
+ (FORMNS,u'password'):(
+ (FORMNS,u'convert-empty-to-null'),
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'title'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'echo-char'),
+ (FORMNS,u'id'),
+ ),
+ (FORMNS,u'properties'):(
+ ),
+ (FORMNS,u'property'):(
+ (OFFICENS,u'string-value'),
+ (OFFICENS,u'value'),
+ (OFFICENS,u'boolean-value'),
+ (FORMNS,u'property-name'),
+ (OFFICENS,u'currency'),
+ (OFFICENS,u'date-value'),
+ (OFFICENS,u'value-type'),
+ (OFFICENS,u'time-value'),
+ ),
+ (FORMNS,u'radio'):(
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'selected'),
+ (FORMNS,u'image-align'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'current-selected'),
+ (FORMNS,u'value'),
+ (FORMNS,u'label'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'title'),
+ (FORMNS,u'visual-effect'),
+ (FORMNS,u'id'),
+ (FORMNS,u'image-position'),
+ ),
+ (FORMNS,u'text'):(
+ (FORMNS,u'convert-empty-to-null'),
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'title'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'readonly'),
+ (FORMNS,u'id'),
+ (FORMNS,u'current-value'),
+ ),
+ (FORMNS,u'textarea'):(
+ (FORMNS,u'convert-empty-to-null'),
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'title'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'readonly'),
+ (FORMNS,u'id'),
+ (FORMNS,u'current-value'),
+ ),
+ (FORMNS,u'time'):(
+ (FORMNS,u'convert-empty-to-null'),
+ (FORMNS,u'max-length'),
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (FORMNS,u'min-value'),
+ (FORMNS,u'data-field'),
+ (FORMNS,u'max-value'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'readonly'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'title'),
+ (FORMNS,u'id'),
+ (FORMNS,u'current-value'),
+ ),
+ (FORMNS,u'value-range'):(
+ (FORMNS,u'tab-stop'),
+ (FORMNS,u'max-value'),
+ (FORMNS,u'name'),
+ (FORMNS,u'tab-index'),
+ (FORMNS,u'control-implementation'),
+ (XFORMSNS,u'bind'),
+ (FORMNS,u'title'),
+ (FORMNS,u'value'),
+ (FORMNS,u'disabled'),
+ (FORMNS,u'printable'),
+ (FORMNS,u'orientation'),
+ (FORMNS,u'page-step-size'),
+ (FORMNS,u'delay-for-repeat'),
+ (FORMNS,u'min-value'),
+ (FORMNS,u'id'),
+ (FORMNS,u'step-size'),
+ ),
+ (MANIFESTNS,'algorithm') : (
+ (MANIFESTNS,'algorithm-name'),
+ (MANIFESTNS,'initialisation-vector'),
+ ),
+ (MANIFESTNS,'encryption-data') : (
+ (MANIFESTNS,'checksum-type'),
+ (MANIFESTNS,'checksum'),
+ ),
+ (MANIFESTNS,'file-entry') : (
+ (MANIFESTNS,'full-path'),
+ (MANIFESTNS,'media-type'),
+ (MANIFESTNS,'size'),
+ ),
+ (MANIFESTNS,'key-derivation') : (
+ (MANIFESTNS,'key-derivation-name'),
+ (MANIFESTNS,'salt'),
+ (MANIFESTNS,'iteration-count'),
+ ),
+# allowed_attributes
+ (METANS,u'auto-reload'):(
+ (METANS,u'delay'),
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (XLINKNS,u'show'),
+ ),
+ (METANS,u'creation-date'):(
+ ),
+ (METANS,u'date-string'):(
+ ),
+ (METANS,u'document-statistic'):(
+ (METANS,u'non-whitespace-character-count'),
+ (METANS,u'ole-object-count'),
+ (METANS,u'table-count'),
+ (METANS,u'row-count'),
+ (METANS,u'character-count'),
+ (METANS,u'sentence-count'),
+ (METANS,u'draw-count'),
+ (METANS,u'paragraph-count'),
+ (METANS,u'word-count'),
+ (METANS,u'object-count'),
+ (METANS,u'syllable-count'),
+ (METANS,u'image-count'),
+ (METANS,u'page-count'),
+ (METANS,u'frame-count'),
+ (METANS,u'cell-count'),
+ ),
+ (METANS,u'editing-cycles'):(
+ ),
+ (METANS,u'editing-duration'):(
+ ),
+ (METANS,u'generator'):(
+ ),
+ (METANS,u'hyperlink-behaviour'):(
+ (OFFICENS,u'target-frame-name'),
+ (XLINKNS,u'show'),
+ ),
+ (METANS,u'initial-creator'):(
+ ),
+ (METANS,u'keyword'):(
+ ),
+ (METANS,u'print-date'):(
+ ),
+ (METANS,u'printed-by'):(
+ ),
+ (METANS,u'template'):(
+ (METANS,u'date'),
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (XLINKNS,u'title'),
+ ),
+ (METANS,u'user-defined'):(
+ (METANS,u'name'),
+ (METANS,u'value-type'),
+ ),
+ (OFFICENS,u'annotation'):(
+ (DRAWNS,u'layer'),
+ (SVGNS,u'height'),
+ (TEXTNS,u'anchor-page-number'),
+ (TABLENS,u'table-background'),
+ (TABLENS,u'end-cell-address'),
+ (DRAWNS,u'transform'),
+ (DRAWNS,u'id'),
+ (SVGNS,u'width'),
+ (DRAWNS,u'class-names'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'class-names'),
+ (TABLENS,u'end-x'),
+ (DRAWNS,u'text-style-name'),
+ (DRAWNS,u'z-index'),
+ (PRESENTATIONNS,u'style-name'),
+ (TEXTNS,u'anchor-type'),
+ (DRAWNS,u'name'),
+ (DRAWNS,u'caption-point-y'),
+ (DRAWNS,u'caption-point-x'),
+ (DRAWNS,u'corner-radius'),
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (TABLENS,u'end-y'),
+ (OFFICENS,u'display'),
+ ),
+ (OFFICENS,u'automatic-styles'):(
+ ),
+ (OFFICENS,u'binary-data'):(
+ ),
+ (OFFICENS,u'body'):(
+ ),
+ (OFFICENS,u'change-info'):(
+ ),
+ (OFFICENS,u'chart'):(
+ ),
+ (OFFICENS,u'dde-source'):(
+ (OFFICENS,u'dde-application'),
+ (OFFICENS,u'automatic-update'),
+ (OFFICENS,u'conversion-mode'),
+ (OFFICENS,u'dde-item'),
+ (OFFICENS,u'dde-topic'),
+ (OFFICENS,u'name'),
+ ),
+ (OFFICENS,u'document'):(
+ (OFFICENS,u'mimetype'),
+ (OFFICENS,u'version'),
+ ),
+ (OFFICENS,u'document-content'):(
+ (OFFICENS,u'version'),
+ ),
+ (OFFICENS,u'document-meta'):(
+ (OFFICENS,u'version'),
+ ),
+ (OFFICENS,u'document-settings'):(
+ (OFFICENS,u'version'),
+ ),
+ (OFFICENS,u'document-styles'):(
+ (OFFICENS,u'version'),
+ ),
+ (OFFICENS,u'drawing'):(
+ ),
+ (OFFICENS,u'event-listeners'):(
+ ),
+ (OFFICENS,u'font-face-decls'):(
+ ),
+ (OFFICENS,u'forms'):(
+ (FORMNS,u'automatic-focus'),
+ (FORMNS,u'apply-design-mode'),
+ ),
+ (OFFICENS,u'image'):(
+ ),
+ (OFFICENS,u'master-styles'):(
+ ),
+ (OFFICENS,u'meta'):(
+ ),
+ (OFFICENS,u'presentation'):(
+ ),
+ (OFFICENS,u'script'):(
+ (SCRIPTNS,u'language'),
+ ),
+ (OFFICENS,u'scripts'):(
+ ),
+ (OFFICENS,u'settings'):(
+ ),
+ (OFFICENS,u'spreadsheet'):(
+ (TABLENS,u'structure-protected'),
+ (TABLENS,u'protection-key'),
+ ),
+ (OFFICENS,u'styles'):(
+ ),
+ (OFFICENS,u'text'):(
+ (TEXTNS,u'global'),
+ ),
+ (PRESENTATIONNS,u'animation-group'):(
+ ),
+ (PRESENTATIONNS,u'animations'):(
+ ),
+ (PRESENTATIONNS,u'date-time'):(
+ ),
+ (PRESENTATIONNS,u'date-time-decl'):(
+ (PRESENTATIONNS,u'source'),
+ (STYLENS,u'data-style-name'),
+ (PRESENTATIONNS,u'name'),
+ ),
+ (PRESENTATIONNS,u'dim'):(
+ (DRAWNS,u'color'),
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'event-listener'):(
+ (PRESENTATIONNS,u'direction'),
+ (XLINKNS,u'show'),
+ (XLINKNS,u'type'),
+ (XLINKNS,u'actuate'),
+ (PRESENTATIONNS,u'effect'),
+ (SCRIPTNS,u'event-name'),
+ (PRESENTATIONNS,u'start-scale'),
+ (XLINKNS,u'href'),
+ (PRESENTATIONNS,u'verb'),
+ (PRESENTATIONNS,u'action'),
+ (PRESENTATIONNS,u'speed'),
+ ),
+ (PRESENTATIONNS,u'footer'):(
+ ),
+ (PRESENTATIONNS,u'footer-decl'):(
+ (PRESENTATIONNS,u'name'),
+ ),
+ (PRESENTATIONNS,u'header'):(
+ ),
+ (PRESENTATIONNS,u'header-decl'):(
+ (PRESENTATIONNS,u'name'),
+ ),
+ (PRESENTATIONNS,u'hide-shape'):(
+ (PRESENTATIONNS,u'direction'),
+ (PRESENTATIONNS,u'effect'),
+ (PRESENTATIONNS,u'delay'),
+ (PRESENTATIONNS,u'start-scale'),
+ (PRESENTATIONNS,u'path-id'),
+ (PRESENTATIONNS,u'speed'),
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'hide-text'):(
+ (PRESENTATIONNS,u'direction'),
+ (PRESENTATIONNS,u'effect'),
+ (PRESENTATIONNS,u'delay'),
+ (PRESENTATIONNS,u'start-scale'),
+ (PRESENTATIONNS,u'path-id'),
+ (PRESENTATIONNS,u'speed'),
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'notes'):(
+ (STYLENS,u'page-layout-name'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'use-header-name'),
+ (PRESENTATIONNS,u'use-date-time-name'),
+ (PRESENTATIONNS,u'use-footer-name'),
+ ),
+ (PRESENTATIONNS,u'placeholder'):(
+ (SVGNS,u'y'),
+ (SVGNS,u'x'),
+ (SVGNS,u'height'),
+ (PRESENTATIONNS,u'object'),
+ (SVGNS,u'width'),
+ ),
+ (PRESENTATIONNS,u'play'):(
+ (PRESENTATIONNS,u'speed'),
+ (DRAWNS,u'shape-id'),
+ ),
+# allowed_attributes
+ (PRESENTATIONNS,u'settings'):(
+ (PRESENTATIONNS,u'animations'),
+ (PRESENTATIONNS,u'endless'),
+ (PRESENTATIONNS,u'force-manual'),
+ (PRESENTATIONNS,u'full-screen'),
+ (PRESENTATIONNS,u'mouse-as-pen'),
+ (PRESENTATIONNS,u'mouse-visible'),
+ (PRESENTATIONNS,u'pause'),
+ (PRESENTATIONNS,u'show'),
+ (PRESENTATIONNS,u'show-end-of-presentation-slide'),
+ (PRESENTATIONNS,u'show-logo'),
+ (PRESENTATIONNS,u'start-page'),
+ (PRESENTATIONNS,u'start-with-navigator'),
+ (PRESENTATIONNS,u'stay-on-top'),
+ (PRESENTATIONNS,u'transition-on-click'),
+ ),
+ (PRESENTATIONNS,u'show'):(
+ (PRESENTATIONNS,u'name'),
+ (PRESENTATIONNS,u'pages'),
+ ),
+ (PRESENTATIONNS,u'show-shape'):(
+ (PRESENTATIONNS,u'direction'),
+ (PRESENTATIONNS,u'effect'),
+ (PRESENTATIONNS,u'delay'),
+ (PRESENTATIONNS,u'start-scale'),
+ (PRESENTATIONNS,u'path-id'),
+ (PRESENTATIONNS,u'speed'),
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'show-text'):(
+ (PRESENTATIONNS,u'direction'),
+ (PRESENTATIONNS,u'effect'),
+ (PRESENTATIONNS,u'delay'),
+ (PRESENTATIONNS,u'start-scale'),
+ (PRESENTATIONNS,u'path-id'),
+ (PRESENTATIONNS,u'speed'),
+ (DRAWNS,u'shape-id'),
+ ),
+ (PRESENTATIONNS,u'sound'):(
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (PRESENTATIONNS,u'play-full'),
+ (XLINKNS,u'show'),
+ ),
+ (SCRIPTNS,u'event-listener'):(
+ (SCRIPTNS,u'language'),
+ (SCRIPTNS,u'macro-name'),
+ (XLINKNS,u'actuate'),
+ (SCRIPTNS,u'event-name'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ ),
+ (STYLENS,u'background-image'):(
+ (DRAWNS,u'opacity'),
+ (STYLENS,u'repeat'),
+ (XLINKNS,u'show'),
+ (XLINKNS,u'actuate'),
+ (STYLENS,u'filter-name'),
+ (XLINKNS,u'href'),
+ (STYLENS,u'position'),
+ (XLINKNS,u'type'),
+ ),
+ (STYLENS,u'chart-properties'): (
+ (CHARTNS,u'connect-bars'),
+ (CHARTNS,u'data-label-number'),
+ (CHARTNS,u'data-label-symbol'),
+ (CHARTNS,u'data-label-text'),
+ (CHARTNS,u'deep'),
+ (CHARTNS,u'display-label'),
+ (CHARTNS,u'error-category'),
+ (CHARTNS,u'error-lower-indicator'),
+ (CHARTNS,u'error-lower-limit'),
+ (CHARTNS,u'error-margin'),
+ (CHARTNS,u'error-percentage'),
+ (CHARTNS,u'error-upper-indicator'),
+ (CHARTNS,u'error-upper-limit'),
+ (CHARTNS,u'gap-width'),
+ (CHARTNS,u'interpolation'),
+ (CHARTNS,u'interval-major'),
+ (CHARTNS,u'interval-minor'),
+ (CHARTNS,u'japanese-candle-stick'),
+ (CHARTNS,u'label-arrangement'),
+ (CHARTNS,u'lines'),
+ (CHARTNS,u'link-data-style-to-source'),
+ (CHARTNS,u'logarithmic'),
+ (CHARTNS,u'maximum'),
+ (CHARTNS,u'mean-value'),
+ (CHARTNS,u'minimum'),
+ (CHARTNS,u'origin'),
+ (CHARTNS,u'overlap'),
+ (CHARTNS,u'percentage'),
+ (CHARTNS,u'pie-offset'),
+ (CHARTNS,u'regression-type'),
+ (CHARTNS,u'scale-text'),
+ (CHARTNS,u'series-source'),
+ (CHARTNS,u'solid-type'),
+ (CHARTNS,u'spline-order'),
+ (CHARTNS,u'spline-resolution'),
+ (CHARTNS,u'stacked'),
+ (CHARTNS,u'symbol-height'),
+ (CHARTNS,u'symbol-type'),
+ (CHARTNS,u'symbol-width'),
+ (CHARTNS,u'text-overlap'),
+ (CHARTNS,u'three-dimensional'),
+ (CHARTNS,u'tick-marks-major-inner'),
+ (CHARTNS,u'tick-marks-major-outer'),
+ (CHARTNS,u'tick-marks-minor-inner'),
+ (CHARTNS,u'tick-marks-minor-outer'),
+ (CHARTNS,u'vertical'),
+ (CHARTNS,u'visible'),
+ (STYLENS,u'direction'),
+ (STYLENS,u'rotation-angle'),
+ (TEXTNS,u'line-break'),
+ ),
+ (STYLENS,u'column'):(
+ (FONS,u'end-indent'),
+ (FONS,u'space-before'),
+ (FONS,u'start-indent'),
+ (FONS,u'space-after'),
+ (STYLENS,u'rel-width'),
+ ),
+ (STYLENS,u'column-sep'):(
+ (STYLENS,u'color'),
+ (STYLENS,u'width'),
+ (STYLENS,u'style'),
+ (STYLENS,u'vertical-align'),
+ (STYLENS,u'height'),
+ ),
+ (STYLENS,u'columns'):(
+ (FONS,u'column-count'),
+ (FONS,u'column-gap'),
+ ),
+ (STYLENS,u'default-style'):(
+ (STYLENS,u'family'),
+ ),
+ (STYLENS,u'drawing-page-properties'): (
+ (DRAWNS,u'fill'),
+ (DRAWNS,u'fill-color'),
+ (DRAWNS,u'secondary-fill-color'),
+ (DRAWNS,u'fill-gradient-name'),
+ (DRAWNS,u'gradient-step-count'),
+ (DRAWNS,u'fill-hatch-name'),
+ (DRAWNS,u'fill-hatch-solid'),
+ (DRAWNS,u'fill-image-name'),
+ (STYLENS,u'repeat'),
+ (DRAWNS,u'fill-image-width'),
+ (DRAWNS,u'fill-image-height'),
+ (DRAWNS,u'fill-image-ref-point-x'),
+ (DRAWNS,u'fill-image-ref-point-y'),
+ (DRAWNS,u'fill-image-ref-point'),
+ (DRAWNS,u'tile-repeat-offset'),
+ (DRAWNS,u'opacity'),
+ (DRAWNS,u'opacity-name'),
+ (SVGNS,u'fill-rule'),
+ (PRESENTATIONNS,u'transition-type'),
+ (PRESENTATIONNS,u'transition-style'),
+ (PRESENTATIONNS,u'transition-speed'),
+ (SMILNS,u'type'),
+ (SMILNS,u'subtype'),
+ (SMILNS,u'direction'),
+ (SMILNS,u'fadeColor'),
+ (PRESENTATIONNS,u'duration'),
+ (PRESENTATIONNS,u'visibility'),
+ (DRAWNS,u'background-size'),
+ (PRESENTATIONNS,u'background-objects-visible'),
+ (PRESENTATIONNS,u'background-visible'),
+ (PRESENTATIONNS,u'display-header'),
+ (PRESENTATIONNS,u'display-footer'),
+ (PRESENTATIONNS,u'display-page-number'),
+ (PRESENTATIONNS,u'display-date-time'),
+ ),
+ (STYLENS,u'drop-cap'):(
+ (STYLENS,u'distance'),
+ (STYLENS,u'length'),
+ (STYLENS,u'style-name'),
+ (STYLENS,u'lines'),
+ ),
+ (STYLENS,u'font-face'):(
+ (STYLENS,u'font-adornments'),
+ (STYLENS,u'font-charset'),
+ (STYLENS,u'font-family-generic'),
+ (STYLENS,u'font-pitch'),
+ (STYLENS,u'name'),
+ (SVGNS,u'accent-height'),
+ (SVGNS,u'alphabetic'),
+ (SVGNS,u'ascent'),
+ (SVGNS,u'bbox'),
+ (SVGNS,u'cap-height'),
+ (SVGNS,u'descent'),
+ (SVGNS,u'font-family'),
+ (SVGNS,u'font-size'),
+ (SVGNS,u'font-stretch'),
+ (SVGNS,u'font-style'),
+ (SVGNS,u'font-variant'),
+ (SVGNS,u'font-weight'),
+ (SVGNS,u'hanging'),
+ (SVGNS,u'ideographic'),
+ (SVGNS,u'mathematical'),
+ (SVGNS,u'overline-position'),
+ (SVGNS,u'overline-thickness'),
+ (SVGNS,u'panose-1'),
+ (SVGNS,u'slope'),
+ (SVGNS,u'stemh'),
+ (SVGNS,u'stemv'),
+ (SVGNS,u'strikethrough-position'),
+ (SVGNS,u'strikethrough-thickness'),
+ (SVGNS,u'underline-position'),
+ (SVGNS,u'underline-thickness'),
+ (SVGNS,u'unicode-range'),
+ (SVGNS,u'units-per-em'),
+ (SVGNS,u'v-alphabetic'),
+ (SVGNS,u'v-hanging'),
+ (SVGNS,u'v-ideographic'),
+ (SVGNS,u'v-mathematical'),
+ (SVGNS,u'widths'),
+ (SVGNS,u'x-height'),
+ ),
+ (STYLENS,u'footer'):(
+ (STYLENS,u'display'),
+ (STYLENS,u'dynamic-spacing'),
+ ),
+ (STYLENS,u'footer-left'):(
+ (STYLENS,u'display'),
+ (STYLENS,u'dynamic-spacing'),
+ ),
+ (STYLENS,u'footer-style'):(
+ ),
+ (STYLENS,u'footnote-sep'):(
+ (STYLENS,u'distance-after-sep'),
+ (STYLENS,u'color'),
+ (STYLENS,u'rel-width'),
+ (STYLENS,u'width'),
+ (STYLENS,u'distance-before-sep'),
+ (STYLENS,u'line-style'),
+ (STYLENS,u'adjustment'),
+ ),
+# allowed_attributes
+ (STYLENS,u'graphic-properties'): (
+ (DR3DNS,u'ambient-color'),
+ (DR3DNS,u'back-scale'),
+ (DR3DNS,u'backface-culling'),
+ (DR3DNS,u'close-back'),
+ (DR3DNS,u'close-front'),
+ (DR3DNS,u'depth'),
+ (DR3DNS,u'diffuse-color'),
+ (DR3DNS,u'edge-rounding'),
+ (DR3DNS,u'edge-rounding-mode'),
+ (DR3DNS,u'emissive-color'),
+ (DR3DNS,u'end-angle'),
+ (DR3DNS,u'horizontal-segments'),
+ (DR3DNS,u'lighting-mode'),
+ (DR3DNS,u'normals-direction'),
+ (DR3DNS,u'normals-kind'),
+ (DR3DNS,u'shadow'),
+ (DR3DNS,u'shininess'),
+ (DR3DNS,u'specular-color'),
+ (DR3DNS,u'texture-filter'),
+ (DR3DNS,u'texture-generation-mode-x'),
+ (DR3DNS,u'texture-generation-mode-y'),
+ (DR3DNS,u'texture-kind'),
+ (DR3DNS,u'texture-mode'),
+ (DR3DNS,u'vertical-segments'),
+ (DRAWNS,u'auto-grow-height'),
+ (DRAWNS,u'auto-grow-width'),
+ (DRAWNS,u'blue'),
+ (DRAWNS,u'caption-angle'),
+ (DRAWNS,u'caption-angle-type'),
+ (DRAWNS,u'caption-escape'),
+ (DRAWNS,u'caption-escape-direction'),
+ (DRAWNS,u'caption-fit-line-length'),
+ (DRAWNS,u'caption-gap'),
+ (DRAWNS,u'caption-line-length'),
+ (DRAWNS,u'caption-type'),
+ (DRAWNS,u'color-inversion'),
+ (DRAWNS,u'color-mode'),
+ (DRAWNS,u'contrast'),
+ (DRAWNS,u'decimal-places'),
+ (DRAWNS,u'end-guide'),
+ (DRAWNS,u'end-line-spacing-horizontal'),
+ (DRAWNS,u'end-line-spacing-vertical'),
+ (DRAWNS,u'fill'),
+ (DRAWNS,u'fill-color'),
+ (DRAWNS,u'fill-gradient-name'),
+ (DRAWNS,u'fill-hatch-name'),
+ (DRAWNS,u'fill-hatch-solid'),
+ (DRAWNS,u'fill-image-height'),
+ (DRAWNS,u'fill-image-name'),
+ (DRAWNS,u'fill-image-ref-point'),
+ (DRAWNS,u'fill-image-ref-point-x'),
+ (DRAWNS,u'fill-image-ref-point-y'),
+ (DRAWNS,u'fill-image-width'),
+# allowed_attributes
+ (DRAWNS,u'fit-to-contour'),
+ (DRAWNS,u'fit-to-size'),
+ (DRAWNS,u'frame-display-border'),
+ (DRAWNS,u'frame-display-scrollbar'),
+ (DRAWNS,u'frame-margin-horizontal'),
+ (DRAWNS,u'frame-margin-vertical'),
+ (DRAWNS,u'gamma'),
+ (DRAWNS,u'gradient-step-count'),
+ (DRAWNS,u'green'),
+ (DRAWNS,u'guide-distance'),
+ (DRAWNS,u'guide-overhang'),
+ (DRAWNS,u'image-opacity'),
+ (DRAWNS,u'line-distance'),
+ (DRAWNS,u'luminance'),
+ (DRAWNS,u'marker-end'),
+ (DRAWNS,u'marker-end-center'),
+ (DRAWNS,u'marker-end-width'),
+ (DRAWNS,u'marker-start'),
+ (DRAWNS,u'marker-start-center'),
+ (DRAWNS,u'marker-start-width'),
+ (DRAWNS,u'measure-align'),
+ (DRAWNS,u'measure-vertical-align'),
+ (DRAWNS,u'ole-draw-aspect'),
+ (DRAWNS,u'opacity'),
+ (DRAWNS,u'opacity-name'),
+ (DRAWNS,u'parallel'),
+ (DRAWNS,u'placing'),
+ (DRAWNS,u'red'),
+ (DRAWNS,u'secondary-fill-color'),
+ (DRAWNS,u'shadow'),
+ (DRAWNS,u'shadow-color'),
+ (DRAWNS,u'shadow-offset-x'),
+ (DRAWNS,u'shadow-offset-y'),
+ (DRAWNS,u'shadow-opacity'),
+ (DRAWNS,u'show-unit'),
+ (DRAWNS,u'start-guide'),
+ (DRAWNS,u'start-line-spacing-horizontal'),
+ (DRAWNS,u'start-line-spacing-vertical'),
+ (DRAWNS,u'stroke'),
+ (DRAWNS,u'stroke-dash'),
+ (DRAWNS,u'stroke-dash-names'),
+ (DRAWNS,u'stroke-linejoin'),
+ (DRAWNS,u'symbol-color'),
+ (DRAWNS,u'textarea-horizontal-align'),
+ (DRAWNS,u'textarea-vertical-align'),
+ (DRAWNS,u'tile-repeat-offset'),
+ (DRAWNS,u'unit'),
+ (DRAWNS,u'visible-area-height'),
+ (DRAWNS,u'visible-area-left'),
+ (DRAWNS,u'visible-area-top'),
+ (DRAWNS,u'visible-area-width'),
+ (DRAWNS,u'wrap-influence-on-position'),
+# allowed_attributes
+ (FONS,u'background-color'),
+ (FONS,u'border'),
+ (FONS,u'border-bottom'),
+ (FONS,u'border-left'),
+ (FONS,u'border-right'),
+ (FONS,u'border-top'),
+ (FONS,u'clip'),
+ (FONS,u'margin'),
+ (FONS,u'margin-bottom'),
+ (FONS,u'margin-left'),
+ (FONS,u'margin-right'),
+ (FONS,u'margin-top'),
+ (FONS,u'max-height'),
+ (FONS,u'max-width'),
+ (FONS,u'min-height'),
+ (FONS,u'min-width'),
+ (FONS,u'padding'),
+ (FONS,u'padding-bottom'),
+ (FONS,u'padding-left'),
+ (FONS,u'padding-right'),
+ (FONS,u'padding-top'),
+ (FONS,u'wrap-option'),
+ (STYLENS,u'border-line-width'),
+ (STYLENS,u'border-line-width-bottom'),
+ (STYLENS,u'border-line-width-left'),
+ (STYLENS,u'border-line-width-right'),
+ (STYLENS,u'border-line-width-top'),
+ (STYLENS,u'editable'),
+ (STYLENS,u'flow-with-text'),
+ (STYLENS,u'horizontal-pos'),
+ (STYLENS,u'horizontal-rel'),
+ (STYLENS,u'mirror'),
+ (STYLENS,u'number-wrapped-paragraphs'),
+ (STYLENS,u'overflow-behavior'),
+ (STYLENS,u'print-content'),
+ (STYLENS,u'protect'),
+ (STYLENS,u'rel-height'),
+ (STYLENS,u'rel-width'),
+ (STYLENS,u'repeat'),
+ (STYLENS,u'run-through'),
+ (STYLENS,u'shadow'),
+ (STYLENS,u'vertical-pos'),
+ (STYLENS,u'vertical-rel'),
+ (STYLENS,u'wrap'),
+ (STYLENS,u'wrap-contour'),
+ (STYLENS,u'wrap-contour-mode'),
+ (STYLENS,u'wrap-dynamic-threshold'),
+ (SVGNS,u'fill-rule'),
+ (SVGNS,u'height'),
+ (SVGNS,u'stroke-color'),
+ (SVGNS,u'stroke-opacity'),
+ (SVGNS,u'stroke-width'),
+ (SVGNS,u'width'),
+ (SVGNS,u'x'),
+ (SVGNS,u'y'),
+ (TEXTNS,u'anchor-page-number'),
+ (TEXTNS,u'anchor-type'),
+ (TEXTNS,u'animation'),
+ (TEXTNS,u'animation-delay'),
+ (TEXTNS,u'animation-direction'),
+ (TEXTNS,u'animation-repeat'),
+ (TEXTNS,u'animation-start-inside'),
+ (TEXTNS,u'animation-steps'),
+ (TEXTNS,u'animation-stop-inside'),
+ ),
+ (STYLENS,u'handout-master'):(
+ (PRESENTATIONNS,u'presentation-page-layout-name'),
+ (STYLENS,u'page-layout-name'),
+ (PRESENTATIONNS,u'use-footer-name'),
+ (DRAWNS,u'style-name'),
+ (PRESENTATIONNS,u'use-header-name'),
+ (PRESENTATIONNS,u'use-date-time-name'),
+ ),
+ (STYLENS,u'header'):(
+ (STYLENS,u'display'),
+ (STYLENS,u'dynamic-spacing'),
+ ),
+ (STYLENS,u'header-footer-properties'): (
+ (FONS,u'background-color'),
+ (FONS,u'border'),
+ (FONS,u'border-bottom'),
+ (FONS,u'border-left'),
+ (FONS,u'border-right'),
+ (FONS,u'border-top'),
+ (FONS,u'margin'),
+ (FONS,u'margin-bottom'),
+ (FONS,u'margin-left'),
+ (FONS,u'margin-right'),
+ (FONS,u'margin-top'),
+ (FONS,u'min-height'),
+ (FONS,u'padding'),
+ (FONS,u'padding-bottom'),
+ (FONS,u'padding-left'),
+ (FONS,u'padding-right'),
+ (FONS,u'padding-top'),
+ (STYLENS,u'border-line-width'),
+ (STYLENS,u'border-line-width-bottom'),
+ (STYLENS,u'border-line-width-left'),
+ (STYLENS,u'border-line-width-right'),
+ (STYLENS,u'border-line-width-top'),
+ (STYLENS,u'dynamic-spacing'),
+ (STYLENS,u'shadow'),
+ (SVGNS,u'height'),
+ ),
+ (STYLENS,u'header-left'):(
+ (STYLENS,u'display'),
+ (STYLENS,u'dynamic-spacing'),
+ ),
+ (STYLENS,u'header-style'):(
+ ),
+# allowed_attributes
+ (STYLENS,u'list-level-properties'): (
+ (FONS,u'height'),
+ (FONS,u'text-align'),
+ (FONS,u'width'),
+ (STYLENS,u'font-name'),
+ (STYLENS,u'vertical-pos'),
+ (STYLENS,u'vertical-rel'),
+ (TEXTNS,u'min-label-distance'),
+ (TEXTNS,u'min-label-width'),
+ (TEXTNS,u'space-before'),
+ ),
+ (STYLENS,u'map'):(
+ (STYLENS,u'apply-style-name'),
+ (STYLENS,u'base-cell-address'),
+ (STYLENS,u'condition'),
+ ),
+ (STYLENS,u'master-page'):(
+ (STYLENS,u'page-layout-name'),
+ (STYLENS,u'display-name'),
+ (DRAWNS,u'style-name'),
+ (STYLENS,u'name'),
+ (STYLENS,u'next-style-name'),
+ ),
+ (STYLENS,u'page-layout'):(
+ (STYLENS,u'name'),
+ (STYLENS,u'page-usage'),
+ ),
+ (STYLENS,u'page-layout-properties'): (
+ (FONS,u'background-color'),
+ (FONS,u'border'),
+ (FONS,u'border-bottom'),
+ (FONS,u'border-left'),
+ (FONS,u'border-right'),
+ (FONS,u'border-top'),
+ (FONS,u'margin'),
+ (FONS,u'margin-bottom'),
+ (FONS,u'margin-left'),
+ (FONS,u'margin-right'),
+ (FONS,u'margin-top'),
+ (FONS,u'padding'),
+ (FONS,u'padding-bottom'),
+ (FONS,u'padding-left'),
+ (FONS,u'padding-right'),
+ (FONS,u'padding-top'),
+ (FONS,u'page-height'),
+ (FONS,u'page-width'),
+ (STYLENS,u'border-line-width'),
+ (STYLENS,u'border-line-width-bottom'),
+ (STYLENS,u'border-line-width-left'),
+ (STYLENS,u'border-line-width-right'),
+ (STYLENS,u'border-line-width-top'),
+ (STYLENS,u'first-page-number'),
+ (STYLENS,u'footnote-max-height'),
+ (STYLENS,u'layout-grid-base-height'),
+ (STYLENS,u'layout-grid-color'),
+ (STYLENS,u'layout-grid-display'),
+ (STYLENS,u'layout-grid-lines'),
+ (STYLENS,u'layout-grid-mode'),
+ (STYLENS,u'layout-grid-print'),
+ (STYLENS,u'layout-grid-ruby-below'),
+ (STYLENS,u'layout-grid-ruby-height'),
+ (STYLENS,u'name'),
+ (STYLENS,u'num-format'),
+ (STYLENS,u'num-letter-sync'),
+ (STYLENS,u'num-prefix'),
+ (STYLENS,u'num-suffix'),
+ (STYLENS,u'page-usage'),
+ (STYLENS,u'paper-tray-name'),
+ (STYLENS,u'print'),
+ (STYLENS,u'print-orientation'),
+ (STYLENS,u'print-page-order'),
+ (STYLENS,u'register-truth-ref-style-name'),
+ (STYLENS,u'scale-to'),
+ (STYLENS,u'scale-to-pages'),
+ (STYLENS,u'shadow'),
+ (STYLENS,u'table-centering'),
+ (STYLENS,u'writing-mode'),
+ ),
+ (STYLENS,u'paragraph-properties'): (
+ (FONS,u'background-color'),
+ (FONS,u'border'),
+ (FONS,u'border-bottom'),
+ (FONS,u'border-left'),
+ (FONS,u'border-right'),
+ (FONS,u'border-top'),
+ (FONS,u'break-after'),
+ (FONS,u'break-before'),
+ (FONS,u'hyphenation-keep'),
+ (FONS,u'hyphenation-ladder-count'),
+ (FONS,u'keep-together'),
+ (FONS,u'keep-with-next'),
+ (FONS,u'line-height'),
+ (FONS,u'margin'),
+ (FONS,u'margin-bottom'),
+ (FONS,u'margin-left'),
+ (FONS,u'margin-right'),
+ (FONS,u'margin-top'),
+ (FONS,u'orphans'),
+ (FONS,u'padding'),
+ (FONS,u'padding-bottom'),
+ (FONS,u'padding-left'),
+ (FONS,u'padding-right'),
+ (FONS,u'padding-top'),
+ (FONS,u'text-align'),
+ (FONS,u'text-align-last'),
+ (FONS,u'text-indent'),
+ (FONS,u'widows'),
+ (STYLENS,u'auto-text-indent'),
+ (STYLENS,u'background-transparency'),
+ (STYLENS,u'border-line-width'),
+ (STYLENS,u'border-line-width-bottom'),
+ (STYLENS,u'border-line-width-left'),
+ (STYLENS,u'border-line-width-right'),
+ (STYLENS,u'border-line-width-top'),
+ (STYLENS,u'font-independent-line-spacing'),
+ (STYLENS,u'justify-single-word'),
+ (STYLENS,u'line-break'),
+ (STYLENS,u'line-height-at-least'),
+ (STYLENS,u'line-spacing'),
+ (STYLENS,u'page-number'),
+ (STYLENS,u'punctuation-wrap'),
+ (STYLENS,u'register-true'),
+ (STYLENS,u'shadow'),
+ (STYLENS,u'snap-to-layout-grid'),
+ (STYLENS,u'tab-stop-distance'),
+ (STYLENS,u'text-autospace'),
+ (STYLENS,u'vertical-align'),
+ (STYLENS,u'writing-mode'),
+ (STYLENS,u'writing-mode-automatic'),
+ (TEXTNS,u'line-number'),
+ (TEXTNS,u'number-lines'),
+ ),
+ (STYLENS,u'presentation-page-layout'):(
+ (STYLENS,u'display-name'),
+ (STYLENS,u'name'),
+ ),
+# allowed_attributes
+ (STYLENS,u'region-center'):(
+ ),
+ (STYLENS,u'region-left'):(
+ ),
+ (STYLENS,u'region-right'):(
+ ),
+ (STYLENS,u'ruby-properties'): (
+ (STYLENS,u'ruby-position'),
+ (STYLENS,u'ruby-align'),
+ ),
+ (STYLENS,u'section-properties'): (
+ (FONS,u'background-color'),
+ (FONS,u'margin-left'),
+ (FONS,u'margin-right'),
+ (STYLENS,u'protect'),
+ (STYLENS,u'writing-mode'),
+ (TEXTNS,u'dont-balance-text-columns'),
+ ),
+ (STYLENS,u'style'):(
+ (STYLENS,u'family'),
+ (STYLENS,u'list-style-name'),
+ (STYLENS,u'name'),
+ (STYLENS,u'auto-update'),
+ (STYLENS,u'default-outline-level'),
+ (STYLENS,u'class'),
+ (STYLENS,u'next-style-name'),
+ (STYLENS,u'data-style-name'),
+ (STYLENS,u'master-page-name'),
+ (STYLENS,u'display-name'),
+ (STYLENS,u'parent-style-name'),
+ ),
+ (STYLENS,u'tab-stop'):(
+ (STYLENS,u'leader-text-style'),
+ (STYLENS,u'leader-width'),
+ (STYLENS,u'leader-style'),
+ (STYLENS,u'char'),
+ (STYLENS,u'leader-color'),
+ (STYLENS,u'position'),
+ (STYLENS,u'leader-text'),
+ (STYLENS,u'type'),
+ (STYLENS,u'leader-type'),
+ ),
+ (STYLENS,u'tab-stops'):(
+ ),
+ (STYLENS,u'table-cell-properties'): (
+ (FONS,u'background-color'),
+ (FONS,u'border'),
+ (FONS,u'border-bottom'),
+ (FONS,u'border-left'),
+ (FONS,u'border-right'),
+ (FONS,u'border-top'),
+ (FONS,u'padding'),
+ (FONS,u'padding-bottom'),
+ (FONS,u'padding-left'),
+ (FONS,u'padding-right'),
+ (FONS,u'padding-top'),
+ (FONS,u'wrap-option'),
+ (STYLENS,u'border-line-width'),
+ (STYLENS,u'border-line-width-bottom'),
+ (STYLENS,u'border-line-width-left'),
+ (STYLENS,u'border-line-width-right'),
+ (STYLENS,u'border-line-width-top'),
+ (STYLENS,u'cell-protect'),
+ (STYLENS,u'decimal-places'),
+ (STYLENS,u'diagonal-bl-tr'),
+ (STYLENS,u'diagonal-bl-tr-widths'),
+ (STYLENS,u'diagonal-tl-br'),
+ (STYLENS,u'diagonal-tl-br-widths'),
+ (STYLENS,u'direction'),
+ (STYLENS,u'glyph-orientation-vertical'),
+ (STYLENS,u'print-content'),
+ (STYLENS,u'repeat-content'),
+ (STYLENS,u'rotation-align'),
+ (STYLENS,u'rotation-angle'),
+ (STYLENS,u'shadow'),
+ (STYLENS,u'shrink-to-fit'),
+ (STYLENS,u'text-align-source'),
+ (STYLENS,u'vertical-align'),
+ ),
+ (STYLENS,u'table-column-properties'): (
+ (FONS,u'break-after'),
+ (FONS,u'break-before'),
+ (STYLENS,u'column-width'),
+ (STYLENS,u'rel-column-width'),
+ (STYLENS,u'use-optimal-column-width'),
+ ),
+ (STYLENS,u'table-properties'): (
+ (FONS,u'background-color'),
+ (FONS,u'break-after'),
+ (FONS,u'break-before'),
+ (FONS,u'keep-with-next'),
+ (FONS,u'margin'),
+ (FONS,u'margin-bottom'),
+ (FONS,u'margin-left'),
+ (FONS,u'margin-right'),
+ (FONS,u'margin-top'),
+ (STYLENS,u'may-break-between-rows'),
+ (STYLENS,u'page-number'),
+ (STYLENS,u'rel-width'),
+ (STYLENS,u'shadow'),
+ (STYLENS,u'width'),
+ (STYLENS,u'writing-mode'),
+ (TABLENS,u'align'),
+ (TABLENS,u'border-model'),
+ (TABLENS,u'display'),
+ ),
+ (STYLENS,u'table-row-properties'): (
+ (FONS,u'background-color'),
+ (FONS,u'break-after'),
+ (FONS,u'break-before'),
+ (FONS,u'keep-together'),
+ (STYLENS,u'min-row-height'),
+ (STYLENS,u'row-height'),
+ (STYLENS,u'use-optimal-row-height'),
+ ),
+# allowed_attributes
+ (STYLENS,u'text-properties'): (
+ (FONS,u'background-color'),
+ (FONS,u'color'),
+ (FONS,u'country'),
+ (FONS,u'font-family'),
+ (FONS,u'font-size'),
+ (FONS,u'font-style'),
+ (FONS,u'font-variant'),
+ (FONS,u'font-weight'),
+ (FONS,u'hyphenate'),
+ (FONS,u'hyphenation-push-char-count'),
+ (FONS,u'hyphenation-remain-char-count'),
+ (FONS,u'language'),
+ (FONS,u'letter-spacing'),
+ (FONS,u'text-shadow'),
+ (FONS,u'text-transform'),
+ (STYLENS,u'country-asian'),
+ (STYLENS,u'country-complex'),
+ (STYLENS,u'font-charset'),
+ (STYLENS,u'font-family-asian'),
+ (STYLENS,u'font-family-complex'),
+ (STYLENS,u'font-family-generic'),
+ (STYLENS,u'font-family-generic-asian'),
+ (STYLENS,u'font-family-generic-complex'),
+ (STYLENS,u'font-name'),
+ (STYLENS,u'font-name-asian'),
+ (STYLENS,u'font-name-complex'),
+ (STYLENS,u'font-pitch'),
+ (STYLENS,u'font-pitch-asian'),
+ (STYLENS,u'font-pitch-complex'),
+ (STYLENS,u'font-relief'),
+ (STYLENS,u'font-size-asian'),
+ (STYLENS,u'font-size-complex'),
+ (STYLENS,u'font-size-rel'),
+ (STYLENS,u'font-size-rel-asian'),
+ (STYLENS,u'font-size-rel-complex'),
+ (STYLENS,u'font-style-asian'),
+ (STYLENS,u'font-style-complex'),
+ (STYLENS,u'font-style-name'),
+ (STYLENS,u'font-style-name-asian'),
+ (STYLENS,u'font-style-name-complex'),
+ (STYLENS,u'font-weight-asian'),
+ (STYLENS,u'font-weight-complex'),
+ (STYLENS,u'language-asian'),
+ (STYLENS,u'language-complex'),
+ (STYLENS,u'letter-kerning'),
+ (STYLENS,u'script-type'),
+ (STYLENS,u'text-blinking'),
+ (STYLENS,u'text-combine'),
+ (STYLENS,u'text-combine-end-char'),
+ (STYLENS,u'text-combine-start-char'),
+ (STYLENS,u'text-emphasize'),
+ (STYLENS,u'text-line-through-color'),
+ (STYLENS,u'text-line-through-mode'),
+ (STYLENS,u'text-line-through-style'),
+ (STYLENS,u'text-line-through-text'),
+ (STYLENS,u'text-line-through-text-style'),
+ (STYLENS,u'text-line-through-type'),
+ (STYLENS,u'text-line-through-width'),
+ (STYLENS,u'text-outline'),
+ (STYLENS,u'text-position'),
+ (STYLENS,u'text-rotation-angle'),
+ (STYLENS,u'text-rotation-scale'),
+ (STYLENS,u'text-scale'),
+ (STYLENS,u'text-underline-color'),
+ (STYLENS,u'text-underline-mode'),
+ (STYLENS,u'text-underline-style'),
+ (STYLENS,u'text-underline-type'),
+ (STYLENS,u'text-underline-width'),
+ (STYLENS,u'use-window-font-color'),
+ (TEXTNS,u'condition'),
+ (TEXTNS,u'display'),
+ ),
+ (SVGNS,u'definition-src'):(
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ ),
+ (SVGNS,u'desc'):(
+ ),
+ (SVGNS,u'font-face-format'):(
+ (SVGNS,u'string'),
+ ),
+ (SVGNS,u'font-face-name'):(
+ (SVGNS,u'name'),
+ ),
+ (SVGNS,u'font-face-src'):(
+ ),
+ (SVGNS,u'font-face-uri'):(
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ ),
+ (SVGNS,u'linearGradient'):(
+ (SVGNS,u'y2'),
+ (DRAWNS,u'name'),
+ (SVGNS,u'spreadMethod'),
+ (SVGNS,u'gradientUnits'),
+ (SVGNS,u'x2'),
+ (SVGNS,u'gradientTransform'),
+ (SVGNS,u'y1'),
+ (DRAWNS,u'display-name'),
+ (SVGNS,u'x1'),
+ ),
+ (SVGNS,u'radialGradient'):(
+ (DRAWNS,u'name'),
+ (SVGNS,u'fx'),
+ (SVGNS,u'fy'),
+ (SVGNS,u'spreadMethod'),
+ (SVGNS,u'gradientUnits'),
+ (SVGNS,u'cy'),
+ (SVGNS,u'cx'),
+ (SVGNS,u'gradientTransform'),
+ (DRAWNS,u'display-name'),
+ (SVGNS,u'r'),
+ ),
+ (SVGNS,u'stop'):(
+ (SVGNS,u'stop-color'),
+ (SVGNS,u'stop-opacity'),
+ (SVGNS,u'offset'),
+ ),
+ (TABLENS,u'body'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'calculation-settings'):(
+ (TABLENS,u'automatic-find-labels'),
+ (TABLENS,u'case-sensitive'),
+ (TABLENS,u'search-criteria-must-apply-to-whole-cell'),
+ (TABLENS,u'precision-as-shown'),
+ (TABLENS,u'use-regular-expressions'),
+ (TABLENS,u'null-year'),
+ ),
+ (TABLENS,u'cell-address'):(
+ (TABLENS,u'column'),
+ (TABLENS,u'table'),
+ (TABLENS,u'row'),
+ ),
+ (TABLENS,u'cell-content-change'):(
+ (TABLENS,u'id'),
+ (TABLENS,u'rejecting-change-id'),
+ (TABLENS,u'acceptance-state'),
+ ),
+ (TABLENS,u'cell-content-deletion'):(
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'cell-range-source'):(
+ (TABLENS,u'last-row-spanned'),
+ (TABLENS,u'last-column-spanned'),
+ (TABLENS,u'name'),
+ (TABLENS,u'filter-options'),
+ (XLINKNS,u'actuate'),
+ (TABLENS,u'filter-name'),
+ (XLINKNS,u'href'),
+ (TABLENS,u'refresh-delay'),
+ (XLINKNS,u'type'),
+ ),
+ (TABLENS,u'change-deletion'):(
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'change-track-table-cell'):(
+ (OFFICENS,u'string-value'),
+ (TABLENS,u'cell-address'),
+ (TABLENS,u'number-matrix-columns-spanned'),
+ (TABLENS,u'number-matrix-rows-spanned'),
+ (TABLENS,u'matrix-covered'),
+ (OFFICENS,u'value-type'),
+ (OFFICENS,u'boolean-value'),
+ (OFFICENS,u'currency'),
+ (OFFICENS,u'date-value'),
+ (OFFICENS,u'value'),
+ (TABLENS,u'formula'),
+ (OFFICENS,u'time-value'),
+ ),
+ (TABLENS,u'consolidation'):(
+ (TABLENS,u'function'),
+ (TABLENS,u'source-cell-range-addresses'),
+ (TABLENS,u'target-cell-address'),
+ (TABLENS,u'link-to-source-data'),
+ (TABLENS,u'use-labels'),
+ ),
+ (TABLENS,u'content-validation'):(
+ (TABLENS,u'base-cell-address'),
+ (TABLENS,u'display-list'),
+ (TABLENS,u'allow-empty-cell'),
+ (TABLENS,u'name'),
+ (TABLENS,u'condition'),
+ ),
+ (TABLENS,u'content-validations'):(
+ ),
+ (TABLENS,u'covered-table-cell'):(
+ (TABLENS,u'protect'),
+ (OFFICENS,u'string-value'),
+ (OFFICENS,u'value'),
+ (OFFICENS,u'boolean-value'),
+ (OFFICENS,u'currency'),
+ (OFFICENS,u'date-value'),
+ (TABLENS,u'style-name'),
+ (TABLENS,u'content-validation-name'),
+ (OFFICENS,u'value-type'),
+ (TABLENS,u'number-columns-repeated'),
+ (TABLENS,u'formula'),
+ (OFFICENS,u'time-value'),
+ ),
+ (TABLENS,u'cut-offs'):(
+ ),
+ (TABLENS,u'data-pilot-display-info'):(
+ (TABLENS,u'member-count'),
+ (TABLENS,u'data-field'),
+ (TABLENS,u'enabled'),
+ (TABLENS,u'display-member-mode'),
+ ),
+ (TABLENS,u'data-pilot-field'):(
+ (TABLENS,u'selected-page'),
+ (TABLENS,u'function'),
+ (TABLENS,u'orientation'),
+ (TABLENS,u'used-hierarchy'),
+ (TABLENS,u'is-data-layout-field'),
+ (TABLENS,u'source-field-name'),
+ ),
+ (TABLENS,u'data-pilot-field-reference'):(
+ (TABLENS,u'member-name'),
+ (TABLENS,u'field-name'),
+ (TABLENS,u'member-type'),
+ (TABLENS,u'type'),
+ ),
+# allowed_attributes
+ (TABLENS,u'data-pilot-group'):(
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'data-pilot-group-member'):(
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'data-pilot-groups'):(
+ (TABLENS,u'date-end'),
+ (TABLENS,u'end'),
+ (TABLENS,u'start'),
+ (TABLENS,u'source-field-name'),
+ (TABLENS,u'step'),
+ (TABLENS,u'date-start'),
+ (TABLENS,u'grouped-by'),
+ ),
+ (TABLENS,u'data-pilot-layout-info'):(
+ (TABLENS,u'add-empty-lines'),
+ (TABLENS,u'layout-mode'),
+ ),
+ (TABLENS,u'data-pilot-level'):(
+ (TABLENS,u'show-empty'),
+ ),
+ (TABLENS,u'data-pilot-member'):(
+ (TABLENS,u'show-details'),
+ (TABLENS,u'name'),
+ (TABLENS,u'display'),
+ ),
+ (TABLENS,u'data-pilot-members'):(
+ ),
+ (TABLENS,u'data-pilot-sort-info'):(
+ (TABLENS,u'data-field'),
+ (TABLENS,u'sort-mode'),
+ (TABLENS,u'order'),
+ ),
+ (TABLENS,u'data-pilot-subtotal'):(
+ (TABLENS,u'function'),
+ ),
+ (TABLENS,u'data-pilot-subtotals'):(
+ ),
+ (TABLENS,u'data-pilot-table'):(
+ (TABLENS,u'buttons'),
+ (TABLENS,u'application-data'),
+ (TABLENS,u'name'),
+ (TABLENS,u'drill-down-on-double-click'),
+ (TABLENS,u'target-range-address'),
+ (TABLENS,u'ignore-empty-rows'),
+ (TABLENS,u'identify-categories'),
+ (TABLENS,u'show-filter-button'),
+ (TABLENS,u'grand-total'),
+ ),
+ (TABLENS,u'data-pilot-tables'):(
+ ),
+ (TABLENS,u'database-range'):(
+ (TABLENS,u'orientation'),
+ (TABLENS,u'target-range-address'),
+ (TABLENS,u'contains-header'),
+ (TABLENS,u'on-update-keep-size'),
+ (TABLENS,u'name'),
+ (TABLENS,u'is-selection'),
+ (TABLENS,u'refresh-delay'),
+ (TABLENS,u'display-filter-buttons'),
+ (TABLENS,u'has-persistent-data'),
+ (TABLENS,u'on-update-keep-styles'),
+ ),
+ (TABLENS,u'database-ranges'):(
+ ),
+ (TABLENS,u'database-source-query'):(
+ (TABLENS,u'query-name'),
+ (TABLENS,u'database-name'),
+ ),
+ (TABLENS,u'database-source-sql'):(
+ (TABLENS,u'parse-sql-statement'),
+ (TABLENS,u'database-name'),
+ (TABLENS,u'sql-statement'),
+ ),
+ (TABLENS,u'database-source-table'):(
+ (TABLENS,u'database-table-name'),
+ (TABLENS,u'database-name'),
+ ),
+ (TABLENS,u'dde-link'):(
+ ),
+ (TABLENS,u'dde-links'):(
+ ),
+ (TABLENS,u'deletion'):(
+ (TABLENS,u'rejecting-change-id'),
+ (TABLENS,u'multi-deletion-spanned'),
+ (TABLENS,u'acceptance-state'),
+ (TABLENS,u'table'),
+ (TABLENS,u'position'),
+ (TABLENS,u'type'),
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'deletions'):(
+ ),
+ (TABLENS,u'dependencies'):(
+ ),
+ (TABLENS,u'dependency'):(
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'detective'):(
+ ),
+ (TABLENS,u'error-macro'):(
+ (TABLENS,u'execute'),
+ ),
+ (TABLENS,u'error-message'):(
+ (TABLENS,u'display'),
+ (TABLENS,u'message-type'),
+ (TABLENS,u'title'),
+ ),
+ (TABLENS,u'even-columns'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'even-rows'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'filter'):(
+ (TABLENS,u'target-range-address'),
+ (TABLENS,u'display-duplicates'),
+ (TABLENS,u'condition-source-range-address'),
+ (TABLENS,u'condition-source'),
+ ),
+ (TABLENS,u'filter-and'):(
+ ),
+ (TABLENS,u'filter-condition'):(
+ (TABLENS,u'operator'),
+ (TABLENS,u'field-number'),
+ (TABLENS,u'data-type'),
+ (TABLENS,u'case-sensitive'),
+ (TABLENS,u'value'),
+ ),
+ (TABLENS,u'filter-or'):(
+ ),
+ (TABLENS,u'first-column'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'first-row'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'help-message'):(
+ (TABLENS,u'display'),
+ (TABLENS,u'title'),
+ ),
+ (TABLENS,u'highlighted-range'):(
+ (TABLENS,u'contains-error'),
+ (TABLENS,u'direction'),
+ (TABLENS,u'marked-invalid'),
+ (TABLENS,u'cell-range-address'),
+ ),
+ (TABLENS,u'insertion'):(
+ (TABLENS,u'count'),
+ (TABLENS,u'rejecting-change-id'),
+ (TABLENS,u'acceptance-state'),
+ (TABLENS,u'table'),
+ (TABLENS,u'position'),
+ (TABLENS,u'type'),
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'insertion-cut-off'):(
+ (TABLENS,u'position'),
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'iteration'):(
+ (TABLENS,u'status'),
+ (TABLENS,u'maximum-difference'),
+ (TABLENS,u'steps'),
+ ),
+# allowed_attributes
+ (TABLENS,u'label-range'):(
+ (TABLENS,u'label-cell-range-address'),
+ (TABLENS,u'data-cell-range-address'),
+ (TABLENS,u'orientation'),
+ ),
+ (TABLENS,u'label-ranges'):(
+ ),
+ (TABLENS,u'last-column'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'last-row'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'movement'):(
+ (TABLENS,u'id'),
+ (TABLENS,u'rejecting-change-id'),
+ (TABLENS,u'acceptance-state'),
+ ),
+ (TABLENS,u'movement-cut-off'):(
+ (TABLENS,u'position'),
+ (TABLENS,u'end-position'),
+ (TABLENS,u'start-position'),
+ ),
+ (TABLENS,u'named-expression'):(
+ (TABLENS,u'base-cell-address'),
+ (TABLENS,u'expression'),
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'named-expressions'):(
+ ),
+ (TABLENS,u'named-range'):(
+ (TABLENS,u'range-usable-as'),
+ (TABLENS,u'base-cell-address'),
+ (TABLENS,u'name'),
+ (TABLENS,u'cell-range-address'),
+ ),
+ (TABLENS,u'null-date'):(
+ (TABLENS,u'date-value-type'),
+ (TABLENS,u'value-type'),
+ ),
+ (TABLENS,u'odd-columns'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'odd-rows'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TABLENS,u'operation'):(
+ (TABLENS,u'index'),
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'previous'):(
+ (TABLENS,u'id'),
+ ),
+ (TABLENS,u'scenario'):(
+ (TABLENS,u'comment'),
+ (TABLENS,u'border-color'),
+ (TABLENS,u'copy-back'),
+ (TABLENS,u'is-active'),
+ (TABLENS,u'protected'),
+ (TABLENS,u'copy-formulas'),
+ (TABLENS,u'copy-styles'),
+ (TABLENS,u'scenario-ranges'),
+ (TABLENS,u'display-border'),
+ ),
+ (TABLENS,u'shapes'):(
+ ),
+ (TABLENS,u'sort'):(
+ (TABLENS,u'case-sensitive'),
+ (TABLENS,u'algorithm'),
+ (TABLENS,u'target-range-address'),
+ (TABLENS,u'country'),
+ (TABLENS,u'language'),
+ (TABLENS,u'bind-styles-to-content'),
+ ),
+ (TABLENS,u'sort-by'):(
+ (TABLENS,u'field-number'),
+ (TABLENS,u'data-type'),
+ (TABLENS,u'order'),
+ ),
+ (TABLENS,u'sort-groups'):(
+ (TABLENS,u'data-type'),
+ (TABLENS,u'order'),
+ ),
+ (TABLENS,u'source-cell-range'):(
+ (TABLENS,u'cell-range-address'),
+ ),
+ (TABLENS,u'source-range-address'):(
+ (TABLENS,u'column'),
+ (TABLENS,u'end-column'),
+ (TABLENS,u'start-table'),
+ (TABLENS,u'end-row'),
+ (TABLENS,u'table'),
+ (TABLENS,u'start-row'),
+ (TABLENS,u'row'),
+ (TABLENS,u'end-table'),
+ (TABLENS,u'start-column'),
+ ),
+ (TABLENS,u'source-service'):(
+ (TABLENS,u'user-name'),
+ (TABLENS,u'source-name'),
+ (TABLENS,u'password'),
+ (TABLENS,u'object-name'),
+ (TABLENS,u'name'),
+ ),
+ (TABLENS,u'subtotal-field'):(
+ (TABLENS,u'function'),
+ (TABLENS,u'field-number'),
+ ),
+ (TABLENS,u'subtotal-rule'):(
+ (TABLENS,u'group-by-field-number'),
+ ),
+ (TABLENS,u'subtotal-rules'):(
+ (TABLENS,u'bind-styles-to-content'),
+ (TABLENS,u'page-breaks-on-group-change'),
+ (TABLENS,u'case-sensitive'),
+ ),
+ (TABLENS,u'table'):(
+ (TABLENS,u'name'),
+ (TABLENS,u'is-sub-table'),
+ (TABLENS,u'style-name'),
+ (TABLENS,u'protected'),
+ (TABLENS,u'print-ranges'),
+ (TABLENS,u'print'),
+ (TABLENS,u'protection-key'),
+ ),
+ (TABLENS,u'table-cell'):(
+ (TABLENS,u'protect'),
+ (TABLENS,u'number-matrix-rows-spanned'),
+ (TABLENS,u'number-matrix-columns-spanned'),
+ (OFFICENS,u'string-value'),
+ (TABLENS,u'number-columns-spanned'),
+ (OFFICENS,u'value'),
+ (OFFICENS,u'boolean-value'),
+ (OFFICENS,u'currency'),
+ (OFFICENS,u'date-value'),
+ (TABLENS,u'style-name'),
+ (TABLENS,u'content-validation-name'),
+ (OFFICENS,u'value-type'),
+ (TABLENS,u'number-rows-spanned'),
+ (TABLENS,u'number-columns-repeated'),
+ (TABLENS,u'formula'),
+ (OFFICENS,u'time-value'),
+ ),
+ (TABLENS,u'table-column'):(
+ (TABLENS,u'style-name'),
+ (TABLENS,u'default-cell-style-name'),
+ (TABLENS,u'visibility'),
+ (TABLENS,u'number-columns-repeated'),
+ ),
+ (TABLENS,u'table-column-group'):(
+ (TABLENS,u'display'),
+ ),
+ (TABLENS,u'table-columns'):(
+ ),
+ (TABLENS,u'table-header-columns'):(
+ ),
+ (TABLENS,u'table-header-rows'):(
+ ),
+ (TABLENS,u'table-row'):(
+ (TABLENS,u'number-rows-repeated'),
+ (TABLENS,u'style-name'),
+ (TABLENS,u'visibility'),
+ (TABLENS,u'default-cell-style-name'),
+ ),
+ (TABLENS,u'table-row-group'):(
+ (TABLENS,u'display'),
+ ),
+ (TABLENS,u'table-rows'):(
+ ),
+ (TABLENS,u'table-source'):(
+ (TABLENS,u'filter-options'),
+ (XLINKNS,u'actuate'),
+ (TABLENS,u'filter-name'),
+ (XLINKNS,u'href'),
+ (TABLENS,u'mode'),
+ (TABLENS,u'table-name'),
+ (XLINKNS,u'type'),
+ (TABLENS,u'refresh-delay'),
+ ),
+ (TABLENS,u'table-template'):(
+ (TEXTNS,u'last-row-end-column'),
+ (TEXTNS,u'first-row-end-column'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'last-row-start-column'),
+ (TEXTNS,u'first-row-start-column'),
+ ),
+ (TABLENS,u'target-range-address'):(
+ (TABLENS,u'column'),
+ (TABLENS,u'end-column'),
+ (TABLENS,u'start-table'),
+ (TABLENS,u'end-row'),
+ (TABLENS,u'table'),
+ (TABLENS,u'start-row'),
+ (TABLENS,u'row'),
+ (TABLENS,u'end-table'),
+ (TABLENS,u'start-column'),
+ ),
+ (TABLENS,u'tracked-changes'):(
+ (TABLENS,u'track-changes'),
+ ),
+# allowed_attributes
+ (TEXTNS,u'a'):(
+ (TEXTNS,u'visited-style-name'),
+ (OFFICENS,u'name'),
+ (XLINKNS,u'show'),
+ (OFFICENS,u'target-frame-name'),
+ (XLINKNS,u'actuate'),
+ (TEXTNS,u'style-name'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ ),
+ (TEXTNS,u'alphabetical-index'):(
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ ),
+ (TEXTNS,u'alphabetical-index-auto-mark-file'):(
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ ),
+ (TEXTNS,u'alphabetical-index-entry-template'):(
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'alphabetical-index-mark'):(
+ (TEXTNS,u'main-entry'),
+ (TEXTNS,u'key1-phonetic'),
+ (TEXTNS,u'key2'),
+ (TEXTNS,u'key1'),
+ (TEXTNS,u'string-value'),
+ (TEXTNS,u'key2-phonetic'),
+ (TEXTNS,u'string-value-phonetic'),
+ ),
+ (TEXTNS,u'alphabetical-index-mark-end'):(
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'alphabetical-index-mark-start'):(
+ (TEXTNS,u'main-entry'),
+ (TEXTNS,u'key1-phonetic'),
+ (TEXTNS,u'key2'),
+ (TEXTNS,u'key1'),
+ (TEXTNS,u'string-value-phonetic'),
+ (TEXTNS,u'key2-phonetic'),
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'alphabetical-index-source'):(
+ (TEXTNS,u'capitalize-entries'),
+ (FONS,u'language'),
+ (TEXTNS,u'relative-tab-stop-position'),
+ (TEXTNS,u'alphabetical-separators'),
+ (TEXTNS,u'combine-entries-with-pp'),
+ (TEXTNS,u'combine-entries-with-dash'),
+ (TEXTNS,u'sort-algorithm'),
+ (TEXTNS,u'ignore-case'),
+ (TEXTNS,u'combine-entries'),
+ (TEXTNS,u'comma-separated'),
+ (FONS,u'country'),
+ (TEXTNS,u'index-scope'),
+ (TEXTNS,u'main-entry-style-name'),
+ (TEXTNS,u'use-keys-as-entries'),
+ ),
+# allowed_attributes
+ (TEXTNS,u'author-initials'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'author-name'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'bibliography'):(
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ ),
+ (TEXTNS,u'bibliography-configuration'):(
+ (TEXTNS,u'suffix'),
+ (FONS,u'language'),
+ (TEXTNS,u'numbered-entries'),
+ (FONS,u'country'),
+ (TEXTNS,u'sort-by-position'),
+ (TEXTNS,u'sort-algorithm'),
+ (TEXTNS,u'prefix'),
+ ),
+ (TEXTNS,u'bibliography-entry-template'):(
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'bibliography-type'),
+ ),
+ (TEXTNS,u'bibliography-mark'):(
+ (TEXTNS,u'address'),
+ (TEXTNS,u'annote'),
+ (TEXTNS,u'author'),
+ (TEXTNS,u'bibliography-type'),
+ (TEXTNS,u'booktitle'),
+ (TEXTNS,u'chapter'),
+ (TEXTNS,u'custom1'),
+ (TEXTNS,u'custom2'),
+ (TEXTNS,u'custom3'),
+ (TEXTNS,u'custom4'),
+ (TEXTNS,u'custom5'),
+ (TEXTNS,u'edition'),
+ (TEXTNS,u'editor'),
+ (TEXTNS,u'howpublished'),
+ (TEXTNS,u'identifier'),
+ (TEXTNS,u'institution'),
+ (TEXTNS,u'isbn'),
+ (TEXTNS,u'issn'),
+ (TEXTNS,u'journal'),
+ (TEXTNS,u'month'),
+ (TEXTNS,u'note'),
+ (TEXTNS,u'number'),
+ (TEXTNS,u'organizations'),
+ (TEXTNS,u'pages'),
+ (TEXTNS,u'publisher'),
+ (TEXTNS,u'report-type'),
+ (TEXTNS,u'school'),
+ (TEXTNS,u'series'),
+ (TEXTNS,u'title'),
+ (TEXTNS,u'url'),
+ (TEXTNS,u'volume'),
+ (TEXTNS,u'year'),
+ ),
+ (TEXTNS,u'bibliography-source'):(
+ ),
+ (TEXTNS,u'bookmark'):(
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'bookmark-end'):(
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'bookmark-ref'):(
+ (TEXTNS,u'ref-name'),
+ (TEXTNS,u'reference-format'),
+ ),
+ (TEXTNS,u'bookmark-start'):(
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'change'):(
+ (TEXTNS,u'change-id'),
+ ),
+ (TEXTNS,u'change-end'):(
+ (TEXTNS,u'change-id'),
+ ),
+ (TEXTNS,u'change-start'):(
+ (TEXTNS,u'change-id'),
+ ),
+ (TEXTNS,u'changed-region'):(
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'chapter'):(
+ (TEXTNS,u'display'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'conditional-text'):(
+ (TEXTNS,u'string-value-if-true'),
+ (TEXTNS,u'current-value'),
+ (TEXTNS,u'string-value-if-false'),
+ (TEXTNS,u'condition'),
+ ),
+ (TEXTNS,u'creation-date'):(
+ (TEXTNS,u'date-value'),
+ (TEXTNS,u'fixed'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'creation-time'):(
+ (TEXTNS,u'fixed'),
+ (TEXTNS,u'time-value'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'creator'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'database-display'):(
+ (TEXTNS,u'column-name'),
+ (TEXTNS,u'table-name'),
+ (TEXTNS,u'table-type'),
+ (TEXTNS,u'database-name'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'database-name'):(
+ (TEXTNS,u'table-name'),
+ (TEXTNS,u'table-type'),
+ (TEXTNS,u'database-name'),
+ ),
+ (TEXTNS,u'database-next'):(
+ (TEXTNS,u'table-name'),
+ (TEXTNS,u'table-type'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'condition'),
+ ),
+ (TEXTNS,u'database-row-number'):(
+ (STYLENS,u'num-format'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'value'),
+ (STYLENS,u'num-letter-sync'),
+ (TEXTNS,u'table-name'),
+ (TEXTNS,u'table-type'),
+ ),
+ (TEXTNS,u'database-row-select'):(
+ (TEXTNS,u'row-number'),
+ (TEXTNS,u'table-name'),
+ (TEXTNS,u'table-type'),
+ (TEXTNS,u'database-name'),
+ (TEXTNS,u'condition'),
+ ),
+# allowed_attributes
+ (TEXTNS,u'date'):(
+ (TEXTNS,u'date-value'),
+ (TEXTNS,u'fixed'),
+ (TEXTNS,u'date-adjust'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'dde-connection'):(
+ (TEXTNS,u'connection-name'),
+ ),
+ (TEXTNS,u'dde-connection-decl'):(
+ (OFFICENS,u'automatic-update'),
+ (OFFICENS,u'dde-topic'),
+ (OFFICENS,u'dde-application'),
+ (OFFICENS,u'name'),
+ (OFFICENS,u'dde-item'),
+ ),
+ (TEXTNS,u'dde-connection-decls'):(
+ ),
+ (TEXTNS,u'deletion'):(
+ ),
+ (TEXTNS,u'description'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'editing-cycles'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'editing-duration'):(
+ (TEXTNS,u'duration'),
+ (TEXTNS,u'fixed'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'execute-macro'):(
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'expression'):(
+ (TEXTNS,u'display'),
+ (OFFICENS,u'string-value'),
+ (OFFICENS,u'value'),
+ (OFFICENS,u'boolean-value'),
+ (OFFICENS,u'currency'),
+ (OFFICENS,u'date-value'),
+ (STYLENS,u'data-style-name'),
+ (OFFICENS,u'value-type'),
+ (TEXTNS,u'formula'),
+ (OFFICENS,u'time-value'),
+ ),
+ (TEXTNS,u'file-name'):(
+ (TEXTNS,u'fixed'),
+ (TEXTNS,u'display'),
+ ),
+ (TEXTNS,u'format-change'):(
+ ),
+ (TEXTNS,u'h'):(
+ (TEXTNS,u'restart-numbering'),
+ (TEXTNS,u'cond-style-name'),
+ (TEXTNS,u'is-list-header'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'class-names'),
+ (TEXTNS,u'start-value'),
+ (TEXTNS,u'id'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'hidden-paragraph'):(
+ (TEXTNS,u'is-hidden'),
+ (TEXTNS,u'condition'),
+ ),
+ (TEXTNS,u'hidden-text'):(
+ (TEXTNS,u'string-value'),
+ (TEXTNS,u'is-hidden'),
+ (TEXTNS,u'condition'),
+ ),
+ (TEXTNS,u'illustration-index'):(
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ ),
+ (TEXTNS,u'illustration-index-entry-template'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'illustration-index-source'):(
+ (TEXTNS,u'index-scope'),
+ (TEXTNS,u'caption-sequence-name'),
+ (TEXTNS,u'use-caption'),
+ (TEXTNS,u'caption-sequence-format'),
+ (TEXTNS,u'relative-tab-stop-position'),
+ ),
+ (TEXTNS,u'index-body'):(
+ ),
+ (TEXTNS,u'index-entry-bibliography'):(
+ (TEXTNS,u'bibliography-data-field'),
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-entry-chapter'):(
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'display'),
+ ),
+ (TEXTNS,u'index-entry-link-end'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-entry-link-start'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-entry-page-number'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-entry-span'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-entry-tab-stop'):(
+ (STYLENS,u'position'),
+ (TEXTNS,u'style-name'),
+ (STYLENS,u'type'),
+ (STYLENS,u'leader-char'),
+ ),
+ (TEXTNS,u'index-entry-text'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-source-style'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'index-source-styles'):(
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'index-title'):(
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ ),
+ (TEXTNS,u'index-title-template'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'initial-creator'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'insertion'):(
+ ),
+# allowed_attributes
+ (TEXTNS,u'keywords'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'line-break'):(
+ ),
+ (TEXTNS,u'linenumbering-configuration'):(
+ (TEXTNS,u'number-position'),
+ (TEXTNS,u'number-lines'),
+ (STYLENS,u'num-format'),
+ (TEXTNS,u'count-empty-lines'),
+ (TEXTNS,u'count-in-text-boxes'),
+ (TEXTNS,u'style-name'),
+ (STYLENS,u'num-letter-sync'),
+ (TEXTNS,u'increment'),
+ (TEXTNS,u'offset'),
+ (TEXTNS,u'restart-on-page'),
+ ),
+ (TEXTNS,u'linenumbering-separator'):(
+ (TEXTNS,u'increment'),
+ ),
+ (TEXTNS,u'list'):(
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'continue-numbering'),
+ ),
+ (TEXTNS,u'list-header'):(
+ ),
+ (TEXTNS,u'list-item'):(
+ (TEXTNS,u'start-value'),
+ ),
+ (TEXTNS,u'list-level-style-bullet'):(
+ (TEXTNS,u'level'),
+ (STYLENS,u'num-prefix'),
+ (STYLENS,u'num-suffix'),
+ (TEXTNS,u'bullet-relative-size'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'bullet-char'),
+ ),
+ (TEXTNS,u'list-level-style-image'):(
+ (XLINKNS,u'show'),
+ (XLINKNS,u'actuate'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (TEXTNS,u'level'),
+ ),
+ (TEXTNS,u'list-level-style-number'):(
+ (TEXTNS,u'level'),
+ (TEXTNS,u'display-levels'),
+ (STYLENS,u'num-format'),
+ (STYLENS,u'num-suffix'),
+ (TEXTNS,u'style-name'),
+ (STYLENS,u'num-prefix'),
+ (STYLENS,u'num-letter-sync'),
+ (TEXTNS,u'start-value'),
+ ),
+ (TEXTNS,u'list-style'):(
+ (TEXTNS,u'consecutive-numbering'),
+ (STYLENS,u'display-name'),
+ (STYLENS,u'name'),
+ ),
+ (TEXTNS,u'measure'):(
+ (TEXTNS,u'kind'),
+ ),
+ (TEXTNS,u'modification-date'):(
+ (TEXTNS,u'date-value'),
+ (TEXTNS,u'fixed'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'modification-time'):(
+ (TEXTNS,u'fixed'),
+ (TEXTNS,u'time-value'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'note'):(
+ (TEXTNS,u'note-class'),
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'note-body'):(
+ ),
+ (TEXTNS,u'note-citation'):(
+ (TEXTNS,u'label'),
+ ),
+ (TEXTNS,u'note-continuation-notice-backward'):(
+ ),
+ (TEXTNS,u'note-continuation-notice-forward'):(
+ ),
+ (TEXTNS,u'note-ref'):(
+ (TEXTNS,u'ref-name'),
+ (TEXTNS,u'note-class'),
+ (TEXTNS,u'reference-format'),
+ ),
+ (TEXTNS,u'notes-configuration'):(
+ (TEXTNS,u'citation-body-style-name'),
+ (STYLENS,u'num-format'),
+ (TEXTNS,u'default-style-name'),
+ (STYLENS,u'num-suffix'),
+ (TEXTNS,u'start-numbering-at'),
+ (STYLENS,u'num-prefix'),
+ (STYLENS,u'num-letter-sync'),
+ (TEXTNS,u'citation-style-name'),
+ (TEXTNS,u'footnotes-position'),
+ (TEXTNS,u'master-page-name'),
+ (TEXTNS,u'start-value'),
+ (TEXTNS,u'note-class'),
+ ),
+ (TEXTNS,u'number'):(
+ ),
+ (TEXTNS,u'numbered-paragraph'):(
+ (TEXTNS,u'continue-numbering'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'start-value'),
+ (TEXTNS,u'level'),
+ ),
+ (TEXTNS,u'object-count'):(
+ (STYLENS,u'num-format'),
+ (STYLENS,u'num-letter-sync'),
+ ),
+ (TEXTNS,u'object-index'):(
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ ),
+# allowed_attributes
+ (TEXTNS,u'object-index-entry-template'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'object-index-source'):(
+ (TEXTNS,u'use-draw-objects'),
+ (TEXTNS,u'use-math-objects'),
+ (TEXTNS,u'relative-tab-stop-position'),
+ (TEXTNS,u'use-chart-objects'),
+ (TEXTNS,u'index-scope'),
+ (TEXTNS,u'use-spreadsheet-objects'),
+ (TEXTNS,u'use-other-objects'),
+ ),
+ (TEXTNS,u'outline-level-style'):(
+ (TEXTNS,u'level'),
+ (TEXTNS,u'display-levels'),
+ (STYLENS,u'num-format'),
+ (STYLENS,u'num-suffix'),
+ (TEXTNS,u'style-name'),
+ (STYLENS,u'num-prefix'),
+ (STYLENS,u'num-letter-sync'),
+ (TEXTNS,u'start-value'),
+ ),
+ (TEXTNS,u'outline-style'):(
+ ),
+ (TEXTNS,u'p'):(
+ (TEXTNS,u'cond-style-name'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'class-names'),
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'page'):(
+ (TEXTNS,u'master-page-name'),
+ ),
+ (TEXTNS,u'page-continuation'):(
+ (TEXTNS,u'string-value'),
+ (TEXTNS,u'select-page'),
+ ),
+ (TEXTNS,u'page-number'):(
+ (TEXTNS,u'page-adjust'),
+ (STYLENS,u'num-format'),
+ (TEXTNS,u'fixed'),
+ (STYLENS,u'num-letter-sync'),
+ (TEXTNS,u'select-page'),
+ ),
+ (TEXTNS,u'page-sequence'):(
+ ),
+ (TEXTNS,u'page-variable-get'):(
+ (STYLENS,u'num-format'),
+ (STYLENS,u'num-letter-sync'),
+ ),
+ (TEXTNS,u'page-variable-set'):(
+ (TEXTNS,u'active'),
+ (TEXTNS,u'page-adjust'),
+ ),
+ (TEXTNS,u'placeholder'):(
+ (TEXTNS,u'placeholder-type'),
+ (TEXTNS,u'description'),
+ ),
+ (TEXTNS,u'print-date'):(
+ (TEXTNS,u'date-value'),
+ (TEXTNS,u'fixed'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'print-time'):(
+ (TEXTNS,u'fixed'),
+ (TEXTNS,u'time-value'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'printed-by'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'reference-mark'):(
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'reference-mark-end'):(
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'reference-mark-start'):(
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'ruby'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'ruby-base'):(
+ ),
+ (TEXTNS,u'ruby-text'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u's'):(
+ (TEXTNS,u'c'),
+ ),
+ (TEXTNS,u'script'):(
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (SCRIPTNS,u'language'),
+ ),
+ (TEXTNS,u'section'):(
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'display'),
+ (TEXTNS,u'condition'),
+ ),
+ (TEXTNS,u'section-source'):(
+ (TEXTNS,u'filter-name'),
+ (XLINKNS,u'href'),
+ (XLINKNS,u'type'),
+ (TEXTNS,u'section-name'),
+ (XLINKNS,u'show'),
+ ),
+ (TEXTNS,u'sender-city'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-company'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-country'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-email'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-fax'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-firstname'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-initials'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-lastname'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-phone-private'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-phone-work'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-position'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-postal-code'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-state-or-province'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-street'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sender-title'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'sequence'):(
+ (TEXTNS,u'formula'),
+ (STYLENS,u'num-format'),
+ (STYLENS,u'num-letter-sync'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'ref-name'),
+ ),
+ (TEXTNS,u'sequence-decl'):(
+ (TEXTNS,u'separation-character'),
+ (TEXTNS,u'display-outline-level'),
+ (TEXTNS,u'name'),
+ ),
+ (TEXTNS,u'sequence-decls'):(
+ ),
+ (TEXTNS,u'sequence-ref'):(
+ (TEXTNS,u'ref-name'),
+ (TEXTNS,u'reference-format'),
+ ),
+ (TEXTNS,u'sheet-name'):(
+ ),
+ (TEXTNS,u'sort-key'):(
+ (TEXTNS,u'sort-ascending'),
+ (TEXTNS,u'key'),
+ ),
+# allowed_attributes
+ (TEXTNS,u'span'):(
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'class-names'),
+ ),
+ (TEXTNS,u'subject'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'tab'):(
+ (TEXTNS,u'tab-ref'),
+ ),
+ (TEXTNS,u'table-formula'):(
+ (TEXTNS,u'formula'),
+ (STYLENS,u'data-style-name'),
+ (TEXTNS,u'display'),
+ ),
+ (TEXTNS,u'table-index'):(
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ ),
+ (TEXTNS,u'table-index-entry-template'):(
+ (TEXTNS,u'style-name'),
+ ),
+ (TEXTNS,u'table-index-source'):(
+ (TEXTNS,u'index-scope'),
+ (TEXTNS,u'caption-sequence-name'),
+ (TEXTNS,u'use-caption'),
+ (TEXTNS,u'caption-sequence-format'),
+ (TEXTNS,u'relative-tab-stop-position'),
+ ),
+ (TEXTNS,u'table-of-content'):(
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ ),
+ (TEXTNS,u'table-of-content-entry-template'):(
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'table-of-content-source'):(
+ (TEXTNS,u'index-scope'),
+ (TEXTNS,u'outline-level'),
+ (TEXTNS,u'relative-tab-stop-position'),
+ (TEXTNS,u'use-index-marks'),
+ (TEXTNS,u'use-outline-level'),
+ (TEXTNS,u'use-index-source-styles'),
+ ),
+ (TEXTNS,u'template-name'):(
+ (TEXTNS,u'display'),
+ ),
+ (TEXTNS,u'text-input'):(
+ (TEXTNS,u'description'),
+ ),
+ (TEXTNS,u'time'):(
+ (TEXTNS,u'time-adjust'),
+ (TEXTNS,u'fixed'),
+ (TEXTNS,u'time-value'),
+ (STYLENS,u'data-style-name'),
+ ),
+ (TEXTNS,u'title'):(
+ (TEXTNS,u'fixed'),
+ ),
+ (TEXTNS,u'toc-mark'):(
+ (TEXTNS,u'string-value'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'toc-mark-end'):(
+ (TEXTNS,u'id'),
+ ),
+ (TEXTNS,u'toc-mark-start'):(
+ (TEXTNS,u'id'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'tracked-changes'):(
+ (TEXTNS,u'track-changes'),
+ ),
+ (TEXTNS,u'user-defined'):(
+ (TEXTNS,u'name'),
+ (OFFICENS,u'string-value'),
+ (OFFICENS,u'value'),
+ (OFFICENS,u'boolean-value'),
+ (OFFICENS,u'date-value'),
+ (STYLENS,u'data-style-name'),
+ (TEXTNS,u'fixed'),
+ (OFFICENS,u'time-value'),
+ ),
+ (TEXTNS,u'user-field-decl'):(
+ (TEXTNS,u'name'),
+ (OFFICENS,u'string-value'),
+ (OFFICENS,u'value'),
+ (OFFICENS,u'boolean-value'),
+ (OFFICENS,u'currency'),
+ (OFFICENS,u'date-value'),
+ (OFFICENS,u'value-type'),
+ (TEXTNS,u'formula'),
+ (OFFICENS,u'time-value'),
+ ),
+ (TEXTNS,u'user-field-decls'):(
+ ),
+ (TEXTNS,u'user-field-get'):(
+ (STYLENS,u'data-style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'display'),
+ ),
+ (TEXTNS,u'user-field-input'):(
+ (STYLENS,u'data-style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'description'),
+ ),
+ (TEXTNS,u'user-index'):(
+ (TEXTNS,u'protected'),
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'protection-key'),
+ ),
+ (TEXTNS,u'user-index-entry-template'):(
+ (TEXTNS,u'style-name'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'user-index-mark'):(
+ (TEXTNS,u'index-name'),
+ (TEXTNS,u'string-value'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'user-index-mark-end'):(
+ (TEXTNS,u'id'),
+ (TEXTNS,u'outline-level'),
+ ),
+ (TEXTNS,u'user-index-mark-start'):(
+ (TEXTNS,u'index-name'),
+ (TEXTNS,u'id'),
+ (TEXTNS,u'outline-level'),
+ ),
+# allowed_attributes
+ (TEXTNS,u'user-index-source'):(
+ (TEXTNS,u'copy-outline-levels'),
+ (TEXTNS,u'index-name'),
+ (TEXTNS,u'index-scope'),
+ (TEXTNS,u'relative-tab-stop-position'),
+ (TEXTNS,u'use-floating-frames'),
+ (TEXTNS,u'use-graphics'),
+ (TEXTNS,u'use-index-marks'),
+ (TEXTNS,u'use-objects'),
+ (TEXTNS,u'use-tables'),
+ ),
+ (TEXTNS,u'variable-decl'):(
+ (TEXTNS,u'name'),
+ (OFFICENS,u'value-type'),
+ ),
+ (TEXTNS,u'variable-decls'):(
+ ),
+ (TEXTNS,u'variable-get'):(
+ (STYLENS,u'data-style-name'),
+ (TEXTNS,u'name'),
+ (TEXTNS,u'display'),
+ ),
+ (TEXTNS,u'variable-input'):(
+ (STYLENS,u'data-style-name'),
+ (TEXTNS,u'display'),
+ (TEXTNS,u'name'),
+ (OFFICENS,u'value-type'),
+ (TEXTNS,u'description'),
+ ),
+ (TEXTNS,u'variable-set'):(
+ (TEXTNS,u'name'),
+ (TEXTNS,u'display'),
+ (OFFICENS,u'string-value'),
+ (OFFICENS,u'value'),
+ (OFFICENS,u'boolean-value'),
+ (OFFICENS,u'currency'),
+ (OFFICENS,u'date-value'),
+ (STYLENS,u'data-style-name'),
+ (OFFICENS,u'value-type'),
+ (TEXTNS,u'formula'),
+ (OFFICENS,u'time-value'),
+ ),
+# allowed_attributes
+}
diff --git a/src/odf/load.py b/src/odf/load.py
new file mode 100644
index 0000000000..a2b6b744c2
--- /dev/null
+++ b/src/odf/load.py
@@ -0,0 +1,117 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-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):
+#
+
+# This script is to be embedded in opendocument.py later
+# The purpose is to read an ODT/ODP/ODS file and create the datastructure
+# in memory. The user should then be able to make operations and then save
+# the structure again.
+
+from xml.sax import make_parser,handler
+from xml.sax.xmlreader import InputSource
+import xml.sax.saxutils
+from element import Element
+from namespaces import OFFICENS
+
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from StringIO import StringIO
+
+
+#
+# Parse the XML files
+#
+class LoadParser(handler.ContentHandler):
+ """ Extract headings from content.xml of an ODT file """
+ triggers = (
+ (OFFICENS, 'automatic-styles'), (OFFICENS, 'body'),
+ (OFFICENS, 'font-face-decls'), (OFFICENS, 'master-styles'),
+ (OFFICENS, 'meta'), (OFFICENS, 'scripts'),
+ (OFFICENS, 'settings'), (OFFICENS, 'styles') )
+
+ def __init__(self, document):
+ self.doc = document
+ self.data = []
+ self.level = 0
+ self.parse = False
+
+ def characters(self, data):
+ if self.parse == False:
+ return
+ self.data.append(data)
+
+ def startElementNS(self, tag, qname, attrs):
+ if tag in self.triggers:
+ self.parse = True
+ if self.doc._parsing != "styles.xml" and tag == (OFFICENS, 'font-face-decls'):
+ self.parse = False
+ if self.parse == False:
+ return
+
+ self.level = self.level + 1
+ # Add any accumulated text content
+ content = ''.join(self.data).strip()
+ if len(content) > 0:
+ self.parent.addText(content)
+ self.data = []
+ # Create the element
+ attrdict = {}
+ for (att,value) in attrs.items():
+ attrdict[att] = value
+ try:
+ e = Element(qname = tag, qattributes=attrdict, check_grammar=False)
+ self.curr = e
+ except AttributeError, v:
+ print "Error: %s" % v
+
+ if tag == (OFFICENS, 'automatic-styles'):
+ e = self.doc.automaticstyles
+ elif tag == (OFFICENS, 'body'):
+ e = self.doc.body
+ elif tag == (OFFICENS, 'master-styles'):
+ e = self.doc.masterstyles
+ elif tag == (OFFICENS, 'meta'):
+ e = self.doc.meta
+ elif tag == (OFFICENS,'scripts'):
+ e = self.doc.scripts
+ elif tag == (OFFICENS,'settings'):
+ e = self.doc.settings
+ elif tag == (OFFICENS,'styles'):
+ e = self.doc.styles
+ elif self.doc._parsing == "styles.xml" and tag == (OFFICENS, 'font-face-decls'):
+ e = self.doc.fontfacedecls
+ elif hasattr(self,'parent'):
+ self.parent.addElement(e, check_grammar=False)
+ self.parent = e
+
+
+ def endElementNS(self, tag, qname):
+ if self.parse == False:
+ return
+ self.level = self.level - 1
+ str = ''.join(self.data)
+ if len(str.strip()) > 0:
+ self.curr.addText(str)
+ self.data = []
+ self.curr = self.curr.parentNode
+ self.parent = self.curr
+ if tag in self.triggers:
+ self.parse = False
diff --git a/src/odf/manifest.py b/src/odf/manifest.py
new file mode 100644
index 0000000000..5a845335e4
--- /dev/null
+++ b/src/odf/manifest.py
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 MANIFESTNS
+from element import Element
+
+# Autogenerated
+def Manifest(**args):
+ return Element(qname = (MANIFESTNS,'manifest'), **args)
+
+def FileEntry(**args):
+ return Element(qname = (MANIFESTNS,'file-entry'), **args)
+
+def EncryptionData(**args):
+ return Element(qname = (MANIFESTNS,'encryption-data'), **args)
+
+def Algorithm(**args):
+ return Element(qname = (MANIFESTNS,'algorithm'), **args)
+
+def KeyDerivation(**args):
+ return Element(qname = (MANIFESTNS,'key-derivation'), **args)
+
+
+
+if __name__ == "__main__":
+ import cStringIO
+ xml=cStringIO.StringIO()
+ m = Manifest()
+ f = FileEntry(mediatype="text/xml", fullpath="content.xml")
+ m.addElement(f)
+
+ m.toXml(0,xml)
+ print xml.getvalue()
+
diff --git a/src/odf/math.py b/src/odf/math.py
new file mode 100644
index 0000000000..5dc38dfad3
--- /dev/null
+++ b/src/odf/math.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 MATHNS
+from element import Element
+
+# ODF 1.0 section 12.5
+# Mathematical content is represented by MathML 2.0
+
+# Autogenerated
+def Math(**args):
+ return Element(qname = (MATHNS,'math'), **args)
+
diff --git a/src/odf/meta.py b/src/odf/meta.py
new file mode 100644
index 0000000000..dc0318117a
--- /dev/null
+++ b/src/odf/meta.py
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 METANS
+from element import Element
+
+# Autogenerated
+def AutoReload(**args):
+ return Element(qname = (METANS,'auto-reload'), **args)
+
+def CreationDate(**args):
+ return Element(qname = (METANS,'creation-date'), **args)
+
+def DateString(**args):
+ return Element(qname = (METANS,'date-string'), **args)
+
+def DocumentStatistic(**args):
+ return Element(qname = (METANS,'document-statistic'), **args)
+
+def EditingCycles(**args):
+ return Element(qname = (METANS,'editing-cycles'), **args)
+
+def EditingDuration(**args):
+ return Element(qname = (METANS,'editing-duration'), **args)
+
+def Generator(**args):
+ return Element(qname = (METANS,'generator'), **args)
+
+def HyperlinkBehaviour(**args):
+ return Element(qname = (METANS,'hyperlink-behaviour'), **args)
+
+def InitialCreator(**args):
+ return Element(qname = (METANS,'initial-creator'), **args)
+
+def Keyword(**args):
+ return Element(qname = (METANS,'keyword'), **args)
+
+def PrintDate(**args):
+ return Element(qname = (METANS,'print-date'), **args)
+
+def PrintedBy(**args):
+ return Element(qname = (METANS,'printed-by'), **args)
+
+def Template(**args):
+ return Element(qname = (METANS,'template'), **args)
+
+def UserDefined(**args):
+ return Element(qname = (METANS,'user-defined'), **args)
+
diff --git a/src/odf/namespaces.py b/src/odf/namespaces.py
new file mode 100644
index 0000000000..912d82d46b
--- /dev/null
+++ b/src/odf/namespaces.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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):
+#
+TOOLSVERSION = u"ODFPY/0.8.1dev"
+
+ANIMNS = u"urn:oasis:names:tc:opendocument:xmlns:animation:1.0"
+CHARTNS = u"urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+CONFIGNS = u"urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+DBNS = u"http://openoffice.org/2004/database"
+DCNS = u"http://purl.org/dc/elements/1.1/"
+DOMNS = u"http://www.w3.org/2001/xml-events"
+DR3DNS = u"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+DRAWNS = u"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+FONS = u"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+FORMNS = u"urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+KOFFICENS = u"http://www.koffice.org/2005/"
+MANIFESTNS = u"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"
+MATHNS = u"http://www.w3.org/1998/Math/MathML"
+METANS = u"urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+NUMBERNS = u"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+OFFICENS = u"urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+OOONS = u"http://openoffice.org/2004/office"
+OOOWNS = u"http://openoffice.org/2004/writer"
+OOOCNS = u"http://openoffice.org/2004/calc"
+PRESENTATIONNS = u"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"
+SCRIPTNS = u"urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+SMILNS = u"urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0"
+STYLENS = u"urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+SVGNS = u"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+TABLENS = u"urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+TEXTNS = u"urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+XFORMSNS = u"http://www.w3.org/2002/xforms"
+XLINKNS = u"http://www.w3.org/1999/xlink"
+
+
+nsdict = {
+ ANIMNS: u'anim',
+ CHARTNS: u'chart',
+ CONFIGNS: u'config',
+ DBNS: u'db',
+ DCNS: u'dc',
+ DOMNS: u'dom',
+ DR3DNS: u'dr3d',
+ DRAWNS: u'draw',
+ FONS: u'fo',
+ FORMNS: u'form',
+ KOFFICENS: u'koffice',
+ MANIFESTNS: u'manifest',
+ MATHNS: u'math',
+ METANS: u'meta',
+ NUMBERNS: u'number',
+ OFFICENS: u'office',
+ OOONS: u'ooo',
+ OOOWNS: u'ooow',
+ OOOCNS: u'ooc',
+ PRESENTATIONNS: u'presentation',
+ SCRIPTNS: u'script',
+ SMILNS: u'smil',
+ STYLENS: u'style',
+ SVGNS: u'svg',
+ TABLENS: u'table',
+ TEXTNS: u'text',
+ XFORMSNS: u'xforms',
+ XLINKNS: u'xlink',
+}
diff --git a/src/odf/number.py b/src/odf/number.py
new file mode 100644
index 0000000000..12d81cba16
--- /dev/null
+++ b/src/odf/number.py
@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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 NUMBERNS
+from element import Element
+from style import StyleElement
+
+
+# Autogenerated
+def AmPm(**args):
+ return Element(qname = (NUMBERNS,'am-pm'), **args)
+
+def Boolean(**args):
+ return Element(qname = (NUMBERNS,'boolean'), **args)
+
+def BooleanStyle(**args):
+ return StyleElement(qname = (NUMBERNS,'boolean-style'), **args)
+
+def CurrencyStyle(**args):
+ return StyleElement(qname = (NUMBERNS,'currency-style'), **args)
+
+def CurrencySymbol(**args):
+ return Element(qname = (NUMBERNS,'currency-symbol'), **args)
+
+def DateStyle(**args):
+ return StyleElement(qname = (NUMBERNS,'date-style'), **args)
+
+def Day(**args):
+ return Element(qname = (NUMBERNS,'day'), **args)
+
+def DayOfWeek(**args):
+ return Element(qname = (NUMBERNS,'day-of-week'), **args)
+
+def EmbeddedText(**args):
+ return Element(qname = (NUMBERNS,'embedded-text'), **args)
+
+def Era(**args):
+ return Element(qname = (NUMBERNS,'era'), **args)
+
+def Fraction(**args):
+ return Element(qname = (NUMBERNS,'fraction'), **args)
+
+def Hours(**args):
+ return Element(qname = (NUMBERNS,'hours'), **args)
+
+def Minutes(**args):
+ return Element(qname = (NUMBERNS,'minutes'), **args)
+
+def Month(**args):
+ return Element(qname = (NUMBERNS,'month'), **args)
+
+def Number(**args):
+ return Element(qname = (NUMBERNS,'number'), **args)
+
+def NumberStyle(**args):
+ return StyleElement(qname = (NUMBERNS,'number-style'), **args)
+
+def PercentageStyle(**args):
+ return StyleElement(qname = (NUMBERNS,'percentage-style'), **args)
+
+def Quarter(**args):
+ return Element(qname = (NUMBERNS,'quarter'), **args)
+
+def ScientificNumber(**args):
+ return Element(qname = (NUMBERNS,'scientific-number'), **args)
+
+def Seconds(**args):
+ return Element(qname = (NUMBERNS,'seconds'), **args)
+
+def Text(**args):
+ return Element(qname = (NUMBERNS,'text'), **args)
+
+def TextContent(**args):
+ return Element(qname = (NUMBERNS,'text-content'), **args)
+
+def TextStyle(**args):
+ return StyleElement(qname = (NUMBERNS,'text-style'), **args)
+
+def TimeStyle(**args):
+ return StyleElement(qname = (NUMBERNS,'time-style'), **args)
+
+def WeekOfYear(**args):
+ return Element(qname = (NUMBERNS,'week-of-year'), **args)
+
+def Year(**args):
+ return Element(qname = (NUMBERNS,'year'), **args)
+
diff --git a/src/odf/odf2moinmoin.py b/src/odf/odf2moinmoin.py
new file mode 100644
index 0000000000..167fcdacb5
--- /dev/null
+++ b/src/odf/odf2moinmoin.py
@@ -0,0 +1,579 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-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
+#
+# See http://trac.edgewall.org/wiki/WikiFormatting
+#
+# Contributor(s):
+#
+
+import sys, zipfile, xml.dom.minidom
+from namespaces import nsdict
+from elementtypes import *
+
+IGNORED_TAGS = [
+ 'draw:a'
+ 'draw:g',
+ 'draw:line',
+ 'draw:object-ole',
+ 'office:annotation',
+ 'presentation:notes',
+ 'svg:desc',
+] + [ nsdict[item[0]]+":"+item[1] for item in empty_elements]
+
+INLINE_TAGS = [ nsdict[item[0]]+":"+item[1] for item in inline_elements]
+
+
+class TextProps:
+ """ Holds properties for a text style. """
+
+ def __init__(self):
+
+ self.italic = False
+ self.bold = False
+ self.fixed = False
+ self.underlined = False
+ self.strikethrough = False
+ self.superscript = False
+ self.subscript = False
+
+ def setItalic(self, value):
+ if value == "italic":
+ self.italic = True
+ elif value == "normal":
+ self.italic = False
+
+ def setBold(self, value):
+ if value == "bold":
+ self.bold = True
+ elif value == "normal":
+ self.bold = False
+
+ def setFixed(self, value):
+ self.fixed = value
+
+ def setUnderlined(self, value):
+ if value and value != "none":
+ self.underlined = True
+
+ def setStrikethrough(self, value):
+ if value and value != "none":
+ self.strikethrough = True
+
+ def setPosition(self, value):
+ if value is None or value == '':
+ return
+ posisize = value.split(' ')
+ textpos = posisize[0]
+ if textpos.find('%') == -1:
+ if textpos == "sub":
+ self.superscript = False
+ self.subscript = True
+ elif textpos == "super":
+ self.superscript = True
+ self.subscript = False
+ else:
+ itextpos = int(textpos[:textpos.find('%')])
+ if itextpos > 10:
+ self.superscript = False
+ self.subscript = True
+ elif itextpos < -10:
+ self.superscript = True
+ self.subscript = False
+
+ def __str__(self):
+
+ return "[italic=%s, bold=i%s, fixed=%s]" % (str(self.italic),
+ str(self.bold),
+ str(self.fixed))
+
+class ParagraphProps:
+ """ Holds properties of a paragraph style. """
+
+ def __init__(self):
+
+ self.blockquote = False
+ self.headingLevel = 0
+ self.code = False
+ self.title = False
+ self.indented = 0
+
+ def setIndented(self, value):
+ self.indented = value
+
+ def setHeading(self, level):
+ self.headingLevel = level
+
+ def setTitle(self, value):
+ self.title = value
+
+ def setCode(self, value):
+ self.code = value
+
+
+ def __str__(self):
+
+ return "[bq=%s, h=%d, code=%s]" % (str(self.blockquote),
+ self.headingLevel,
+ str(self.code))
+
+
+class ListProperties:
+ """ Holds properties for a list style. """
+
+ def __init__(self):
+ self.ordered = False
+
+ def setOrdered(self, value):
+ self.ordered = value
+
+
+
+class ODF2MoinMoin(object):
+
+
+ def __init__(self, filepath):
+ self.footnotes = []
+ self.footnoteCounter = 0
+ self.textStyles = {"Standard": TextProps()}
+ self.paragraphStyles = {"Standard": ParagraphProps()}
+ self.listStyles = {}
+ self.fixedFonts = []
+ self.hasTitle = 0
+ self.lastsegment = None
+
+ # Tags
+ self.elements = {
+ 'draw:page': self.textToString,
+ 'draw:frame': self.textToString,
+ 'draw:image': self.draw_image,
+ 'draw:text-box': self.textToString,
+ 'text:a': self.text_a,
+ 'text:note': self.text_note,
+ }
+ for tag in IGNORED_TAGS:
+ self.elements[tag] = self.do_nothing
+
+ for tag in INLINE_TAGS:
+ self.elements[tag] = self.inline_markup
+ self.elements['text:line-break'] = self.text_line_break
+ self.elements['text:s'] = self.text_s
+ self.elements['text:tab'] = self.text_tab
+
+ self.load(filepath)
+
+ def processFontDeclarations(self, fontDecl):
+ """ Extracts necessary font information from a font-declaration
+ element.
+ """
+ for fontFace in fontDecl.getElementsByTagName("style:font-face"):
+ if fontFace.getAttribute("style:font-pitch") == "fixed":
+ self.fixedFonts.append(fontFace.getAttribute("style:name"))
+
+
+
+ def extractTextProperties(self, style, parent=None):
+ """ Extracts text properties from a style element. """
+
+ textProps = TextProps()
+
+ if parent:
+ parentProp = self.textStyles.get(parent, None)
+ if parentProp:
+ textProp = parentProp
+
+ textPropEl = style.getElementsByTagName("style:text-properties")
+ if not textPropEl: return textProps
+
+ textPropEl = textPropEl[0]
+
+ textProps.setItalic(textPropEl.getAttribute("fo:font-style"))
+ textProps.setBold(textPropEl.getAttribute("fo:font-weight"))
+ textProps.setUnderlined(textPropEl.getAttribute("style:text-underline-style"))
+ textProps.setStrikethrough(textPropEl.getAttribute("style:text-line-through-style"))
+ textProps.setPosition(textPropEl.getAttribute("style:text-position"))
+
+ if textPropEl.getAttribute("style:font-name") in self.fixedFonts:
+ textProps.setFixed(True)
+
+ return textProps
+
+ def extractParagraphProperties(self, style, parent=None):
+ """ Extracts paragraph properties from a style element. """
+
+ paraProps = ParagraphProps()
+
+ name = style.getAttribute("style:name")
+
+ if name.startswith("Heading_20_"):
+ level = name[11:]
+ try:
+ level = int(level)
+ paraProps.setHeading(level)
+ except:
+ level = 0
+
+ if name == "Title":
+ paraProps.setTitle(True)
+
+ paraPropEl = style.getElementsByTagName("style:paragraph-properties")
+ if paraPropEl:
+ paraPropEl = paraPropEl[0]
+ leftMargin = paraPropEl.getAttribute("fo:margin-left")
+ if leftMargin:
+ try:
+ leftMargin = float(leftMargin[:-2])
+ if leftMargin > 0.01:
+ paraProps.setIndented(True)
+ except:
+ pass
+
+ textProps = self.extractTextProperties(style)
+ if textProps.fixed:
+ paraProps.setCode(True)
+
+ return paraProps
+
+
+ def processStyles(self, styleElements):
+ """ Runs through "style" elements extracting necessary information.
+ """
+
+ for style in styleElements:
+
+ name = style.getAttribute("style:name")
+
+ if name == "Standard": continue
+
+ family = style.getAttribute("style:family")
+ parent = style.getAttribute("style:parent-style-name")
+
+ if family == "text":
+ self.textStyles[name] = self.extractTextProperties(style, parent)
+
+ elif family == "paragraph":
+ self.paragraphStyles[name] = \
+ self.extractParagraphProperties(style, parent)
+ self.textStyles[name] = self.extractTextProperties(style, parent)
+
+ def processListStyles(self, listStyleElements):
+
+ for style in listStyleElements:
+ name = style.getAttribute("style:name")
+
+ prop = ListProperties()
+ if style.hasChildNodes():
+ subitems = [el for el in style.childNodes
+ if el.nodeType == xml.dom.Node.ELEMENT_NODE
+ and el.tagName == "text:list-level-style-number"]
+ if len(subitems) > 0:
+ prop.setOrdered(True)
+
+ self.listStyles[name] = prop
+
+
+ def load(self, filepath):
+ """ Loads an ODT file. """
+
+ zip = zipfile.ZipFile(filepath)
+
+ styles_doc = xml.dom.minidom.parseString(zip.read("styles.xml"))
+ fontfacedecls = styles_doc.getElementsByTagName("office:font-face-decls")
+ if fontfacedecls:
+ self.processFontDeclarations(fontfacedecls[0])
+ self.processStyles(styles_doc.getElementsByTagName("style:style"))
+ self.processListStyles(styles_doc.getElementsByTagName("text:list-style"))
+
+ self.content = xml.dom.minidom.parseString(zip.read("content.xml"))
+ fontfacedecls = self.content.getElementsByTagName("office:font-face-decls")
+ if fontfacedecls:
+ self.processFontDeclarations(fontfacedecls[0])
+
+ self.processStyles(self.content.getElementsByTagName("style:style"))
+ self.processListStyles(self.content.getElementsByTagName("text:list-style"))
+
+ def compressCodeBlocks(self, text):
+ """ Removes extra blank lines from code blocks. """
+
+ return text
+ lines = text.split("\n")
+ buffer = []
+ numLines = len(lines)
+ for i in range(numLines):
+
+ if (lines[i].strip() or i == numLines-1 or i == 0 or
+ not ( lines[i-1].startswith(" ")
+ and lines[i+1].startswith(" ") ) ):
+ buffer.append("\n" + lines[i])
+
+ return ''.join(buffer)
+
+#-----------------------------------
+ def do_nothing(self, node):
+ return ''
+
+ def draw_image(self, node):
+ """
+ """
+
+ link = node.getAttribute("xlink:href")
+ if link and link[:2] == './': # Indicates a sub-object, which isn't supported
+ return "%s\n" % link
+ if link and link[:9] == 'Pictures/':
+ link = link[9:]
+ return "[[Image(%s)]]\n" % link
+
+ def text_a(self, node):
+ text = self.textToString(node)
+ link = node.getAttribute("xlink:href")
+ if link.strip() == text.strip():
+ return "[%s] " % link.strip()
+ else:
+ return "[%s %s] " % (link.strip(), text.strip())
+
+
+ def text_line_break(self, node):
+ return "[[BR]]"
+
+ def text_note(self, node):
+ cite = (node.getElementsByTagName("text:note-citation")[0]
+ .childNodes[0].nodeValue)
+ body = (node.getElementsByTagName("text:note-body")[0]
+ .childNodes[0])
+ self.footnotes.append((cite, self.textToString(body)))
+ return "^%s^" % cite
+
+ def text_s(self, node):
+ try:
+ num = int(node.getAttribute("text:c"))
+ return " "*num
+ except:
+ return " "
+
+ def text_tab(self, node):
+ return " "
+
+ def inline_markup(self, node):
+ text = self.textToString(node)
+
+ if not text.strip():
+ return '' # don't apply styles to white space
+
+ styleName = node.getAttribute("text:style-name")
+ style = self.textStyles.get(styleName, TextProps())
+
+ if style.fixed:
+ return "`" + text + "`"
+
+ mark = []
+ if style:
+ if style.italic:
+ mark.append("''")
+ if style.bold:
+ mark.append("'''")
+ if style.underlined:
+ mark.append("__")
+ if style.strikethrough:
+ mark.append("~~")
+ if style.superscript:
+ mark.append("^")
+ if style.subscript:
+ mark.append(",,")
+ revmark = mark[:]
+ revmark.reverse()
+ return "%s%s%s" % (''.join(mark), text, ''.join(revmark))
+
+#-----------------------------------
+ def listToString(self, listElement, indent = 0):
+
+ self.lastsegment = listElement.tagName
+ buffer = []
+
+ styleName = listElement.getAttribute("text:style-name")
+ props = self.listStyles.get(styleName, ListProperties())
+
+ i = 0
+ for item in listElement.childNodes:
+ buffer.append(" "*indent)
+ i += 1
+ if props.ordered:
+ number = str(i)
+ number = " " + number + ". "
+ buffer.append(" 1. ")
+ else:
+ buffer.append(" * ")
+ subitems = [el for el in item.childNodes
+ if el.tagName in ["text:p", "text:h", "text:list"]]
+ for subitem in subitems:
+ if subitem.tagName == "text:list":
+ buffer.append("\n")
+ buffer.append(self.listToString(subitem, indent+3))
+ else:
+ buffer.append(self.paragraphToString(subitem, indent+3))
+ self.lastsegment = subitem.tagName
+ self.lastsegment = item.tagName
+ buffer.append("\n")
+
+ return ''.join(buffer)
+
+ def tableToString(self, tableElement):
+ """ MoinMoin uses || to delimit table cells
+ """
+
+ self.lastsegment = tableElement.tagName
+ buffer = []
+
+ for item in tableElement.childNodes:
+ self.lastsegment = item.tagName
+ if item.tagName == "table:table-header-rows":
+ buffer.append(self.tableToString(item))
+ if item.tagName == "table:table-row":
+ buffer.append("\n||")
+ for cell in item.childNodes:
+ buffer.append(self.inline_markup(cell))
+ buffer.append("||")
+ self.lastsegment = cell.tagName
+ return ''.join(buffer)
+
+
+ def toString(self):
+ """ Converts the document to a string.
+ FIXME: Result from second call differs from first call
+ """
+ body = self.content.getElementsByTagName("office:body")[0]
+ text = body.childNodes[0]
+
+ buffer = []
+
+ paragraphs = [el for el in text.childNodes
+ if el.tagName in ["draw:page", "text:p", "text:h","text:section",
+ "text:list", "table:table"]]
+
+ for paragraph in paragraphs:
+ if paragraph.tagName == "text:list":
+ text = self.listToString(paragraph)
+ elif paragraph.tagName == "text:section":
+ text = self.textToString(paragraph)
+ elif paragraph.tagName == "table:table":
+ text = self.tableToString(paragraph)
+ else:
+ text = self.paragraphToString(paragraph)
+ if text:
+ buffer.append(text)
+
+ if self.footnotes:
+
+ buffer.append("----")
+ for cite, body in self.footnotes:
+ buffer.append("%s: %s" % (cite, body))
+
+
+ buffer.append("")
+ return self.compressCodeBlocks('\n'.join(buffer))
+
+
+ def textToString(self, element):
+
+ buffer = []
+
+ for node in element.childNodes:
+
+ if node.nodeType == xml.dom.Node.TEXT_NODE:
+ buffer.append(node.nodeValue)
+
+ elif node.nodeType == xml.dom.Node.ELEMENT_NODE:
+ tag = node.tagName
+
+ if tag in ("draw:text-box", "draw:frame"):
+ buffer.append(self.textToString(node))
+
+ elif tag in ("text:p", "text:h"):
+ text = self.paragraphToString(node)
+ if text:
+ buffer.append(text)
+ elif tag == "text:list":
+ buffer.append(self.listToString(node))
+ else:
+ method = self.elements.get(tag)
+ if method:
+ buffer.append(method(node))
+ else:
+ buffer.append(" {" + tag + "} ")
+
+ return ''.join(buffer)
+
+ def paragraphToString(self, paragraph, indent = 0):
+
+ dummyParaProps = ParagraphProps()
+
+ style_name = paragraph.getAttribute("text:style-name")
+ paraProps = self.paragraphStyles.get(style_name, dummyParaProps)
+ text = self.inline_markup(paragraph)
+
+ if paraProps and not paraProps.code:
+ text = text.strip()
+
+ if paragraph.tagName == "text:p" and self.lastsegment == "text:p":
+ text = "\n" + text
+
+ self.lastsegment = paragraph.tagName
+
+ if paraProps.title:
+ self.hasTitle = 1
+ return "= " + text + " =\n"
+
+ outlinelevel = paragraph.getAttribute("text:outline-level")
+ if outlinelevel:
+
+ level = int(outlinelevel)
+ if self.hasTitle: level += 1
+
+ if level >= 1:
+ return "=" * level + " " + text + " " + "=" * level + "\n"
+
+ elif paraProps.code:
+ return "{{{\n" + text + "\n}}}\n"
+
+ if paraProps.indented:
+ return self.wrapParagraph(text, indent = indent, blockquote = True)
+
+ else:
+ return self.wrapParagraph(text, indent = indent)
+
+
+ def wrapParagraph(self, text, indent = 0, blockquote=False):
+
+ counter = 0
+ buffer = []
+ LIMIT = 50
+
+ if blockquote:
+ buffer.append(" ")
+
+ return ''.join(buffer) + text
+ # Unused from here
+ for token in text.split():
+
+ if counter > LIMIT - indent:
+ buffer.append("\n" + " "*indent)
+ if blockquote:
+ buffer.append(" ")
+ counter = 0
+
+ buffer.append(token + " ")
+ counter += len(token)
+
+ return ''.join(buffer)
diff --git a/src/odf/odf2xhtml.py b/src/odf/odf2xhtml.py
new file mode 100644
index 0000000000..8042f0871f
--- /dev/null
+++ b/src/odf/odf2xhtml.py
@@ -0,0 +1,1264 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2006-2007 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):
+#
+#import pdb
+#pdb.set_trace()
+import zipfile
+import xml.sax
+from xml.sax import handler
+from xml.sax.xmlreader import InputSource
+from xml.sax.saxutils import escape, quoteattr
+
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from StringIO import StringIO
+
+from namespaces import ANIMNS, CHARTNS, CONFIGNS, DCNS, DR3DNS, DRAWNS, FONS, \
+ FORMNS, MATHNS, METANS, NUMBERNS, OFFICENS, PRESENTATIONNS, SCRIPTNS, \
+ SMILNS, STYLENS, SVGNS, TABLENS, TEXTNS, XLINKNS
+
+# Handling of styles
+#
+# First there are font face declarations. These set up a font style that will be
+# referenced from a text-property. The declaration describes the font making
+# it possible for the application to find a similar font should the system not
+# have that particular one. The StyleToCSS stores these attributes to be used
+# for the CSS2 font declaration.
+#
+# Then there are default-styles. These set defaults for various style types:
+# "text", "paragraph", "section", "ruby", "table", "table-column", "table-row",
+# "table-cell", "graphic", "presentation", "drawing-page", "chart".
+# Since CSS2 can't refer to another style, ODF2XHTML add these to all
+# styles unless overridden.
+#
+# The real styles are declared in the element. They have a
+# family referring to the default-styles, and may have a parent style.
+#
+# Styles have scope. The same name can be used for both paragraph and
+# character etc. styles Since CSS2 has no scope we use a prefix. (Not elegant)
+# In ODF a style can have a parent, these parents can be chained.
+
+class StyleToCSS:
+ """ The purpose of the StyleToCSS class is to contain the rules to convert
+ ODF styles to CSS2. Since it needs the generic fonts, it would probably
+ make sense to also contain the Styles in a dict as well..
+ """
+
+ def __init__(self):
+ # Font declarations
+ self.fontdict = {}
+
+ # Fill-images from presentations for backgrounds
+ self.fillimages = {}
+
+ self.ruleconversions = {
+ (DRAWNS,u'fill-image-name'): self.c_drawfillimage,
+ (FONS,u"background-color"): self.c_fo,
+ (FONS,u"border"): self.c_fo,
+ (FONS,u"border-bottom"): self.c_fo,
+ (FONS,u"border-left"): self.c_fo,
+ (FONS,u"border-right"): self.c_fo,
+ (FONS,u"border-top"): self.c_fo,
+ (FONS,u"color"): self.c_fo,
+ (FONS,u"font-family"): self.c_fo,
+ (FONS,u"font-size"): self.c_fo,
+ (FONS,u"font-style"): self.c_fo,
+ (FONS,u"font-variant"): self.c_fo,
+ (FONS,u"font-weight"): self.c_fo,
+ (FONS,u"line-height"): self.c_fo,
+ (FONS,u"margin"): self.c_fo,
+ (FONS,u"margin-bottom"): self.c_fo,
+ (FONS,u"margin-left"): self.c_fo,
+ (FONS,u"margin-right"): self.c_fo,
+ (FONS,u"margin-top"): self.c_fo,
+ (FONS,u"min-height"): self.c_fo,
+ (FONS,u"padding"): self.c_fo,
+ (FONS,u"padding-bottom"): self.c_fo,
+ (FONS,u"padding-left"): self.c_fo,
+ (FONS,u"padding-right"): self.c_fo,
+ (FONS,u"padding-top"): self.c_fo,
+ (FONS,u"page-width"): self.c_page_width,
+ (FONS,u"page-height"): self.c_page_height,
+ (FONS,u"text-align"): self.c_text_align,
+ (FONS,u"text-indent") :self.c_fo,
+ (TABLENS,u'border-model') :self.c_border_model,
+ (STYLENS,u'column-width') : self.c_width,
+ (STYLENS,u"font-name"): self.c_fn,
+ (STYLENS,u'horizontal-pos'): self.c_hp,
+ (STYLENS,u'text-position'): self.c_text_position,
+ (STYLENS,u'text-line-through-style'): self.c_text_line_through_style,
+ (STYLENS,u'text-underline-style'): self.c_text_underline_style,
+ (STYLENS,u'width') : self.c_width,
+ # FIXME Should do style:vertical-pos here
+ }
+
+ def save_font(self, name, family, generic):
+ """ It is possible that the HTML browser doesn't know how to
+ show a particular font. Fortunately ODF provides generic fallbacks.
+ Unfortunately they are not the same as CSS2.
+ CSS2: serif, sans-serif, cursive, fantasy, monospace
+ ODF: roman, swiss, modern, decorative, script, system
+ This method put the font and fallback into a dictionary
+ """
+ htmlgeneric = "sans-serif"
+ if generic == "roman": htmlgeneric = "serif"
+ elif generic == "swiss": htmlgeneric = "sans-serif"
+ elif generic == "modern": htmlgeneric = "monospace"
+ elif generic == "decorative": htmlgeneric = "sans-serif"
+ elif generic == "script": htmlgeneric = "monospace"
+ elif generic == "system": htmlgeneric = "serif"
+ self.fontdict[name] = (family, htmlgeneric)
+
+ def c_drawfillimage(self, ruleset, sdict, rule, val):
+ """ Fill a figure with an image. Since CSS doesn't let you resize images
+ this should really be implemented as an absolutely position
+ with a width and a height
+ """
+ sdict['background-image'] = "url('%s')" % self.fillimages[val]
+
+ def c_fo(self, ruleset, sdict, rule, val):
+ """ XSL formatting attributes """
+ selector = rule[1]
+ sdict[selector] = val
+
+ def c_border_model(self, ruleset, sdict, rule, val):
+ """ Convert to CSS2 border model """
+ if val == 'collapsing':
+ sdict['border-collapse'] ='collapse'
+ else:
+ sdict['border-collapse'] ='separate'
+
+ def c_width(self, ruleset, sdict, rule, val):
+ """ Set width of box """
+ sdict['width'] = val
+
+ def c_text_align(self, ruleset, sdict, rule, align):
+ """ Text align """
+ if align == "start": align = "left"
+ if align == "end": align = "right"
+ sdict['text-align'] = align
+
+ def c_fn(self, ruleset, sdict, rule, fontstyle):
+ """ Generate the CSS font family
+ A generic font can be found in two ways. In a
+ element or as a font-family-generic attribute in text-properties.
+ """
+ generic = ruleset.get((STYLENS,'font-family-generic') )
+ if generic is not None:
+ self.save_font(fontstyle, fontstyle, generic)
+ family, htmlgeneric = self.fontdict.get(fontstyle, (fontstyle, 'serif'))
+ sdict['font-family'] = '%s, %s' % (family, htmlgeneric)
+
+ def c_text_position(self, ruleset, sdict, rule, tp):
+ """ Text position. This is used e.g. to make superscript and subscript
+ This attribute can have one or two values.
+
+ The first value must be present and specifies the vertical
+ text position as a percentage that relates to the current font
+ height or it takes one of the values sub or super. Negative
+ percentages or the sub value place the text below the
+ baseline. Positive percentages or the super value place
+ the text above the baseline. If sub or super is specified,
+ the application can choose an appropriate text position.
+
+ The second value is optional and specifies the font height
+ as a percentage that relates to the current font-height. If
+ this value is not specified, an appropriate font height is
+ used. Although this value may change the font height that
+ is displayed, it never changes the current font height that
+ is used for additional calculations.
+ """
+ textpos = tp.split(' ')
+ if len(textpos) == 2 and textpos[0] != "0%":
+ # Bug in OpenOffice. If vertical-align is 0% - ignore the text size.
+ sdict['font-size'] = textpos[1]
+ if textpos[0] == "super":
+ sdict['vertical-align'] = "33%"
+ elif textpos[0] == "sub":
+ sdict['vertical-align'] = "-33%"
+ else:
+ sdict['vertical-align'] = textpos[0]
+
+ def c_hp(self, ruleset, sdict, rule, hpos):
+ #FIXME: Frames wrap-style defaults to 'parallel', graphics to 'none'.
+ # It is properly set in the parent-styles, but the program doesn't
+ # collect the information.
+ wrap = ruleset.get((STYLENS,'wrap'),'parallel')
+ # Can have: from-left, left, center, right, from-inside, inside, outside
+ if hpos == "center":
+ sdict['margin-left'] = "auto"
+ sdict['margin-right'] = "auto"
+ else:
+ # force it to be *something* then delete it
+ sdict['margin-left'] = sdict['margin-right'] = ''
+ del sdict['margin-left'], sdict['margin-right']
+
+ if hpos in ("right","outside"):
+ if wrap in ( "left", "parallel","dynamic"):
+ sdict['float'] = "right"
+ elif wrap == "run-through":
+ sdict['position'] = "absolute" # Simulate run-through
+ sdict['top'] = "0"
+ sdict['right'] = "0";
+ else: # No wrapping
+ sdict['margin-left'] = "auto"
+ sdict['margin-right'] = "0px"
+ elif hpos in ("left", "inside"):
+ if wrap in ( "right", "parallel","dynamic"):
+ sdict['float'] = "left"
+ elif wrap == "run-through":
+ sdict['position'] = "absolute" # Simulate run-through
+ sdict['top'] = "0"
+ sdict['left'] = "0"
+ else: # No wrapping
+ sdict['margin-left'] = "0px"
+ sdict['margin-right'] = "auto"
+ elif hpos in ("from-left", "from-inside"):
+ if wrap in ( "right", "parallel"):
+ sdict['float'] = "left"
+ else:
+ sdict['position'] = "relative" # No wrapping
+ if ruleset.has_key( (SVGNS,'x') ):
+ sdict['left'] = ruleset[(SVGNS,'x')]
+
+ def c_page_width(self, ruleset, sdict, rule, val):
+ """ Set width of box
+ HTML doesn't really have a page-width. It is always 100% of the browser width
+ """
+ sdict['width'] = val
+
+ def c_text_underline_style(self, ruleset, sdict, rule, val):
+ """ Set underline decoration
+ HTML doesn't really have a page-width. It is always 100% of the browser width
+ """
+ if val and val != "none":
+ sdict['text-decoration'] = "underline"
+
+ def c_text_line_through_style(self, ruleset, sdict, rule, val):
+ """ Set underline decoration
+ HTML doesn't really have a page-width. It is always 100% of the browser width
+ """
+ if val and val != "none":
+ sdict['text-decoration'] = "line-through"
+
+ def c_page_height(self, ruleset, sdict, rule, val):
+ """ Set height of box """
+ sdict['height'] = val
+
+ def convert_styles(self, ruleset):
+ """ Rule is a tuple of (namespace, name). If the namespace is '' then
+ it is already CSS2
+ """
+ sdict = {}
+ for rule,val in ruleset.items():
+ if rule[0] == '':
+ sdict[rule[1]] = val
+ continue
+ method = self.ruleconversions.get(rule, None )
+ if method:
+ method(ruleset, sdict, rule, val)
+ return sdict
+
+
+class TagStack:
+ def __init__(self):
+ self.stack = []
+
+ def push(self, tag, attrs):
+ self.stack.append( (tag, attrs) )
+
+ def pop(self):
+ item = self.stack.pop()
+ return item
+
+ def stackparent(self):
+ item = self.stack[-1]
+ return item[1]
+
+ def rfindattr(self, attr):
+ """ Find a tag with the given attribute """
+ for tag, attrs in self.stack:
+ if attrs.has_key(attr):
+ return attrs[attr]
+ return None
+ def count_tags(self, tag):
+ c = 0
+ for ttag, tattrs in self.stack:
+ if ttag == tag: c = c + 1
+ return c
+
+special_styles = {
+ 'S-Emphasis':'em',
+ 'S-Citation':'cite',
+ 'S-Strong_20_Emphasis':'strong',
+ 'S-Variable':'var',
+ 'S-Definition':'dfn',
+ 'S-Teletype':'tt',
+ 'P-Heading_20_1':'h1',
+ 'P-Heading_20_2':'h2',
+ 'P-Heading_20_3':'h3',
+ 'P-Heading_20_4':'h4',
+ 'P-Heading_20_5':'h5',
+ 'P-Heading_20_6':'h6',
+# 'P-Caption':'caption',
+ 'P-Addressee':'address',
+# 'P-List_20_Heading':'dt',
+# 'P-List_20_Contents':'dd',
+ 'P-Preformatted_20_Text':'pre',
+# 'P-Table_20_Heading':'th',
+# 'P-Table_20_Contents':'td',
+# 'P-Text_20_body':'p'
+}
+
+#-----------------------------------------------------------------------------
+#
+# ODFCONTENTHANDLER
+#
+#-----------------------------------------------------------------------------
+class ODF2XHTML(handler.ContentHandler):
+ """ The ODF2XHTML parses an ODF file and produces XHTML"""
+
+ def __init__(self):
+ # Tags
+ self.elements = {
+ (DCNS, 'title'): (self.s_processcont, self.e_dc_title),
+ (DCNS, 'language'): (self.s_processcont, self.e_dc_contentlanguage),
+ (DCNS, 'creator'): (self.s_processcont, self.e_dc_metatag),
+ (DCNS, 'description'): (self.s_processcont, self.e_dc_metatag),
+ (DCNS, 'date'): (self.s_processcont, self.e_dc_metatag),
+ (DRAWNS, 'frame'): (self.s_draw_frame, self.e_draw_frame),
+ (DRAWNS, 'image'): (self.s_draw_image, None),
+ (DRAWNS, 'fill-image'): (self.s_draw_fill_image, None),
+ (DRAWNS, "layer-set"):(self.s_ignorexml, None),
+ (DRAWNS, 'page'): (self.s_draw_page, self.e_draw_page),
+ (METANS, 'creation-date'):(self.s_processcont, self.e_dc_metatag),
+ (METANS, 'generator'):(self.s_processcont, self.e_dc_metatag),
+ (METANS, 'initial-creator'): (self.s_processcont, self.e_dc_metatag),
+ (METANS, 'keyword'): (self.s_processcont, self.e_dc_metatag),
+ (NUMBERNS, "boolean-style"):(self.s_ignorexml, None),
+ (NUMBERNS, "currency-style"):(self.s_ignorexml, None),
+ (NUMBERNS, "date-style"):(self.s_ignorexml, None),
+ (NUMBERNS, "number-style"):(self.s_ignorexml, None),
+ (NUMBERNS, "text-style"):(self.s_ignorexml, None),
+ (OFFICENS, "automatic-styles"):(self.s_office_automatic_styles, None),
+ (OFFICENS, "document-content"):(self.s_office_document_content, self.e_office_document_content),
+ (OFFICENS, "forms"):(self.s_ignorexml, None),
+ (OFFICENS, "master-styles"):(self.s_office_master_styles, None),
+ (OFFICENS, "meta"):(self.s_ignorecont, None),
+ (OFFICENS, "presentation"):(self.s_office_presentation, self.e_office_presentation),
+ (OFFICENS, "spreadsheet"):(self.s_office_spreadsheet, self.e_office_spreadsheet),
+ (OFFICENS, "styles"):(self.s_office_styles, None),
+ (OFFICENS, "text"):(self.s_office_text, self.e_office_text),
+ (OFFICENS, "scripts"):(self.s_ignorexml, None),
+ (PRESENTATIONNS, "notes"):(self.s_ignorexml, None),
+ (STYLENS, "default-style"):(self.s_style_default_style, self.e_style_default_style),
+ (STYLENS, "drawing-page-properties"):(self.s_style_handle_properties, None),
+ (STYLENS, "font-face"):(self.s_style_font_face, None),
+# (STYLENS, "footer"):(self.s_style_footer, self.e_style_footer),
+# (STYLENS, "footer-style"):(self.s_style_footer_style, None),
+ (STYLENS, "graphic-properties"):(self.s_style_handle_properties, None),
+ (STYLENS, "handout-master"):(self.s_ignorexml, None),
+# (STYLENS, "header"):(self.s_style_header, self.e_style_header),
+# (STYLENS, "header-footer-properties"):(self.s_style_handle_properties, None),
+# (STYLENS, "header-style"):(self.s_style_header_style, None),
+ (STYLENS, "master-page"):(self.s_style_master_page, None),
+ (STYLENS, "page-layout-properties"):(self.s_style_handle_properties, None),
+# (STYLENS, "page-layout"):(self.s_style_page_layout, self.e_style_page_layout),
+ (STYLENS, "page-layout"):(self.s_ignorexml, None),
+ (STYLENS, "paragraph-properties"):(self.s_style_handle_properties, None),
+ (STYLENS, "style"):(self.s_style_style, self.e_style_style),
+ (STYLENS, "table-cell-properties"):(self.s_style_handle_properties, None),
+ (STYLENS, "table-column-properties"):(self.s_style_handle_properties, None),
+ (STYLENS, "table-properties"):(self.s_style_handle_properties, None),
+ (STYLENS, "text-properties"):(self.s_style_handle_properties, None),
+ (SVGNS, 'desc'): (self.s_ignorexml, None),
+ (TABLENS, 'covered-table-cell'): (self.s_ignorexml, None),
+ (TABLENS, 'table-cell'): (self.s_table_table_cell, self.e_table_table_cell),
+ (TABLENS, 'table-column'): (self.s_table_table_column, None),
+ (TABLENS, 'table-row'): (self.s_table_table_row, self.e_table_table_row),
+ (TABLENS, 'table'): (self.s_table_table, self.e_table_table),
+ (TEXTNS, 'a'): (self.s_text_a, self.e_text_a),
+ (TEXTNS, "alphabetical-index-source"):(self.s_text_x_source, self.e_text_x_source),
+ (TEXTNS, "bibliography-configuration"):(self.s_ignorexml, None),
+ (TEXTNS, "bibliography-source"):(self.s_text_x_source, self.e_text_x_source),
+ (TEXTNS, 'h'): (self.s_text_h, self.e_text_h),
+ (TEXTNS, "illustration-index-source"):(self.s_text_x_source, self.e_text_x_source),
+ (TEXTNS, 'line-break'):(self.s_text_line_break, None),
+ (TEXTNS, "linenumbering-configuration"):(self.s_ignorexml, None),
+ (TEXTNS, "list"):(self.s_text_list, self.e_text_list),
+ (TEXTNS, "list-item"):(self.s_text_list_item, self.e_text_list_item),
+ (TEXTNS, "list-level-style-bullet"):(self.s_text_list_level_style_bullet, self.e_text_list_level_style_bullet),
+ (TEXTNS, "list-level-style-number"):(self.s_text_list_level_style_number, self.e_text_list_level_style_number),
+ (TEXTNS, "list-style"):(None, None),
+ (TEXTNS, "note"):(self.s_text_note, None),
+ (TEXTNS, "note-body"):(self.s_text_note_body, self.e_text_note_body),
+ (TEXTNS, "note-citation"):(None, self.e_text_note_citation),
+ (TEXTNS, "notes-configuration"):(self.s_ignorexml, None),
+ (TEXTNS, "object-index-source"):(self.s_text_x_source, self.e_text_x_source),
+ (TEXTNS, 'p'): (self.s_text_p, self.e_text_p),
+ (TEXTNS, 's'): (self.s_text_s, None),
+ (TEXTNS, 'span'): (self.s_text_span, self.e_text_span),
+ (TEXTNS, 'tab'): (self.s_text_tab, None),
+ (TEXTNS, "table-index-source"):(self.s_text_x_source, self.e_text_x_source),
+ (TEXTNS, "table-of-content-source"):(self.s_text_x_source, self.e_text_x_source),
+ (TEXTNS, "user-index-source"):(self.s_text_x_source, self.e_text_x_source),
+ }
+
+ def writeout(self, s):
+ if s != '':
+ self._wfunc(s)
+
+ def writedata(self):
+ d = ''.join(self.data)
+ if d != '':
+ self.writeout(escape(d))
+
+ def opentag(self, tag, attrs={}, block=False):
+ """ Create an open HTML tag """
+ a = []
+ for key,val in attrs.items():
+ a.append('''%s=%s''' % (key, quoteattr(val)))
+ if len(a) == 0:
+ self.writeout("<%s>" % tag)
+ else:
+ self.writeout("<%s %s>" % (tag, " ".join(a)))
+ if block == True:
+ self.writeout("\n")
+
+ def closetag(self, tag, block=True):
+ self.writeout("%s>" % tag)
+ if block == True:
+ self.writeout("\n")
+
+ def emptytag(self, tag, attrs={}):
+ a = []
+ for key,val in attrs.items():
+ a.append('''%s=%s''' % (key, quoteattr(val)))
+ self.writeout("<%s %s/>\n" % (tag, " ".join(a)))
+
+#--------------------------------------------------
+ def characters(self, data):
+ if self.processelem and self.processcont:
+ self.data.append(data)
+
+ def handle_starttag(self, tag, method, attrs):
+ method(tag,attrs)
+
+ def handle_endtag(self, tag, attrs, method):
+ method(tag, attrs)
+
+ def startElementNS(self, tag, qname, attrs):
+ self.pstack.append( (self.processelem, self.processcont) )
+ if self.processelem:
+ method = self.elements.get(tag, (None, None) )[0]
+ if method:
+ self.handle_starttag(tag, method, attrs)
+ else:
+ self.unknown_starttag(tag,attrs)
+ self.tagstack.push( tag, attrs )
+
+ def endElementNS(self, tag, qname):
+ stag, attrs = self.tagstack.pop()
+ if self.processelem:
+ method = self.elements.get(tag, (None, None) )[1]
+ if method:
+ self.handle_endtag(tag, attrs, method)
+ else:
+ self.unknown_endtag(tag, attrs)
+ self.processelem, self.processcont = self.pstack.pop()
+
+ def unknown_starttag(self, tag, attrs):
+ pass
+
+ def unknown_endtag(self, tag, attrs):
+ pass
+
+ def s_ignorexml(self, tag, attrs):
+ """ Ignore this xml element and all children of it
+ It will automatically stop ignoring
+ """
+ self.processelem = False
+
+ def s_ignorecont(self, tag, attrs):
+ self.processcont = False
+
+ def s_processcont(self, tag, attrs):
+ self.processcont = True
+
+ def classname(self, attrs):
+ """ Generate a class name from a style name """
+ c = attrs[(TEXTNS,'style-name')]
+ c = c.replace(".","_")
+ return c
+
+ def get_anchor(self, name):
+ if not self.anchors.has_key(name):
+ self.anchors[name] = "anchor%03d" % (len(self.anchors) + 1)
+ return self.anchors.get(name)
+
+
+#--------------------------------------------------
+
+ def purgedata(self):
+ self.data = []
+
+#-----------------------------------------------------------------------------
+#
+# Handle meta data
+#
+#-----------------------------------------------------------------------------
+ def e_dc_title(self, tag, attrs):
+ """ Get the title from the meta data and create a HTML
+ """
+ self.metatags.append('%s\n' % escape(''.join(self.data)))
+ self.title = ''.join(self.data)
+ self.data = []
+
+ def e_dc_metatag(self, tag, attrs):
+ """ Any other meta data is added as a element
+ """
+ self.metatags.append('\n' % (tag[1], quoteattr(''.join(self.data))))
+ self.data = []
+
+ def e_dc_contentlanguage(self, tag, attrs):
+ """ Set the content language. Identifies the targeted audience
+ """
+ self.metatags.append('\n' % ''.join(self.data))
+ self.data = []
+
+ def s_draw_frame(self, tag, attrs):
+ """ A is made into a in HTML which is then styled
+ """
+ anchor_type = attrs.get((TEXTNS,'anchor-type'),'char')
+ name = "G-" + attrs.get( (DRAWNS,'style-name'), "")
+ if name == 'G-':
+ name = "PR-" + attrs.get( (PRESENTATIONNS,'style-name'), "")
+ name = name.replace(".","_")
+ if anchor_type == "paragraph":
+ style = ""
+ elif anchor_type == 'char':
+ style = "position: relative;"
+ else:
+ style = "position: absolute;"
+ if attrs.has_key( (SVGNS,"width") ):
+ style = style + "width:" + attrs[(SVGNS,"width")] + ";"
+ if attrs.has_key( (SVGNS,"height") ):
+ style = style + "height:" + attrs[(SVGNS,"height")] + ";"
+ if attrs.has_key( (SVGNS,"x") ):
+ style = style + "left:" + attrs[(SVGNS,"x")] + ";"
+ if attrs.has_key( (SVGNS,"y") ):
+ style = style + "top:" + attrs[(SVGNS,"y")] + ";"
+ self.opentag('div', {'class': name, 'style': style})
+
+ def e_draw_frame(self, tag, attrs):
+ """ End the
+ """
+ self.closetag('div')
+
+ def s_draw_fill_image(self, tag, attrs):
+ name = attrs.get( (DRAWNS,'name'), "NoName")
+ imghref = attrs[(XLINKNS,"href")]
+ imghref = self.rewritelink(imghref)
+ self.cs.fillimages[name] = imghref
+
+ def rewritelink(self, imghref):
+ """ Intended to be overloaded if you don't store your pictures
+ in a Pictures subfolder
+ """
+ return imghref
+
+ def s_draw_image(self, tag, attrs):
+ """ A becomes an
element
+ """
+ parent = self.tagstack.stackparent()
+ anchor_type = parent.get((TEXTNS,'anchor-type'))
+ imghref = attrs[(XLINKNS,"href")]
+ imghref = self.rewritelink(imghref)
+ htmlattrs = {'alt':"", 'src':imghref }
+ if anchor_type != "char":
+ htmlattrs['style'] = "display: block;"
+ self.emptytag('img', htmlattrs)
+
+ def s_draw_page(self, tag, attrs):
+ """ A is a slide in a presentation. We use a