From 0070fce9a63290eebd7db21ef9933b8b3fce8239 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 2 Jul 2016 10:25:20 +0200 Subject: [PATCH] Rewrite ODS support based on loxun XMLWriter module It uses constant memory and is a lot faster than odf and odf3 packages. --- tablib/compat.py | 2 - tablib/formats/_ods.py | 84 +- tablib/packages/loxun.py | 1487 +++++ tablib/packages/odf/__init__.py | 0 tablib/packages/odf/anim.py | 61 - tablib/packages/odf/attrconverters.py | 1484 ----- tablib/packages/odf/chart.py | 87 - tablib/packages/odf/config.py | 39 - tablib/packages/odf/dc.py | 72 - tablib/packages/odf/dr3d.py | 43 - tablib/packages/odf/draw.py | 182 - tablib/packages/odf/easyliststyle.py | 103 - tablib/packages/odf/element.py | 513 -- tablib/packages/odf/elementtypes.py | 325 - tablib/packages/odf/form.py | 115 - tablib/packages/odf/grammar.py | 8426 ------------------------ tablib/packages/odf/load.py | 112 - tablib/packages/odf/manifest.py | 41 - tablib/packages/odf/math.py | 30 - tablib/packages/odf/meta.py | 66 - tablib/packages/odf/namespaces.py | 97 - tablib/packages/odf/number.py | 104 - tablib/packages/odf/odf2moinmoin.py | 579 -- tablib/packages/odf/odf2xhtml.py | 1582 ----- tablib/packages/odf/odfmanifest.py | 115 - tablib/packages/odf/office.py | 104 - tablib/packages/odf/opendocument.py | 654 -- tablib/packages/odf/presentation.py | 85 - tablib/packages/odf/script.py | 30 - tablib/packages/odf/style.py | 148 - tablib/packages/odf/svg.py | 54 - tablib/packages/odf/table.py | 307 - tablib/packages/odf/teletype.py | 137 - tablib/packages/odf/text.py | 562 -- tablib/packages/odf/thumbnail.py | 427 -- tablib/packages/odf/userfield.py | 169 - tablib/packages/odf/xforms.py | 34 - tablib/packages/odf3/__init__.py | 0 tablib/packages/odf3/anim.py | 61 - tablib/packages/odf3/attrconverters.py | 1484 ----- tablib/packages/odf3/chart.py | 87 - tablib/packages/odf3/config.py | 39 - tablib/packages/odf3/dc.py | 72 - tablib/packages/odf3/dr3d.py | 43 - tablib/packages/odf3/draw.py | 182 - tablib/packages/odf3/easyliststyle.py | 103 - tablib/packages/odf3/element.py | 519 -- tablib/packages/odf3/elementtypes.py | 325 - tablib/packages/odf3/form.py | 115 - tablib/packages/odf3/grammar.py | 8426 ------------------------ tablib/packages/odf3/load.py | 112 - tablib/packages/odf3/manifest.py | 41 - tablib/packages/odf3/math.py | 30 - tablib/packages/odf3/meta.py | 66 - tablib/packages/odf3/namespaces.py | 97 - tablib/packages/odf3/number.py | 104 - tablib/packages/odf3/odf2moinmoin.py | 579 -- tablib/packages/odf3/odf2xhtml.py | 1582 ----- tablib/packages/odf3/odfmanifest.py | 115 - tablib/packages/odf3/office.py | 104 - tablib/packages/odf3/opendocument.py | 654 -- tablib/packages/odf3/presentation.py | 85 - tablib/packages/odf3/script.py | 30 - tablib/packages/odf3/style.py | 148 - tablib/packages/odf3/svg.py | 54 - tablib/packages/odf3/table.py | 307 - tablib/packages/odf3/teletype.py | 137 - tablib/packages/odf3/text.py | 562 -- tablib/packages/odf3/thumbnail.py | 427 -- tablib/packages/odf3/userfield.py | 169 - tablib/packages/odf3/xforms.py | 34 - tablib/packages/ods.py | 150 + 72 files changed, 1664 insertions(+), 33839 deletions(-) create mode 100644 tablib/packages/loxun.py delete mode 100644 tablib/packages/odf/__init__.py delete mode 100644 tablib/packages/odf/anim.py delete mode 100644 tablib/packages/odf/attrconverters.py delete mode 100644 tablib/packages/odf/chart.py delete mode 100644 tablib/packages/odf/config.py delete mode 100644 tablib/packages/odf/dc.py delete mode 100644 tablib/packages/odf/dr3d.py delete mode 100644 tablib/packages/odf/draw.py delete mode 100644 tablib/packages/odf/easyliststyle.py delete mode 100644 tablib/packages/odf/element.py delete mode 100644 tablib/packages/odf/elementtypes.py delete mode 100644 tablib/packages/odf/form.py delete mode 100644 tablib/packages/odf/grammar.py delete mode 100644 tablib/packages/odf/load.py delete mode 100644 tablib/packages/odf/manifest.py delete mode 100644 tablib/packages/odf/math.py delete mode 100644 tablib/packages/odf/meta.py delete mode 100644 tablib/packages/odf/namespaces.py delete mode 100644 tablib/packages/odf/number.py delete mode 100644 tablib/packages/odf/odf2moinmoin.py delete mode 100644 tablib/packages/odf/odf2xhtml.py delete mode 100644 tablib/packages/odf/odfmanifest.py delete mode 100644 tablib/packages/odf/office.py delete mode 100644 tablib/packages/odf/opendocument.py delete mode 100644 tablib/packages/odf/presentation.py delete mode 100644 tablib/packages/odf/script.py delete mode 100644 tablib/packages/odf/style.py delete mode 100644 tablib/packages/odf/svg.py delete mode 100644 tablib/packages/odf/table.py delete mode 100644 tablib/packages/odf/teletype.py delete mode 100644 tablib/packages/odf/text.py delete mode 100644 tablib/packages/odf/thumbnail.py delete mode 100644 tablib/packages/odf/userfield.py delete mode 100644 tablib/packages/odf/xforms.py delete mode 100644 tablib/packages/odf3/__init__.py delete mode 100644 tablib/packages/odf3/anim.py delete mode 100644 tablib/packages/odf3/attrconverters.py delete mode 100644 tablib/packages/odf3/chart.py delete mode 100644 tablib/packages/odf3/config.py delete mode 100644 tablib/packages/odf3/dc.py delete mode 100644 tablib/packages/odf3/dr3d.py delete mode 100644 tablib/packages/odf3/draw.py delete mode 100644 tablib/packages/odf3/easyliststyle.py delete mode 100644 tablib/packages/odf3/element.py delete mode 100644 tablib/packages/odf3/elementtypes.py delete mode 100644 tablib/packages/odf3/form.py delete mode 100644 tablib/packages/odf3/grammar.py delete mode 100644 tablib/packages/odf3/load.py delete mode 100644 tablib/packages/odf3/manifest.py delete mode 100644 tablib/packages/odf3/math.py delete mode 100644 tablib/packages/odf3/meta.py delete mode 100644 tablib/packages/odf3/namespaces.py delete mode 100644 tablib/packages/odf3/number.py delete mode 100644 tablib/packages/odf3/odf2moinmoin.py delete mode 100644 tablib/packages/odf3/odf2xhtml.py delete mode 100644 tablib/packages/odf3/odfmanifest.py delete mode 100644 tablib/packages/odf3/office.py delete mode 100644 tablib/packages/odf3/opendocument.py delete mode 100644 tablib/packages/odf3/presentation.py delete mode 100644 tablib/packages/odf3/script.py delete mode 100644 tablib/packages/odf3/style.py delete mode 100644 tablib/packages/odf3/svg.py delete mode 100644 tablib/packages/odf3/table.py delete mode 100644 tablib/packages/odf3/teletype.py delete mode 100644 tablib/packages/odf3/text.py delete mode 100644 tablib/packages/odf3/thumbnail.py delete mode 100644 tablib/packages/odf3/userfield.py delete mode 100644 tablib/packages/odf3/xforms.py create mode 100644 tablib/packages/ods.py diff --git a/tablib/compat.py b/tablib/compat.py index e03526d3..402cf143 100644 --- a/tablib/compat.py +++ b/tablib/compat.py @@ -27,7 +27,6 @@ from tablib.packages.xlrd3.biffh import XLRDError from tablib.packages import markup3 as markup from tablib.packages import openpyxl3 as openpyxl - from tablib.packages.odf3 import opendocument, style, text, table import tablib.packages.dbfpy3 as dbfpy import csv @@ -48,7 +47,6 @@ from tablib.packages import markup from itertools import ifilter from tablib.packages import openpyxl - from tablib.packages.odf import opendocument, style, text, table from tablib.packages import unicodecsv as csv import tablib.packages.dbfpy as dbfpy diff --git a/tablib/formats/_ods.py b/tablib/formats/_ods.py index f43a26c6..b2c04aae 100644 --- a/tablib/formats/_ods.py +++ b/tablib/formats/_ods.py @@ -11,90 +11,60 @@ else: from cStringIO import StringIO as BytesIO -from tablib.compat import opendocument, style, table, text, unicode + +from tablib.packages import ods +from tablib.compat import unicode title = 'ods' extensions = ('ods',) -bold = style.Style(name="bold", family="paragraph") -bold.addElement(style.TextProperties(fontweight="bold", fontweightasian="bold", fontweightcomplex="bold")) def export_set(dataset): """Returns ODF representation of Dataset.""" - wb = opendocument.OpenDocumentSpreadsheet() - wb.automaticstyles.addElement(bold) - - ws = table.Table(name=dataset.title if dataset.title else 'Tablib Dataset') - wb.spreadsheet.addElement(ws) - dset_sheet(dataset, ws) - stream = BytesIO() - wb.save(stream) + wb = ods.ODSWorkbook(stream) + dset_sheet(dataset, wb, title='Sheet') + wb.close() return stream.getvalue() def export_book(databook): """Returns ODF representation of DataBook.""" - wb = opendocument.OpenDocumentSpreadsheet() - wb.automaticstyles.addElement(bold) - - for i, dset in enumerate(databook._datasets): - ws = table.Table(name=dset.title if dset.title else 'Sheet%s' % (i)) - wb.spreadsheet.addElement(ws) - dset_sheet(dset, ws) - - stream = BytesIO() - wb.save(stream) + wb = ods.ODSWorkbook(stream) + + for i, dataset in enumerate(databook._datasets): + dset_sheet(dataset, wb, title='Sheet %d' % i) + wb.close() return stream.getvalue() -def dset_sheet(dataset, ws): +def dset_sheet(dataset, wb, title=None): """Completes given worksheet from given Dataset.""" _package = dataset._package(dicts=False) + if not _package: + return + + wb.start_sheet(len(_package[0]), + dataset.title if dataset.title else title) for i, sep in enumerate(dataset._separators): _offset = i _package.insert((sep[0] + _offset), (sep[1],)) for i, row in enumerate(_package): - row_number = i + 1 - odf_row = table.TableRow(stylename=bold, defaultcellstylename='bold') - for j, col in enumerate(row): + cells = [] + for cell in row: try: - col = unicode(col, errors='ignore') + cell = unicode(cell, errors='ignore') except TypeError: - ## col is already unicode + # col is already unicode pass - ws.addElement(table.TableColumn()) - - # bold headers - if (row_number == 1) and dataset.headers: - odf_row.setAttribute('stylename', bold) - ws.addElement(odf_row) - cell = table.TableCell() - p = text.P() - p.addElement(text.Span(text=col, stylename=bold)) - cell.addElement(p) - odf_row.addElement(cell) - - # wrap the rest - else: - try: - if '\n' in col: - ws.addElement(odf_row) - cell = table.TableCell() - cell.addElement(text.P(text=col)) - odf_row.addElement(cell) - else: - ws.addElement(odf_row) - cell = table.TableCell() - cell.addElement(text.P(text=col)) - odf_row.addElement(cell) - except TypeError: - ws.addElement(odf_row) - cell = table.TableCell() - cell.addElement(text.P(text=col)) - odf_row.addElement(cell) \ No newline at end of file + cells.append(cell) + if i == 0: + wb.add_headers(cells) + else: + wb.add_row(cells) + wb.end_sheet() diff --git a/tablib/packages/loxun.py b/tablib/packages/loxun.py new file mode 100644 index 00000000..9b6726c2 --- /dev/null +++ b/tablib/packages/loxun.py @@ -0,0 +1,1487 @@ +""" +loxun is a Python module to write large output in XML using Unicode and +namespaces. Of course you can also use it for small XML output with plain 8 +bit strings and no namespaces. + +loxun's features are: + +* **small memory foot print**: the document is created on the fly by writing to + an output stream, no need to keep all of it in memory. + +* **easy to use namespaces**: simply add a namespace and refer to it using the + standard ``namespace:tag`` syntax. + +* **mix unicode and io.BytesIO**: pass both unicode or plain 8 bit strings to any + of the methods. Internally loxun converts them to unicode, so once a + parameter got accepted by the API you can rely on it not causing any + messy ``UnicodeError`` trouble. + +* **automatic escaping**: no need to manually handle special characters such + as ``<`` or ``&`` when writing text and attribute values. + +* **robustness**: while you write the document, sanity checks are performed on + everything you do. Many silly mistakes immediately result in an + ``XmlError``, for example missing end elements or references to undeclared + namespaces. + +* **open source**: distributed under the GNU Lesser General Public License 3 + or later. + +Here is a very basic example. First you have to create an output stream. In +many cases this would be a file, but for the sake of simplicity we use a +``io.BytesIO`` here: + + >>> from __future__ import unicode_literals + >>> import io + >>> out = io.BytesIO() + +Then you can create an `XmlWriter` to write to this output: + + >>> xml = XmlWriter(out) + +Now write the content: + + >>> xml.addNamespace("xhtml", "http://www.w3.org/1999/xhtml") + >>> xml.startTag("xhtml:html") + >>> xml.startTag("xhtml:body") + >>> xml.text("Hello world!") + >>> xml.tag("xhtml:img", {"src": "smile.png", "alt": ":-)"}) + >>> xml.endTag() + >>> xml.endTag() + >>> xml.close() + +And the result is: + + >>> print out.getvalue().rstrip("\\r\\n") + + + + Hello world! + + + + +Writing a simple document +========================= + +The following example creates a very simple XHTML document. + +To make it simple, the output goes to a ``BytesIO``, but you could also use +a binary file that has been created using ``io.open(filename, "wb")``. + + >>> from __future__ import unicode_literals + >>> import io + >>> out = io.BytesIO() + +First create an `XmlWriter` to write the XML code to the specified output: + + >>> xml = XmlWriter(out) + +This automatically adds the XML prolog: + + >>> print out.getvalue().rstrip("\\r\\n") + + +Next add the ```` start tag: + + >>> xml.startTag("html") + +Now comes the . To pass attributes, specify them in a dictionary. +So in order to add:: + + + +use: + + >>> xml.startTag("body", {"id": "top"}) + +Let' add a little text so there is something to look at: + + >>> xml.text("Hello world!") + +Wrap it up: close all elements and the document. + + >>> xml.endTag() + >>> xml.endTag() + >>> xml.close() + +And this is what we get: + + >>> print out.getvalue().rstrip("\\r\\n") + + + + Hello world! + + + +Specifying attributes + +First create a writer: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + +Now write the content: + + >>> xml.tag("img", {"src": "smile.png", "alt": ":-)"}) + +Attribute values do not have to be strings, other types will be converted to +Unicode using Python's ``unicode()`` function: + + >>> xml.tag("img", {"src": "wink.png", "alt": ";-)", "width": 32, "height": 24}) + +And the result is: + + >>> print out.getvalue().rstrip("\\r\\n") + + :-) + ;-) + +Using namespaces +================ + +Now the same thing but with a namespace. First create the prolog +and header like above: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + +Next add the namespace: + + >>> xml.addNamespace("xhtml", "http://www.w3.org/1999/xhtml") + +Now elements can use qualified tag names using a colon (:) to separate +namespace and tag name: + + >>> xml.startTag("xhtml:html") + >>> xml.startTag("xhtml:body") + >>> xml.text("Hello world!") + >>> xml.endTag() + >>> xml.endTag() + >>> xml.close() + +As a result, tag names are now prefixed with "xhtml:": + + >>> print out.getvalue().rstrip("\\r\\n") + + + + Hello world! + + + +Working with non ASCII characters +================================= + +Sometimes you want to use characters outside the ASCII range, for example +German Umlauts, the Euro symbol or Japanese Kanji. The easiest and performance +wise best way is to use Unicode strings. For example: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + >>> xml.text(u"The price is \\u20ac 100") # Unicode of Euro symbol + >>> out.getvalue().rstrip("\\r\\n") + 'The price is \\xe2\\x82\\xac 100' + +Notice the "u" before the string passed to `XmlWriter.text()`, it declares the +string to be a unicode string that can hold any character, even those that are +beyond the 8 bit range. + +Also notice that in the output the Euro symbol looks very different from the +input. This is because the output encoding is UTF-8 (the default), which +has the advantage of keeping all ASCII characters the same and turning any +characters with a code of 128 or more into a sequence of 8 bit bytes that +can easily fit into an output stream to a binary file or ``io.BytesIO``. + +If you have to stick to classic 8 bit string parameters, loxun attempts to +convert them to unicode. By default it assumes ASCII encoding, which does +not work out as soon as you use a character outside the ASCII range: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + >>> xml.text("The price is \\xa4 100") # ISO-8859-15 code of Euro symbol + Traceback (most recent call last): + ... + UnicodeDecodeError: 'ascii' codec can't decode byte 0xa4 in position 13: ordinal not in range(128) + +In this case you have to tell the writer the encoding you use by specifying +the the ``sourceEncoding``: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False, sourceEncoding="iso-8859-15") + +Now everything works out again: + + >>> xml.text("The price is \\xa4 100") # ISO-8859-15 code of Euro symbol + >>> out.getvalue().rstrip("\\r\\n") + 'The price is \\xe2\\x82\\xac 100' + +Of course in practice you will not mess around with hex codes to pass your +texts. Instead you just specify the source encoding using the mechanisms +described in PEP 263, +`Defining Python Source Code Encodings `_. + +Pretty printing and indentation +=============================== + +By default, loxun starts a new line for each ``startTag`` and indents the +content with two spaces. You can change the spaces to any number of spaces and +tabs you like: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, indent=" ") # <-- Indent with 4 spaces. + >>> xml.startTag("html") + >>> xml.startTag("body") + >>> xml.text("Hello world!") + >>> xml.endTag() + >>> xml.endTag() + >>> xml.close() + >>> print out.getvalue().rstrip("\\r\\n") + + + + Hello world! + + + +You can disable pretty printing all together using ``pretty=False``, resulting +in an output of a single large line: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, pretty=False) # <-- Disable pretty printing. + >>> xml.startTag("html") + >>> xml.startTag("body") + >>> xml.text("Hello world!") + >>> xml.endTag() + >>> xml.endTag() + >>> xml.close() + >>> print out.getvalue().rstrip("\\r\\n") + Hello world! + +Changing the XML prolog +======================= + +When you create a writer, it automatically write an XML prolog +processing instruction to the output. This is what the default prolog +looks like: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + >>> print out.getvalue().rstrip("\\r\\n") + + +You can change the version or encoding: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, encoding=u"ascii", version=u"1.1") + >>> print out.getvalue().rstrip("\\r\\n") + + +To completely omit the prolog, set the parameter ``prolog=False``: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + >>> out.getvalue() + '' + +Adding other content +==================== + +Apart from text and tags, XML provides a few more things you can add to +documents. Here's an example that shows how to do it with loxun. + +First, create a writer: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + +Let's add a document type definition: + + >>> xml.raw("") + >>> xml.newline() + +Notice that loxun uses the generic `XmlWriter.raw()` for that, which allows to +add any content without validation or escaping. You can do all sorts of nasty +things with ``raw()`` that will result in invalid XML, but this is one of its +reasonable uses. + +Next, let's add a comment: + + >>> xml.comment("Show case some rarely used XML constructs") + +Here is a processing instruction: + + >>> xml.processingInstruction("xml-stylesheet", "href=\\"default.css\\" type=\\"text/css\\"") + +And finally a CDATA section: + + >>> xml.cdata(">> this will not be parsed <<") + +And the result is: + + >>> print out.getvalue().rstrip("\\r\\n") + + + + + > this will not be parsed <<]]> + + +Optimization +============ + +Loxun automatically optimized pairs of empty start/end tags. For example: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + >>> xml.startTag("customers") + >>> xml.startTag("person", {"id": "12345", "name": "Doe, John"}) + >>> xml.endTag("person") # without optimization, this would add . + >>> xml.endTag() + >>> xml.close() + >>> print out.getvalue().rstrip("\\r\\n") + + + + + +Despite the explicit ``startTag("person")`` and matching ``endtag()``, the +output only contains a simple ```` tag. + +Contributing +------------ + +If you want to help improve loxun, you can access the source code at +. + +Future +====== + +Currently loxun does what it was built for. + +There are is no real plans to improve it in the near future, but here is a list +of features that might be added at some point: + +* Add validation of tag and attribute names to ensure that all characters used + are allowed. For instance, currently loxun does not complain about a tag + named "a#b*c$d_". +* Raise an `XmlError` when namespaces are added with attributes instead of + `XmlWriter.addNamespace()`. +* Logging support to simplify debugging of the calling code. Probably + `XmlWriter` would get a property ``logger`` which is a standard + ``logging.Logger``. By default it could log original exceptions that + loxun turns into an `XmlError` and namespaces opened and closed. + Changing it to ``logging.DEBUG`` would log each tag and XML construct + written, including additional information about the internal tag stack. + That way you could dynamically increase or decrease logging output. +* Rethink pretty printing. Instead of a global property that can only be set + when initializing an `XmlWriter`, it could be a optional parameter for + `XmlWriter.startTag()` where it could be turned on and off as needed. And + the property could be named ``literal`` instead of ``pretty`` (with an + inverse logic). +* Add a ``DomWriter`` that creates a ``xml.dom.minidom.Document``. + +Some features other XML libraries support but I never saw any real use for: + +* Specify attribute order for tags. + +Version history +=============== + +Version 2.0, 2014-07-28 + +* Added support for Python 3.2+ while retaining the option to run with + Python 2.6+ (issue #5; thanks go to `Stefan Schwarzer`_ who offered his + guidance during a "Python 2 to 3" sprint at EuroPython 2014). +* Dropped support for Python 2.5, keep using loxun 1.3 if you are stuck + with with this version. + +.. _Stefan Schwarzer: http://www.sschwarzer.net + +Version 1.3, 2012-01-01 + +* Added ``endTags()`` to close several or all open tags (issue #3, + contributed by Anton Kolechkin). +* Added ``ChainXmlWriter`` which is similar to ``XmlWriter`` and allows to + chain methods for more concise source code (issue #3, contributed by Anton + Kolechkin). + +Version 1.2, 2011-03-12 + +* Fixed ``AttributeError`` when ``XmlWriter(..., encoding=...)`` was set. + +Version 1.1, 08-Jan-2011 + +* Fixed ``AssertionError`` when ``pretty`` was set to ``False`` + (issue #1; fixed by David Cramer). + +Version 1.0, 11-Oct-2010 + +* Added support for Python's ``with`` so you don not have to manually call + `XmlWriter.close()` anymore. +* Added Git repository at . + +Version 0.8, 11-Jul-2010 + +* Added possibility to pass attributes to `XmlWriter.startTag()` and + `XmlWriter.tag()` with values that have other types than ``str`` or + ``unicode``. When written to XML, the value is converted using Python's + built-in ``unicode()`` function. +* Added a couple of files missing from the distribution, most important the + test suite. + +Version 0.7, 03-Jul-2010 + +* Added optimization of matching start and end tag without any content in + between. For example, ``x.startTag("some"); x.endTag()`` results in + ```` instead of ````. +* Fixed handling of unknown name spaces. They now raise an `XmlError` instead + of ``ValueError``. + +Version 0.6, 03-Jun-2010 + +* Added option ``indent`` to specify the indentation text each new line starts with. +* Added option ``newline`` to specify how lines written should end. +* Fixed that `XmlWriter.tag()` did not remove namespaces declared immediately + before it. +* Cleaned up documentation. + +Version 0.5, 25-May-2010 + +* Fixed typo in namespace attribute name. +* Fixed adding of namespaces before calls to `XmlWriter.tag()` which resulted + in an `XmlError`. + +Version 0.4, 21-May-2010 + +* Added option ``sourceEncoding`` to simplify processing of classic strings. + The manual section "Working with non ASCII characters" explains how to use + it. + +Version 0.3, 17-May-2010 + +* Added scoped namespaces which are removed automatically by + `XmlWriter.endTag()`. +* Changed ``text()`` to normalize newlines and white space if pretty printing + is enabled. +* Moved writing of XML prolog to the constructor and removed + ``XmlWriter.prolog()``. To omit the prolog, specify ``prolog=False`` when + creating the `XmlWriter`. If you later want to write the prolog yourself, + use `XmlWriter.processingInstruction()`. +* Renamed ``*Element()`` to ``*Tag`` because they really only write tags, not + whole elements. + +Version 0.2, 16-May-2010 + +* Added `XmlWriter.comment()`, `XmlWriter.cdata()` and + `XmlWriter.processingInstruction()` to write these specific XML constructs. +* Added indentation and automatic newline to text if pretty printing is + enabled. +* Removed newline from prolog in case pretty printing is disabled. +* Fixed missing "?" in prolog. + +Version 0.1, 15-May-2010 + +* Initial release. +""" +# Copyright (C) 2010-2012 Thomas Aglassinger +# +# This program 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 3 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 Lesser General Public +# License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +from __future__ import unicode_literals + +import collections +import io +import os +import re +import sys +import xml.sax.saxutils + +__version__ = "2.0" + + +# Compatibility helpers for Python 2 and 3. +if sys.version_info[0] == 2: + bytes_type = str + unicode_type = unicode +else: + bytes_type = bytes + unicode_type = str + + +class XmlError(Exception): + """ + Error raised when XML can not be generated. + """ + pass + +def _quoted(value): + _assertIsUnicode("value", value) + return xml.sax.saxutils.quoteattr(value) + +def _validateNotEmpty(name, value): + """ + Validate that ``value`` is not empty and raise `XmlError` in case it is. + """ + assert name + if not value: + raise XmlError("%s must not be empty" % name) + +def _validateNotNone(name, value): + """ + Validate that ``value`` is not ``None`` and raise `XmlError` in case it is. + """ + assert name + if value is None: + raise XmlError("%s must not be %r" % (name, None)) + +def _validateNotNoneOrEmpty(name, value): + """ + Validate that ``value`` is not empty or ``None`` and raise `XmlError` in case it is. + """ + _validateNotNone(name, value) + _validateNotEmpty(name, value) + +def _assertIsUnicode(name, value): + assert (value is None) or isinstance(value, unicode_type), \ + "value for %r must be of type %s but is: %r" % (name, unicode_type.__name__, value) + +def _splitPossiblyQualifiedName(name, value): + """ + A pair ``(namespace, name)`` derived from ``name``. + + A fully qualified name: + + >>> _splitPossiblyQualifiedName(u"tag name", u"xhtml:img") + (u'xhtml', u'img') + + A name in the default namespace: + + >>> _splitPossiblyQualifiedName(u"tag name", u"img") + (None, u'img') + + Improper names result in an `XmlError`: + + >>> _splitPossiblyQualifiedName(u"x", u"") + Traceback (most recent call last): + ... + XmlError: x must not be empty + """ + assert name + _assertIsUnicode("name", name) + _assertIsUnicode("value", value) + + colonIndex = value.find(":") + if colonIndex == -1: + _validateNotEmpty(name, value) + result = (None, value) + else: + namespacePart = value[:colonIndex] + _validateNotEmpty("namespace part of %s", namespacePart) + namePart = value[colonIndex+1:] + _validateNotEmpty("name part of %s", namePart) + result = (namespacePart, namePart) + # TODO: validate that all parts are NCNAMEs. + return result + +def _joinPossiblyQualifiedName(namespace, name): + _assertIsUnicode("namespace", namespace) + assert name + _assertIsUnicode("name", name) + if namespace: + result = "%s:%s" % (namespace, name) + else: + result = name + return result + +class XmlWriter(object): + """ + Writer for large output in XML optionally supporting Unicode and + namespaces. + """ + # Marks to start/end CDATA. + _CDATA_START = "" + + # Marks to start/end processing instruction. + _PROCESSING_START = "" + + # Possible value for _possiblyWriteTag()'s ``close`` parameter. + _CLOSE_NONE = "none" + _CLOSE_AT_START = "start" + _CLOSE_AT_END = "end" + + # Build regular expressions to validate tag and attribute names. + _NAME_START_CHARS = "_a-zA-Z\u00c0-\u00d6\u00d8-\u00f6\00f8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd" + _NAME_CHARS = "\\-\\.0-9" + _NAME_START_CHARS + "\\u00b7\\u0300-\\u036f\\u203f-\\u2040" + _NAME_START_CHAR_PATTERN = "[" + _NAME_START_CHARS + "]" + _NAME_CHAR_PATTERN = "[" + _NAME_CHARS + "]" + _nameStartCharRegEx = re.compile(_NAME_START_CHAR_PATTERN, re.UNICODE) + _nameCharRegEx = re.compile(_NAME_START_CHAR_PATTERN, re.UNICODE) + + def __init__(self, output, pretty=True, indent=" ", newline=os.linesep, encoding="utf-8", errors="strict", prolog=True, version="1.0", sourceEncoding="ascii"): + """ + Initialize ``XmlWriter`` writing to ``output``. + + The ``output`` can be anything that has a ``write(data)`` method, + typically a filelike object. The writer accesses the ``output`` as + stream, so it does not have to support any methods for random + access like ``seek()``. + + In case you write to a file, use ``"wb"`` as ``mode`` for ``open()`` + to prevent messed up newlines. + + Set ``pretty`` to ``False`` if you do not want to the writer to pretty + print. Keep in mind though that this results in the whole output being + a single line unless you use `newline()` or write text with newline + characters in it. + + Set ``indent`` to the string that should be used for each indentation + level. + + Set ``newline`` to the string that should be used at the end of each + line. + + Set ``encoding`` to the name of the preferred output encoding. + + Set ``errors`` to one of the value possible value for + ``unicode(..., error=...)`` if you do not want the output to fail with + a `UnicodeError` in case a character cannot be encoded. + + Set ``prolog`` to ``False`` if you do not want the writer to emit an + XML prolog processing instruction (like + ````). + + Set ``version`` to the value the version attribute in the XML prolog + should have. + + Set ``sourceEncoding`` to the name of the encoding that plain 8 bit + strings passed as parameters use. + """ + assert output is not None + assert encoding + assert errors + assert sourceEncoding + _validateNotNoneOrEmpty("version", version) + self._output = output + self._pretty = pretty + self._sourceEncoding = sourceEncoding + self._encoding = self._unicodedFromString(encoding) + self._errors = self._unicodedFromString(errors) + self._namespaces = {} + self._elementStack = collections.deque() + self._namespacesToAdd = collections.deque() + self._isOpen = True + self._contentHasBeenWritten = False + self._indent = self._unicodedFromString(indent) + + # `None` or a tuple of (indent, qualifiedTagName, attributes). + # See also: `_possiblyWriteTag()`. + self._startTagToWrite = None + + indentWithoutWhiteSpace = self._indent.replace(" ", "").replace("\t", "") + assert not indentWithoutWhiteSpace, \ + "`indent` must contain only blanks or tabs but also has: %r" % indentWithoutWhiteSpace + self._newline = self._unicodedFromString(newline) + _VALID_NEWLINES = ["\r", "\n", "\r\n"] + assert self._newline in _VALID_NEWLINES, \ + "`newline` is %r but must be one of: %s" % (self._newline, _VALID_NEWLINES) + if prolog: + self.processingInstruction("xml", "version=%s encoding=%s" % ( \ + _quoted(self._unicodedFromString(version)), + _quoted(self._encoding)) + ) + + def __enter__(self): + return self + + def __exit__(self, errorType, error, traceback): + if not error: + # There's no point in calling `close()` in case of previous errors + # because it most likely will cause another error and thus discard + # the original error which holds actually useful information. + # + # Not calling `close()` will *not* introduce any resource leaks. + self.close() + + @property + def isPretty(self): + """Pretty print writes to the ``output``?""" + return self._pretty + + @property + def encoding(self): + """The encoding used when writing to the ``output``.""" + return self._encoding + + @property + def output(self): + """The stream where the output goes.""" + return self._output + + def _scope(self): + return len(self._elementStack) + + def _encoded(self, text): + assert text is not None + _assertIsUnicode("text", text) + return text.encode(self._encoding, self._errors) + + def _unicodedFromString(self, text): + """ + Same value as ``text`` but converted to unicode in case ``text`` is a + string. ``None`` remains ``None``. + """ + if text is None: + result = None + elif isinstance(text, unicode_type): + result = text + else: + result = unicode_type(text, self._sourceEncoding) + return result + + def _raiseStrOrUnicodeBroken(self, method, value, error): + """ + Raise `XmlError` pointing out the ``__str__()`` or ``__unicode__`` of + of the type of ``value`` must be implemented properly. + """ + assert method in ("str", "unicode") + assert error is not None + + someTypeName = type(value).__name__ + message = "%s.__%s()__ must return a value of type %s or %s but failed for value %r with: %s" % ( + someTypeName, method, unicode_type.__name__, bytes_type.__name__, value, error + ) + raise XmlError(message) + + def _unicoded(self, some): + """ + Same value as ``some`` but converted to unicode in case ``some`` is + not already a unicode string. ``None`` remains ``None``. + + Examples: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + >>> xml._unicoded(u"abc") + u'abc' + >>> xml._unicoded("abc") + u'abc' + >>> xml._unicoded(123) + u'123' + + >>> import decimal + >>> xml._unicoded(decimal.Decimal("123.45")) + u'123.45' + + In order for this to work, the type of ``some`` must have a proper + implementation of ``__unicode()__`` or ``__str__``. + + Here is an example for a class with a broken ``__unicode__``, which + already fails if ``unicode()`` is called without loxun: + + >>> class Broken(object): + ... def __unicode__(self): + ... return 123 # BROKEN: Return type must be str or unicode + >>> unicode(Broken()) + Traceback (most recent call last): + ... + TypeError: coercing to Unicode: need string or buffer, int found + + Consequently, using a value of ``Broken`` as attribute value will fail too: + + >>> xml.tag("someTag", {"someAttribute": Broken()}) #doctest: +ELLIPSIS + Traceback (most recent call last): + ... + XmlError: Broken.__unicode()__ must return a value of type str or unicode but failed for value ... with: coercing to Unicode: need string or buffer, int found + """ + if some is None: + result = None + elif isinstance(some, unicode_type): + result = some + else: + if isinstance(some, bytes_type): + result = some + else: + try: + result = unicode_type(some) + except Exception as error: + self._raiseStrOrUnicodeBroken("unicode", some, error) + # Ensure that the caller implemented __str__ / __unicode__ properly. + if not isinstance(result, unicode_type): + try: + result = unicode_type(some, self._sourceEncoding) + except Exception as error: + self._raiseStrOrUnicodeBroken("unicode", some, error) + return result + + def _isNameStartChar(self, some): + """ + NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] + | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] + | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] + | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] + """ + assert some + return True + + def _isNameChar(self, some): + """ + NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 + | [#x0300-#x036F] | [#x203F-#x2040] + """ + assert some + return True + + def _elementName(self, name, namespace): + assert name + if namespace: + result = "%s:%s" % (namespace, name) + else: + result = name + return result + + def _validateIsOpen(self): + if not self._isOpen: + raise XmlError("operation must be performed before writer is closed") + + def _validateNamespaceItem(self, itemName, namespace, qualifiedName): + if namespace: + namespaceFound = False + scopeIndex = self._scope() + while not namespaceFound and (scopeIndex >= 0): + namespacesForScope = self._namespaces.get(scopeIndex) + if namespacesForScope: + if namespace in [namespaceToCompareWith for namespaceToCompareWith, _ in namespacesForScope]: + namespaceFound = True + scopeIndex -= 1 + if not namespaceFound: + if namespace == "xmlns": + # TODO: raise XmlError("namespace '%s' must be added using `addNamespace()`.") + pass + else: + raise XmlError("namespace '%s' for %s '%s' must be added before use" % (namespace, itemName, qualifiedName)) + + def _write(self, text): + assert text is not None + _assertIsUnicode("text", text) + self._output.write(self._encoded(text)) + if not self._contentHasBeenWritten and text: + self._contentHasBeenWritten = True + + def _writeIndent(self): + self._write(self._indent * len(self._elementStack)) + + def _writePrettyIndent(self): + if self._pretty: + self._writeIndent() + + def _writePrettyNewline(self): + if self._pretty: + self.newline() + + def _writeEscaped(self, text): + assert text is not None + _assertIsUnicode("text", text) + self._write(xml.sax.saxutils.escape(text)) + + def newline(self): + self._possiblyFlushTag() + self._write(self._newline) + + def addNamespace(self, name, uri): + """ + Add namespace to the following elements by adding a ``xmlns`` + attribute to the next tag that is written using `startTag()` or `tag()`. + """ + # TODO: Validate that name is NCName. + _validateNotNoneOrEmpty("name", name) + _validateNotNoneOrEmpty("uri", uri) + uniName = self._unicodedFromString(name) + uniUri = self._unicodedFromString(uri) + namespacesForScope = self._namespaces.get(self._scope()) + namespaceExists = (uniName in self._namespacesToAdd) or ( + (namespacesForScope != None) and (uniName in namespacesForScope) + ) + if namespaceExists: + raise XmlError("namespace %r must added only once for current scope but already is %r" % (uniName, uniUri)) + self._namespacesToAdd.append((uniName, uniUri)) + + def _possiblyWriteTag(self, namespace, name, close, attributes={}): + _assertIsUnicode("namespace", namespace) + assert name + _assertIsUnicode("name", name) + assert close + assert close in (XmlWriter._CLOSE_NONE, XmlWriter._CLOSE_AT_START, XmlWriter._CLOSE_AT_END) + assert attributes is not None + + actualAttributes = {} + + # TODO: Validate that no "xmlns" attributes are specified by hand. + + # Process new namespaces to add. + if close in [XmlWriter._CLOSE_NONE, XmlWriter._CLOSE_AT_END]: + while self._namespacesToAdd: + namespaceName, uri = self._namespacesToAdd.pop() + if namespaceName: + actualAttributes["xmlns:%s" % namespaceName] = uri + else: + actualAttributes["xmlns"] = uri + namespacesForScope = self._namespaces.get(self._scope()) + if namespacesForScope == None: + namespacesForScope = [] + self._namespaces[self._scope()] = namespacesForScope + assert namespaceName not in [existingName for existingName, _ in namespacesForScope] + namespacesForScope.append((namespaceName, uri)) + self._namespaces[namespaceName] = uri + else: + if self._namespacesToAdd: + namespaceNames = ", ".join([name for name, _ in self._namespacesToAdd]) + raise XmlError("namespaces must be added before startTag() or tag(): %s" % namespaceNames) + + # Convert attributes to unicode. + for qualifiedAttributeName, attributeValue in list(attributes.items()): + uniQualifiedAttributeName = self._unicodedFromString(qualifiedAttributeName) + attributeNamespace, attributeName = _splitPossiblyQualifiedName("attribute name", uniQualifiedAttributeName) + self._validateNamespaceItem("attribute", attributeNamespace, attributeName) + actualAttributes[uniQualifiedAttributeName] = self._unicoded(attributeValue) + + # Prepare indentation and qualified tag name to be written. + if self.isPretty: + indent = self._indent * len(self._elementStack) + else: + indent = "" + self._validateNamespaceItem("tag", namespace, name) + if namespace: + qualifiedTagName = "%s:%s" % (namespace, name) + else: + qualifiedTagName = name + + if close == XmlWriter._CLOSE_NONE: + self._startTagToWrite = (indent, qualifiedTagName, actualAttributes) + else: + self._actuallyWriteTag(indent, qualifiedTagName, actualAttributes, close) + + # Process name spaces to remove + if close in [XmlWriter._CLOSE_AT_END, XmlWriter._CLOSE_AT_START]: + scopeToRemove = self._scope() + if scopeToRemove in self._namespaces: + del self._namespaces[scopeToRemove] + + def _actuallyWriteTag(self, indent, qualifiedTagName, attributes, close): + assert self._startTagToWrite is None + assert indent is not None + _assertIsUnicode("indent", indent) + assert qualifiedTagName + _assertIsUnicode("qualifiedTagName", qualifiedTagName) + assert close + assert close in (XmlWriter._CLOSE_NONE, XmlWriter._CLOSE_AT_START, XmlWriter._CLOSE_AT_END) + assert attributes is not None + if self._pretty: + self._write(indent) + self._write("<") + if close == XmlWriter._CLOSE_AT_START: + self._write("/") + self._write(qualifiedTagName) + for attributeName in sorted(attributes.keys()): + _assertIsUnicode("attribute name", attributeName) + value = attributes[attributeName] + _assertIsUnicode("value of attribute %r" % attributeName, value) + self._write(" %s=%s" % (attributeName, _quoted(value))) + if close == XmlWriter._CLOSE_AT_END: + if self.isPretty: + self._write(" ") + self._write("/") + self._write(">") + if self._pretty: + self.newline() + + def _possiblyFlushTag(self): + """ + If ``self._startTagToWrite`` is set, it contains a tuple + ``(indent, qualifiedTagName, attributes)`` describing a start tag that has not + been written yet. In this case, write the tag now and set + ``self._startTagToWrite`` to ``None``. This allows to optimize a sequence + of ``startTag()``/ ``endTag()`` with the same tag to be changed to + a simple ``tag()``. + """ + if self._startTagToWrite: + indent, qualifiedTagName, attributes = self._startTagToWrite; + self._startTagToWrite = None + self._actuallyWriteTag(indent, qualifiedTagName, attributes, XmlWriter._CLOSE_NONE) + + def startTag(self, qualifiedName, attributes={}): + """ + Start tag with name ``qualifiedName``, optionally using a namespace + prefix separated with a colon (:) and ``attributes``. + + Example names are "img" and "xhtml:img" (assuming the namespace prefix + "xtml" has been added before using `addNamespace()`). + + Attributes are a dictionary containing the attribute name and value, for + example:: + + {"src": "../some.png", "xhtml:alt": "some image"} + """ + self._possiblyFlushTag() + uniQualifiedName = self._unicodedFromString(qualifiedName) + namespace, name = _splitPossiblyQualifiedName("tag name", uniQualifiedName) + self._possiblyWriteTag(namespace, name, XmlWriter._CLOSE_NONE, attributes) + self._elementStack.append((namespace, name)) + + def endTag(self, expectedQualifiedName=None): + """ + End tag that has been started before using `startTag()`, + optionally checking that the name matches ``expectedQualifiedName``. + + As example, consider the following writer with a namespace: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + >>> xml.addNamespace("xhtml", "http://www.w3.org/1999/xhtml") + + Now start a couple of elements: + + >>> xml.startTag("html") + >>> xml.startTag("xhtml:body") + + Try to end a mistyped tag: + + >>> xml.endTag("xhtml:doby") + Traceback (most recent call last): + ... + XmlError: tag name must be xhtml:doby but is xhtml:body + + Try again properly: + + >>> xml.endTag("xhtml:body") + + Try to end another mistyped tag, this time without namespace: + + >>> xml.endTag("xml") + Traceback (most recent call last): + ... + XmlError: tag name must be xml but is html + + End the tag properly, this time without an expected name: + + >>> xml.endTag() + + Try to end another tag without any left: + + >>> xml.endTag() + Traceback (most recent call last): + ... + XmlError: tag stack must not be empty + """ + try: + (namespace, name) = self._elementStack.pop() + except IndexError: + raise XmlError("tag stack must not be empty") + actualQualifiedName = _joinPossiblyQualifiedName(namespace, name) + if expectedQualifiedName: + # Validate that actual tag name matches expected name. + uniExpectedQualifiedName = self._unicodedFromString(expectedQualifiedName) + if actualQualifiedName != expectedQualifiedName: + self._elementStack.append((namespace, name)) + raise XmlError("tag name must be %s but is %s" % (uniExpectedQualifiedName, actualQualifiedName)) + + isConsolidatableStartEndTag = False + if self._startTagToWrite: + _, qualifiedStartTagName, attributes = self._startTagToWrite + if actualQualifiedName == qualifiedStartTagName: + isConsolidatableStartEndTag = True + if isConsolidatableStartEndTag: + self._startTagToWrite = None + self._possiblyWriteTag(namespace, name, XmlWriter._CLOSE_AT_END, attributes) + else: + self._possiblyFlushTag() + self._possiblyWriteTag(namespace, name, XmlWriter._CLOSE_AT_START) + + + def endTags(self, count=0): + """ + End tags is useful if you need to close a couple of tags in one command + it might be useful when you need to close a few root tags. + + As example, consider the following writer with a namespace: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + >>> xml.addNamespace("xhtml", "http://www.w3.org/1999/xhtml") + + Now start a couple of elements: + + >>> xml.startTag("html") + >>> xml.startTag("xhtml:body") + >>> xml.startTag("xhtml:div") + >>> xml.startTag("xhtml:span") + >>> xml.startTag("xhtml:b") + + Try to end bad number of tags: + + >>> xml.endTags(7) # actually there are 5 tags, not 7 + Traceback (most recent call last): + ... + XmlError: cannot close 7 tags, 5 remaining + + Try to end 2 tags: + + >>> xml.endTags(2) + + And now finally end all started tags: + + >>> xml.endTags() + + But if all the tags closed it will raise the same error as endTag + + >>> xml.endTags() + Traceback (most recent call last): + ... + XmlError: tag stack must not be empty + """ + + stackLen = int(len(self._elementStack)) + + if stackLen == 0: + raise XmlError("tag stack must not be empty") + if count == 0: + count = stackLen + elif stackLen < count: + raise XmlError("cannot close %d tags," + " %d remaining" % (count, stackLen)) + + for _ in range(count): + self.endTag() + + def tag(self, qualifiedName, attributes={}): + self._possiblyFlushTag() + uniQualifiedName = self._unicodedFromString(qualifiedName) + namespace, name = _splitPossiblyQualifiedName("tag name", uniQualifiedName) + self._possiblyWriteTag(namespace, name, XmlWriter._CLOSE_AT_END, attributes) + + def text(self, text): + """ + Write ``text`` using escape sequences if needed. + + Using a writer like + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + + you can write some text: + + >>> xml.text(" & ") + >>> print out.getvalue().rstrip("\\r\\n") + <this> & <that> + + If ``text`` contains line feeds, the will be normalized to `newline()`: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + >>> xml.startTag("some") + >>> xml.text("a text\\nwith multiple lines\\n and indentation and trailing blanks ") + >>> xml.endTag() + >>> print out.getvalue().rstrip("\\r\\n") + + a text + with multiple lines + and indentation and trailing blanks + + + Empty text does not result in any output: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + >>> xml.startTag("some") + >>> xml.text("") + >>> xml.endTag() + >>> print out.getvalue().rstrip("\\r\\n") + + + """ + self._possiblyFlushTag() + _validateNotNone("text", text) + uniText = self._unicodedFromString(text) + if self._pretty: + for uniLine in io.StringIO(uniText): + self._writeIndent() + uniLine = uniLine.lstrip(" \t").rstrip(" \t\r\n") + self._writeEscaped(uniLine) + self.newline() + else: + self._writeEscaped(uniText) + + + def comment(self, text, embedInBlanks=True): + """ + Write an XML comment. + + As example set up a writer: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + + Now add the comment + + >>> xml.comment("some comment") + + And the result is: + + >>> print out.getvalue().rstrip("\\r\\n") + + + A comment can spawn multiple lines. If pretty is enabled, the lines + will be indented. Again, first set up a writer: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + + Then add the comment + + >>> xml.comment("some comment\\nspawning mutiple\\nlines") + + And the result is: + + >>> print out.getvalue().rstrip("\\r\\n") + + """ + self._possiblyFlushTag() + uniText = self._unicodedFromString(text) + if not embedInBlanks and not uniText: + raise XmlError("text for comment must not be empty, or option embedInBlanks=True must be set") + if "--" in uniText: + raise XmlError("text for comment must not contain \"--\"") + hasNewline = ("\n" in uniText) or ("\r" in uniText) + hasStartBlank = uniText and uniText[0].isspace() + hasEndBlank = (len(uniText) > 1) and uniText[-1].isspace() + self._writePrettyIndent() + self._write(""); + if self._pretty: + self.newline() + + + def cdata(self, text): + """ + Write a CDATA section. + + As example set up a writer: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + + Now add the CDATA section: + + >>> xml.cdata("some data\\nlines\\n&&&") + + And the result is: + + >>> print out.getvalue().rstrip("\\r\\n") + &&&]]> + """ + self._possiblyFlushTag() + self._rawBlock("CDATA section", XmlWriter._CDATA_START, XmlWriter._CDATA_END, text) + + def processingInstruction(self, target, text): + """ + Write a processing instruction. + + As example set up a writer: + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + + Now add the processing instruction: + + >>> xml.processingInstruction("xsl-stylesheet", "href=\\"some.xsl\\" type=\\"text/xml\\"") + + And the result is: + + >>> print out.getvalue().rstrip("\\r\\n") + + """ + self._possiblyFlushTag() + targetName = "target for processing instrution" + _validateNotNone(targetName, text) + _validateNotEmpty(targetName, text) + uniFullText = self._unicodedFromString(target) + if text: + uniFullText += " " + uniFullText += self._unicodedFromString(text) + self._rawBlock("processing instruction", XmlWriter._PROCESSING_START, XmlWriter._PROCESSING_END, uniFullText) + + def _rawBlock(self, name, start, end, text): + _assertIsUnicode("name", name) + _assertIsUnicode("start", start) + _assertIsUnicode("end", end) + _validateNotNone("text for %s" % name, text) + uniText = self._unicodedFromString(text) + if end in uniText: + raise XmlError("text for %s must not contain \"%s\"" % (name, end)) + self._writePrettyIndent() + self._write(start) + self._write(uniText) + self._write(end) + self._writePrettyNewline() + + def raw(self, text): + """ + Write raw ``text`` without escaping, validation and pretty printing. + + Using a writer like + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + + you can use ``raw`` for good and add for exmaple a doctype declaration: + + >>> xml.raw("") + >>> print out.getvalue().rstrip("\\r\\n") + + + but you can also do all sorts of evil things which can invalidate the XML document: + + >>> out = io.BytesIO() + >>> xml = XmlWriter(out, prolog=False) + >>> xml.raw(">(^_^)< not particular valid XML &&&") + >>> print out.getvalue().rstrip("\\r\\n") + >(^_^)< not particular valid XML &&& + """ + self._possiblyFlushTag() + _validateNotNone("text", text) + uniText = self._unicodedFromString(text) + self._write(uniText) + + def close(self): + """ + Close the writer, validate that all started elements have ended and + prevent further output. + + Using a writer like + + >>> import io + >>> out = io.BytesIO() + >>> xml = XmlWriter(out) + + you can write a tag without closing it: + + >>> xml.startTag("some") + + However, once you try to close the writer, you get: + + >>> xml.close() + Traceback (most recent call last): + ... + XmlError: missing end tags must be added: + """ + self._possiblyFlushTag() + remainingElements = "" + while self._elementStack: + if remainingElements: + remainingElements += ", " + namespace, name = self._elementStack.pop() + remainingElements += "" % self._elementName(name, namespace) + if remainingElements: + raise XmlError("missing end tags must be added: %s" % remainingElements) + + +class ChainXmlWriter(XmlWriter): + """ + XmlWriter-wrapper for method chaining, here is an example: + >>> import io + >>> out = io.BytesIO() + >>> xml = ChainXmlWriter(out) + >>> xml.addNamespace("xhtml", "http://www.w3.org/1999/xhtml") #doctest: +ELLIPSIS + + >>> xml.startTag("xhtml:html").startTag("xhtml:body") #doctest: +ELLIPSIS + + >>> xml.text("Hello world!").tag("xhtml:img", {"src": "smile.png", "alt": ":-)"}) #doctest: +ELLIPSIS + + >>> xml.endTags().close() + + And the result is: + + >>> print out.getvalue().rstrip("\\r\\n") + + + + Hello world! + + + + """ + + chainableMethods = ('addNamespace', 'cdata', 'comment', 'endTag', + 'endTags', 'processingInstruction', 'startTag', 'tag', + 'text',) + + def _chainDecorator(self, func): + def _wrapper(*args, **kwargs): + func(*args, **kwargs) + return self + return _wrapper + + def __getattribute__(self, name): + + if name in ChainXmlWriter.chainableMethods: + originalMethod = getattr(super(ChainXmlWriter, self), name) + return self._chainDecorator(originalMethod) + + return super(ChainXmlWriter, self).__getattribute__(name) + +if __name__ == "__main__": + import doctest + print("loxun %s: running doctest" % __version__) + doctest.testmod() + diff --git a/tablib/packages/odf/__init__.py b/tablib/packages/odf/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tablib/packages/odf/anim.py b/tablib/packages/odf/anim.py deleted file mode 100644 index 27dca36c..00000000 --- a/tablib/packages/odf/anim.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- 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/tablib/packages/odf/attrconverters.py b/tablib/packages/odf/attrconverters.py deleted file mode 100644 index b75f80a2..00000000 --- a/tablib/packages/odf/attrconverters.py +++ /dev/null @@ -1,1484 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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): - """ A RGB color in conformance with §5.9.11 of [XSL], that is a RGB color in notation “#rrggbb”, where - rr, gg and bb are 8-bit hexadecimal digits. - """ - 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): - """ A dateOrDateTime value is either an [xmlschema-2] date value or an [xmlschema-2] dateTime - value. - """ - return str(arg) - -def cnv_dateTime(attribute, arg, element): - """ A dateOrDateTime value is either an [xmlschema-2] date value or an [xmlschema-2] dateTime - value. - """ - 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): - """ A style family """ - 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 __save_prefix(attribute, arg, element): - prefix = arg.split(':',1)[0] - if prefix == arg: - return unicode(arg) - namespace = element.get_knownns(prefix) - if namespace is None: - #raise ValueError, "'%s' is an unknown prefix" % str(prefix) - return unicode(arg) - p = element.get_nsprefix(namespace) - return unicode(arg) - -def cnv_formula(attribute, arg, element): - """ A string containing a formula. Formulas do not have a predefined syntax, but the string should - begin with a namespace prefix, followed by a “:” (COLON, U+003A) separator, followed by the text - of the formula. The namespace bound to the prefix determines the syntax and semantics of the - formula. - """ - return __save_prefix(attribute, arg, element) - -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): - """ A (positive or negative) physical length, consisting of magnitude and unit, in conformance with the - Units of Measure defined in §5.9.13 of [XSL]. - """ - 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 __save_prefix(attribute, arg, element) - -def cnv_NCName(attribute, arg, element): - """ NCName is defined in http://www.w3.org/TR/REC-xml-names/#NT-NCName - Essentially an XML name minus ':' - """ - 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_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, -# ((DBNS,u'type'), None): cnv_namespacedToken, - ((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-divisor'), 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_formula, - ((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-id'), None): cnv_IDREF, - ((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_lengthorpercent, - ((DRAWNS,u'dots1'), None): cnv_integer, - ((DRAWNS,u'dots1-length'), None): cnv_lengthorpercent, - ((DRAWNS,u'dots2'), None): cnv_integer, - ((DRAWNS,u'dots2-length'), None): cnv_lengthorpercent, - ((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_namespacedToken, - ((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'nav-order'), None): cnv_IDREF, - ((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_namespacedToken, - ((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,'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'title'), None): cnv_string, - ((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-end-of-presentation-slide'), None): cnv_boolean, - ((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_formula, - ((SCRIPTNS,u'language'), None): cnv_formula, - ((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-charset-asian'), None): cnv_string, - ((STYLENS,u'font-charset-complex'), 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'), (STYLENS,u'tab-stop')): cnv_length, - ((STYLENS,u'position'), None): cnv_string, - ((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-threshold'), None): cnv_length, - ((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_formula, - ((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_formula, - ((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'), 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_formula, - ((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_formula, - ((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_formula, - ((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_formula, - ((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'paragraph-style-name'), None): cnv_StyleNameRef, - ((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-soft-page-breaks'), 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): - """ Based on the element, figures out how to check/convert the attribute value - All values are converted to string - """ - conversion = attrconverters.get((attribute, element.qname), 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/tablib/packages/odf/chart.py b/tablib/packages/odf/chart.py deleted file mode 100644 index cca83961..00000000 --- a/tablib/packages/odf/chart.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- 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/tablib/packages/odf/config.py b/tablib/packages/odf/config.py deleted file mode 100644 index f33f3613..00000000 --- a/tablib/packages/odf/config.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- 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/tablib/packages/odf/dc.py b/tablib/packages/odf/dc.py deleted file mode 100644 index 7c967768..00000000 --- a/tablib/packages/odf/dc.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- 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/tablib/packages/odf/dr3d.py b/tablib/packages/odf/dr3d.py deleted file mode 100644 index 324ae1cf..00000000 --- a/tablib/packages/odf/dr3d.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- 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/tablib/packages/odf/draw.py b/tablib/packages/odf/draw.py deleted file mode 100644 index 7692e5aa..00000000 --- a/tablib/packages/odf/draw.py +++ /dev/null @@ -1,182 +0,0 @@ -# -*- 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/tablib/packages/odf/easyliststyle.py b/tablib/packages/odf/easyliststyle.py deleted file mode 100644 index b2a54c21..00000000 --- a/tablib/packages/odf/easyliststyle.py +++ /dev/null @@ -1,103 +0,0 @@ -# -*- 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/tablib/packages/odf/element.py b/tablib/packages/odf/element.py deleted file mode 100644 index aad69804..00000000 --- a/tablib/packages/odf/element.py +++ /dev/null @@ -1,513 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright (C) 2007-2010 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. - """ - entities['\n']=' ' - entities['\r']=' ' - 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): - """ Inserts the node newChild before the existing child node refChild. - If refChild is null, insert newChild at the end of the list of children. - """ - 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, newChild): - """ Adds the node newChild to the end of the list of children of this node. - If the newChild is already in the tree, it is first removed. - """ - if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE: - for c in tuple(newChild.childNodes): - self.appendChild(c) - ### The DOM does not clearly specify what to return in this case - return newChild - if newChild.nodeType not in self._child_node_types: - raise IllegalChild, "<%s> is not allowed in %s" % ( newChild.tagName, self.tagName) - if newChild.parentNode is not None: - newChild.parentNode.removeChild(newChild) - _append_child(self, newChild) - newChild.nextSibling = None - return newChild - - def removeChild(self, oldChild): - """ Removes the child node indicated by oldChild from the list of children, and returns it. - """ - #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 - - def __str__(self): - val = [] - for c in self.childNodes: - val.append(str(c)) - return ''.join(val) - - def __unicode__(self): - val = [] - for c in self.childNodes: - val.append(unicode(c)) - return u''.join(val) - -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): - """ Raises an error """ - raise xml.dom.HierarchyRequestErr( - self.tagName + " nodes cannot have children") - - def hasChildNodes(self): - return False - - def insertBefore(self, newChild, refChild): - """ Raises an error """ - raise xml.dom.HierarchyRequestErr( - self.tagName + " nodes do not have children") - - def removeChild(self, oldChild): - """ Raises an error """ - raise xml.dom.NotFoundErr( - self.tagName + " nodes do not have children") - - def replaceChild(self, newChild, oldChild): - """ Raises an error """ - 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.encode() - - def __unicode__(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): - """ Generate XML output of the node. If the text contains "]]>", then - escape it by going out of CDATA mode (]]>), then write the string - and then go into CDATA mode again. (' % self.data.replace(']]>',']]>]]>" % (r[1].lower().replace('-',''), self.tagName) - - def get_knownns(self, prefix): - """ Odfpy maintains a list of known namespaces. In some cases a prefix is used, and - we need to know which namespace it resolves to. - """ - global nsdict - for ns,p in nsdict.items(): - if p == prefix: return ns - return None - - def get_nsprefix(self, namespace): - """ Odfpy maintains a list of known namespaces. In some cases we have a namespace URL, - and needs to look up or assign the prefix for it. - """ - if namespace is None: namespace = "" - prefix = _nsassign(namespace) - if not self.namespaces.has_key(namespace): - self.namespaces[namespace] = prefix - return prefix - - 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): - """ Adds text to an element - Setting check_grammar=False turns off grammar checking - """ - 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): - """ Adds CDATA to an element - Setting check_grammar=False turns off grammar checking - """ - 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 = self.get_nsprefix(namespace) -# 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[(namespace, localpart)] = c.convert((namespace, localpart), value, self) - - def getAttrNS(self, namespace, localpart): - prefix = self.get_nsprefix(namespace) - return self.attributes.get((namespace, localpart)) - - def removeAttrNS(self, namespace, localpart): - del self.attributes[(namespace, localpart)] - - def getAttribute(self, attr): - """ Get an attribute value. The method knows which namespace the attribute is in - """ - 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 qname in self.attributes.keys(): - prefix = self.get_nsprefix(qname[0]) - f.write(' '+_escape(str(prefix+':'+qname[1]))+'='+_quoteattr(unicode(self.attributes[qname]).encode('utf-8'))) - f.write('>') - - def write_close_tag(self, level, f): - f.write('') - - 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 qname in self.attributes.keys(): - prefix = self.get_nsprefix(qname[0]) - f.write(' '+_escape(str(prefix+':'+qname[1]))+'='+_quoteattr(unicode(self.attributes[qname]).encode('utf-8'))) - if self.childNodes: - f.write('>') - for element in self.childNodes: - element.toXml(level+1,f) - f.write('') - 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): - """ Gets elements based on the type, which is function from text.py, draw.py etc. """ - obj = element(check_grammar=False) - return self._getElementsByObj(obj,[]) - - def isInstanceOf(self, element): - """ This is a check to see if the object is an instance of a type """ - obj = element(check_grammar=False) - return self.qname == obj.qname - - diff --git a/tablib/packages/odf/elementtypes.py b/tablib/packages/odf/elementtypes.py deleted file mode 100644 index 7c19412e..00000000 --- a/tablib/packages/odf/elementtypes.py +++ /dev/null @@ -1,325 +0,0 @@ -#!/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'), -) - - -# 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/tablib/packages/odf/form.py b/tablib/packages/odf/form.py deleted file mode 100644 index 7969b840..00000000 --- a/tablib/packages/odf/form.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- 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/tablib/packages/odf/grammar.py b/tablib/packages/odf/grammar.py deleted file mode 100644 index d5d8d597..00000000 --- a/tablib/packages/odf/grammar.py +++ /dev/null @@ -1,8426 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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.1 -# OASIS Standard, 1 Feb 2007 -# Relax-NG Schema - -# $Id$ - -# © 2002-2007 OASIS Open -# © 1999-2007 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'), - ), -# allowed_children - (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'), - (SVGNS,u'title'), - (SVGNS,u'desc'), - ), - (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'), - (SVGNS,u'title'), - ), - (DRAWNS,u'area-polygon') : ( - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - ), - (DRAWNS,u'area-rectangle') : ( - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - ), - (DRAWNS,u'caption') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), - (DRAWNS,u'circle') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), -# allowed_children - (DRAWNS,u'connector') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), - (DRAWNS,u'contour-path') : ( - ), - (DRAWNS,u'contour-polygon') : ( - ), - (DRAWNS,u'control') : ( - (DRAWNS,u'glue-point'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - ), - (DRAWNS,u'custom-shape') : ( - (DRAWNS,u'enhanced-geometry'), - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), -# allowed_children - (DRAWNS,u'ellipse') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), - (DRAWNS,u'enhanced-geometry') : ( - (DRAWNS,u'equation'), - (DRAWNS,u'handle'), - ), - (DRAWNS,u'equation') : ( - ), -# allowed_children - (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'), - (SVGNS,u'title'), - ), -# allowed_children - (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'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (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') : ( - (SVGNS,u'desc'), - (SVGNS,u'title'), - ), - (DRAWNS,u'layer-set') : ( - (DRAWNS,u'layer'), - ), - (DRAWNS,u'line') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (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'), - (SVGNS,u'title'), - (SVGNS,u'desc'), - ), - (DRAWNS,u'object') : ( - (MATHNS,u'math'), - (OFFICENS,u'document'), - ), -# allowed_children - (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'), - ), -# allowed_children - (DRAWNS,u'page-thumbnail') : ( - (SVGNS,u'desc'), - (SVGNS,u'title'), - ), - (DRAWNS,u'param') : ( - ), - (DRAWNS,u'path') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), - (DRAWNS,u'plugin') : ( - (DRAWNS,u'param'), - ), - (DRAWNS,u'polygon') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'title'), - (SVGNS,u'desc'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), - (DRAWNS,u'polyline') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), -# allowed_children - (DRAWNS,u'rect') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (TEXTNS,u'list'), - (TEXTNS,u'p'), - ), - (DRAWNS,u'regular-polygon') : ( - (DRAWNS,u'glue-point'), - (OFFICENS,u'event-listeners'), - (SVGNS,u'desc'), - (SVGNS,u'title'), - (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'), - ), -# allowed_children - (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'), - ), -# allowed_children - (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'), - (OFFICENS,u'forms'), - ), - (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'tracked-changes'), - (TEXTNS,u'user-field-decls'), - (TEXTNS,u'user-index'), - (TEXTNS,u'variable-decls'), - ), -# allowed_children - (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'tracked-changes'), - (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'), - ), -# allowed_children - (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'tracked-changes'), - (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'tracked-changes'), - (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'), - ), -# allowed_children - (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'), - ), -# allowed_children - (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') : ( - ), - (SVGNS,u'title') : ( - ), - (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'), - ), -# allowed_children - (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'), - ), -# allowed_children - (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') : ( - ), -# allowed_children - (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'), - ), -# allowed_children - (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'), - ), -# allowed_children - (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'), - ), -# allowed_children - (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'), - ), -# allowed_children - (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'), - (TEXTNS,u'soft-page-break'), - ), - (TABLENS,u'table-rows') : ( - (TABLENS,u'table-row'), - (TEXTNS,u'soft-page-break'), - ), -# allowed_children - (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'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'), - ), -# allowed_children - (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'character-count') : ( - ), - (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'), - ), -# allowed_children - (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'), - ), - (TEXTNS,u'image-count') : ( - ), -# 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'soft-page-break'), - (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'soft-page-break'), - ), - (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'soft-page-break'), - (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-count') : ( - ), - (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'paragraph-count') : ( - ), - (TEXTNS,u'placeholder') : ( - ), - (TEXTNS,u'print-date') : ( - ), - (TEXTNS,u'print-time') : ( - ), - (TEXTNS,u'printed-by') : ( - ), - (TEXTNS,u'reference-mark') : ( - ), - (TEXTNS,u'reference-mark-end') : ( - ), -# allowed_children - (TEXTNS,u'reference-mark-start') : ( - ), - (TEXTNS,u'reference-ref') : ( - ), - (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'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'), - ), -# allowed_children - (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'soft-page-break'), - (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') : ( - ), -# allowed_children - (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'soft-page-break') : ( - ), - (TEXTNS,u'sort-key') : ( - ), -# allowed_children - (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'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'), - ), -# allowed_children - (TEXTNS,u'subject') : ( - ), - (TEXTNS,u'tab') : ( - ), - (TEXTNS,u'table-count') : ( - ), - (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') : ( - ), - (TEXTNS,u'word-count') : ( - ), -} - -# -# 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'), -# allows_text - (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'), - (SVGNS,u'title'), - (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'), -# allowed_children - (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'), -# allowed_children - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'id'), - (DRAWNS,u'escape-direction'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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'), - ), -# required_attributes - (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, -# allowed_attributes - (ANIMNS,u'animate'):( - (ANIMNS,u'formula'), - (ANIMNS,u'sub-item'), - (SMILNS,u'accelerate'), - (SMILNS,u'accumulate'), - (SMILNS,u'additive'), - (SMILNS,u'attributeName'), - (SMILNS,u'autoReverse'), - (SMILNS,u'begin'), - (SMILNS,u'by'), - (SMILNS,u'calcMode'), - (SMILNS,u'decelerate'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'fill'), - (SMILNS,u'fillDefault'), - (SMILNS,u'from'), - (SMILNS,u'keySplines'), - (SMILNS,u'keyTimes'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (SMILNS,u'restart'), - (SMILNS,u'restartDefault'), - (SMILNS,u'targetElement'), - (SMILNS,u'to'), - (SMILNS,u'values'), - ), -# allowed_attributes - (ANIMNS,u'animateColor'):( - (ANIMNS,u'color-interpolation'), - (ANIMNS,u'color-interpolation-direction'), - (ANIMNS,u'formula'), - (ANIMNS,u'sub-item'), - (SMILNS,u'accelerate'), - (SMILNS,u'accumulate'), - (SMILNS,u'additive'), - (SMILNS,u'attributeName'), - (SMILNS,u'autoReverse'), - (SMILNS,u'begin'), - (SMILNS,u'by'), - (SMILNS,u'calcMode'), - (SMILNS,u'decelerate'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'fill'), - (SMILNS,u'fillDefault'), - (SMILNS,u'from'), - (SMILNS,u'keySplines'), - (SMILNS,u'keyTimes'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (SMILNS,u'restart'), - (SMILNS,u'restartDefault'), - (SMILNS,u'targetElement'), - (SMILNS,u'to'), - (SMILNS,u'values'), - ), -# allowed_attributes - (ANIMNS,u'animateMotion'):( - (ANIMNS,u'formula'), - (ANIMNS,u'sub-item'), - (SMILNS,u'accelerate'), - (SMILNS,u'accumulate'), - (SMILNS,u'additive'), - (SMILNS,u'attributeName'), - (SMILNS,u'autoReverse'), - (SMILNS,u'begin'), - (SMILNS,u'by'), - (SMILNS,u'calcMode'), - (SMILNS,u'decelerate'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'fill'), - (SMILNS,u'fillDefault'), - (SMILNS,u'from'), - (SMILNS,u'keySplines'), - (SMILNS,u'keyTimes'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (SMILNS,u'restart'), - (SMILNS,u'restartDefault'), - (SMILNS,u'targetElement'), - (SMILNS,u'to'), - (SMILNS,u'values'), - (SVGNS,u'origin'), - (SVGNS,u'path'), - ), -# allowed_attributes - (ANIMNS,u'animateTransform'):( - (ANIMNS,u'formula'), - (ANIMNS,u'sub-item'), - (SMILNS,u'accelerate'), - (SMILNS,u'accumulate'), - (SMILNS,u'additive'), - (SMILNS,u'attributeName'), - (SMILNS,u'autoReverse'), - (SMILNS,u'begin'), - (SMILNS,u'by'), - (SMILNS,u'decelerate'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'fill'), - (SMILNS,u'fillDefault'), - (SMILNS,u'from'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (SMILNS,u'restart'), - (SMILNS,u'restartDefault'), - (SMILNS,u'targetElement'), - (SMILNS,u'to'), - (SMILNS,u'values'), - (SVGNS,u'type'), - ), -# allowed_attributes - (ANIMNS,u'audio'):( - (ANIMNS,u'audio-level'), - (ANIMNS,u'id'), - (PRESENTATIONNS,u'group-id'), - (PRESENTATIONNS,u'master-element'), - (PRESENTATIONNS,u'node-type'), - (PRESENTATIONNS,u'preset-class'), - (PRESENTATIONNS,u'preset-id'), - (PRESENTATIONNS,u'preset-sub-type'), - (SMILNS,u'begin'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (XLINKNS,u'href'), - ), - (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'), - ), -# allowed_attributes - (ANIMNS,u'iterate'):( - (ANIMNS,u'id'), - (ANIMNS,u'iterate-interval'), - (ANIMNS,u'iterate-type'), - (ANIMNS,u'sub-item'), - (PRESENTATIONNS,u'group-id'), - (PRESENTATIONNS,u'master-element'), - (PRESENTATIONNS,u'node-type'), - (PRESENTATIONNS,u'preset-class'), - (PRESENTATIONNS,u'preset-id'), - (PRESENTATIONNS,u'preset-sub-type'), - (SMILNS,u'accelerate'), - (SMILNS,u'autoReverse'), - (SMILNS,u'begin'), - (SMILNS,u'decelerate'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'endsync'), - (SMILNS,u'fill'), - (SMILNS,u'fillDefault'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (SMILNS,u'restart'), - (SMILNS,u'restartDefault'), - (SMILNS,u'targetElement'), - ), - (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'), - ), -# allowed_attributes - (ANIMNS,u'param'):( - (ANIMNS,u'name'), - (ANIMNS,u'value'), - ), - (ANIMNS,u'seq'):( - (ANIMNS,u'id'), - (PRESENTATIONNS,u'group-id'), - (PRESENTATIONNS,u'master-element'), - (PRESENTATIONNS,u'node-type'), - (PRESENTATIONNS,u'preset-class'), - (PRESENTATIONNS,u'preset-id'), - (PRESENTATIONNS,u'preset-sub-type'), - (SMILNS,u'accelerate'), - (SMILNS,u'autoReverse'), - (SMILNS,u'begin'), - (SMILNS,u'decelerate'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'endsync'), - (SMILNS,u'fill'), - (SMILNS,u'fillDefault'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (SMILNS,u'restart'), - (SMILNS,u'restartDefault'), - ), - (ANIMNS,u'set'):( - (ANIMNS,u'sub-item'), - (SMILNS,u'accelerate'), - (SMILNS,u'accumulate'), - (SMILNS,u'autoReverse'), - (SMILNS,u'additive'), - (SMILNS,u'attributeName'), - (SMILNS,u'begin'), - (SMILNS,u'decelerate'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'fill'), - (SMILNS,u'fillDefault'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (SMILNS,u'restart'), - (SMILNS,u'restartDefault'), - (SMILNS,u'targetElement'), - (SMILNS,u'to'), - - ), -# allowed_attributes - (ANIMNS,u'transitionFilter'):( - (ANIMNS,u'formula'), - (ANIMNS,u'sub-item'), - (SMILNS,u'accelerate'), - (SMILNS,u'accumulate'), - (SMILNS,u'additive'), - (SMILNS,u'autoReverse'), - (SMILNS,u'begin'), - (SMILNS,u'by'), - (SMILNS,u'calcMode'), - (SMILNS,u'decelerate'), - (SMILNS,u'direction'), - (SMILNS,u'dur'), - (SMILNS,u'end'), - (SMILNS,u'fadeColor'), - (SMILNS,u'fill'), - (SMILNS,u'fillDefault'), - (SMILNS,u'from'), - (SMILNS,u'mode'), - (SMILNS,u'repeatCount'), - (SMILNS,u'repeatDur'), - (SMILNS,u'restart'), - (SMILNS,u'restartDefault'), - (SMILNS,u'subtype'), - (SMILNS,u'targetElement'), - (SMILNS,u'to'), - (SMILNS,u'type'), - (SMILNS,u'values'), - - ), -# 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'), - ), -# allowed_attributes - (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'), - (STYLENS,u'display-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'), - (STYLENS,u'display-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'), - ), -# allowed_attributes - (NUMBERNS,u'date-style'):( - (NUMBERNS,u'transliteration-language'), - (STYLENS,u'name'), - (STYLENS,u'display-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'), - ), -# allowed_attributes - (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'), - (STYLENS,u'display-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'), - (STYLENS,u'display-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'), - (STYLENS,u'display-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'), - (STYLENS,u'display-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'caption-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'), - (OFFICENS,u'title'), - (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'), - (DRAWNS,u'caption-id'), - (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'caption-id'), - (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'caption-id'), - (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'), - (DRAWNS,u'caption-id'), - (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'caption-id'), - (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'), - (DRAWNS,u'caption-id'), - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'caption-id'), - (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'), - ), -# allowed_attributes - (DRAWNS,u'g'):( - (DRAWNS,u'id'), - (DRAWNS,u'caption-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'escape-direction'), - ), - (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'), - ), -# allowed_attributes - (DRAWNS,u'layer-set'):( - ), - (DRAWNS,u'line'):( - (DRAWNS,u'class-names'), - (DRAWNS,u'id'), - (DRAWNS,u'caption-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'), - (DRAWNS,u'caption-id'), - (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'), - (DRAWNS,u'nav-order'), - (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'), - (DRAWNS,u'caption-id'), - (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'), - ), -# allowed_attributes - (DRAWNS,u'path'):( - (TABLENS,u'table-background'), - (DRAWNS,u'layer'), - (TABLENS,u'end-cell-address'), - (DRAWNS,u'caption-id'), - (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'):( - (DRAWNS,u'caption-id'), - (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'), - ), -# allowed_attributes - (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'caption-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'caption-id'), - (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'caption-id'), - (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'), - (TEXTNS,u'id'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), - (MANIFESTNS,u'manifest'):( - ), -# 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'):( - ), -# allowed_attributes - (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'):( - ), -# allowed_attributes - (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'), - (TEXTNS,u'use-soft-page-breaks'), - ), - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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-divisor'), - (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-name'), - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'footer-left'):( - (STYLENS,u'display'), - ), - (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'), - (STYLENS,u'writing-mode'), - (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'), - ), -# allowed_attributes - (STYLENS,u'header'):( - (STYLENS,u'display'), - ), - (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'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'), - (SVGNS,u'y'), - (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'), - ), -# allowed_attributes - (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'num-format'), - (STYLENS,u'num-letter-sync'), - (STYLENS,u'num-prefix'), - (STYLENS,u'num-suffix'), - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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-charset-asian'), - (STYLENS,u'font-charset-complex'), - (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'), - ), -# allowed_attributes - (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'), - ), - (SVGNS,u'title'):( - ), -# allowed_attributes - (TABLENS,u'body'):( - (TEXTNS,u'paragraph-style-name'), - (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'):( - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'paragraph-style-name'), - (TEXTNS,u'style-name'), - ), - (TABLENS,u'even-rows'):( - (TEXTNS,u'paragraph-style-name'), - (TEXTNS,u'style-name'), - ), -# allowed_attributes - (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'paragraph-style-name'), - (TEXTNS,u'style-name'), - ), - (TABLENS,u'first-row'):( - (TEXTNS,u'paragraph-style-name'), - (TEXTNS,u'style-name'), - ), -# allowed_attributes - (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'paragraph-style-name'), - (TEXTNS,u'style-name'), - ), - (TABLENS,u'last-row'):( - (TEXTNS,u'paragraph-style-name'), - (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'), - (TABLENS,u'value-type'), - ), - (TABLENS,u'odd-columns'):( - (TEXTNS,u'paragraph-style-name'), - (TEXTNS,u'style-name'), - ), - (TABLENS,u'odd-rows'):( - (TEXTNS,u'paragraph-style-name'), - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - (OFFICENS,u'title'), - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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'soft-page-break'):( - ), - (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'), - ), -# allowed_attributes - (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'), - ), -# allowed_attributes - (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/tablib/packages/odf/load.py b/tablib/packages/odf/load.py deleted file mode 100644 index e48fcaa4..00000000 --- a/tablib/packages/odf/load.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/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 -from cStringIO 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) - if len(content.strip()) > 0: - self.parent.addText(content, check_grammar=False) - 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, check_grammar=False) - self.data = [] - self.curr = self.curr.parentNode - self.parent = self.curr - if tag in self.triggers: - self.parse = False diff --git a/tablib/packages/odf/manifest.py b/tablib/packages/odf/manifest.py deleted file mode 100644 index de59048b..00000000 --- a/tablib/packages/odf/manifest.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/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) - diff --git a/tablib/packages/odf/math.py b/tablib/packages/odf/math.py deleted file mode 100644 index 5dc38dfa..00000000 --- a/tablib/packages/odf/math.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- 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/tablib/packages/odf/meta.py b/tablib/packages/odf/meta.py deleted file mode 100644 index dc031811..00000000 --- a/tablib/packages/odf/meta.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- 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/tablib/packages/odf/namespaces.py b/tablib/packages/odf/namespaces.py deleted file mode 100644 index 95046b45..00000000 --- a/tablib/packages/odf/namespaces.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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.9.3" - -ANIMNS = u"urn:oasis:names:tc:opendocument:xmlns:animation:1.0" -DBNS = u"urn:oasis:names:tc:opendocument:xmlns:database: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" -FIELDNS = u"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field: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" -GRDDLNS = u"http://www.w3.org/2003/g/data-view#" -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" -OFNS = u"urn:oasis:names:tc:opendocument:xmlns:of:1.2" -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" -RDFANS = u"http://docs.oasis-open.org/opendocument/meta/rdfa#" -RPTNS = u"http://openoffice.org/2005/report" -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" -XMLNS = u"http://www.w3.org/XML/1998/namespace" -XSDNS = u"http://www.w3.org/2001/XMLSchema" -XSINS = u"http://www.w3.org/2001/XMLSchema-instance" - -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', - FIELDNS: u'field', - FONS: u'fo', - FORMNS: u'form', - GRDDLNS: u'grddl', - KOFFICENS: u'koffice', - MANIFESTNS: u'manifest', - MATHNS: u'math', - METANS: u'meta', - NUMBERNS: u'number', - OFFICENS: u'office', - OFNS: u'of', - OOONS: u'ooo', - OOOWNS: u'ooow', - OOOCNS: u'oooc', - PRESENTATIONNS: u'presentation', - RDFANS: u'rdfa', - RPTNS: u'rpt', - SCRIPTNS: u'script', - SMILNS: u'smil', - STYLENS: u'style', - SVGNS: u'svg', - TABLENS: u'table', - TEXTNS: u'text', - XFORMSNS: u'xforms', - XLINKNS: u'xlink', - XMLNS: u'xml', - XSDNS: u'xsd', - XSINS: u'xsi', -} diff --git a/tablib/packages/odf/number.py b/tablib/packages/odf/number.py deleted file mode 100644 index 12d81cba..00000000 --- a/tablib/packages/odf/number.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- 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/tablib/packages/odf/odf2moinmoin.py b/tablib/packages/odf/odf2moinmoin.py deleted file mode 100644 index 167fcdac..00000000 --- a/tablib/packages/odf/odf2moinmoin.py +++ /dev/null @@ -1,579 +0,0 @@ -# -*- 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/tablib/packages/odf/odf2xhtml.py b/tablib/packages/odf/odf2xhtml.py deleted file mode 100644 index 4bf4553f..00000000 --- a/tablib/packages/odf/odf2xhtml.py +++ /dev/null @@ -1,1582 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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() -from xml.sax import handler -from xml.sax.saxutils import escape, quoteattr -from xml.dom import Node - -from opendocument import load - -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, generate_css=True, embedable=False): - # Tags - self.generate_css = generate_css - 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_creator), - (DCNS, 'description'): (self.s_processcont, self.e_dc_metatag), - (DCNS, 'date'): (self.s_processcont, self.e_dc_metatag), - (DRAWNS, 'custom-shape'): (self.s_custom_shape, self.e_custom_shape), - (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, 'object'): (self.s_draw_object, None), - (DRAWNS, 'object-ole'): (self.s_draw_object_ole, None), - (DRAWNS, 'page'): (self.s_draw_page, self.e_draw_page), - (DRAWNS, 'text-box'): (self.s_draw_textbox, self.e_draw_textbox), - (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, "annotation"):(self.s_ignorexml, None), - (OFFICENS, "automatic-styles"):(self.s_office_automatic_styles, None), - (OFFICENS, "document"):(self.s_office_document_content, self.e_office_document_content), - (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), - (OFFICENS, "settings"):(self.s_ignorexml, None), - (PRESENTATIONNS, "notes"):(self.s_ignorexml, None), -# (STYLENS, "default-page-layout"):(self.s_style_default_page_layout, self.e_style_page_layout), - (STYLENS, "default-page-layout"):(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, 'bookmark'): (self.s_text_bookmark, None), - (TEXTNS, 'bookmark-start'): (self.s_text_bookmark, None), - (TEXTNS, 'bookmark-ref'): (self.s_text_bookmark_ref, self.e_text_a), - (TEXTNS, 'bookmark-ref-start'): (self.s_text_bookmark_ref, None), - (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), - } - if embedable: - self.make_embedable() - self._resetobject() - - def set_plain(self): - """ Tell the parser to not generate CSS """ - self.generate_css = False - - def set_embedable(self): - """ Tells the converter to only output the parts inside the """ - self.elements[(OFFICENS, u"text")] = (None,None) - self.elements[(OFFICENS, u"spreadsheet")] = (None,None) - self.elements[(OFFICENS, u"presentation")] = (None,None) - self.elements[(OFFICENS, u"document-content")] = (None,None) - - - def add_style_file(self, stylefilename, media=None): - """ Add a link to an external style file. - Also turns of the embedding of styles in the HTML - """ - self.use_internal_css = False - self.stylefilename = stylefilename - if media: - self.metatags.append('\n' % (stylefilename,media)) - else: - self.metatags.append('\n' % (stylefilename)) - - def _resetfootnotes(self): - # Footnotes and endnotes - self.notedict = {} - self.currentnote = 0 - self.notebody = '' - - def _resetobject(self): - self.lines = [] - self._wfunc = self._wlines - self.xmlfile = '' - self.title = '' - self.language = '' - self.creator = '' - self.data = [] - self.tagstack = TagStack() - self.htmlstack = [] - self.pstack = [] - self.processelem = True - self.processcont = True - self.listtypes = {} - self.headinglevels = [0, 0,0,0,0,0, 0,0,0,0,0] # level 0 to 10 - self.use_internal_css = True - self.cs = StyleToCSS() - self.anchors = {} - - # Style declarations - self.stylestack = [] - self.styledict = {} - self.currentstyle = None - - self._resetfootnotes() - - # Tags from meta.xml - self.metatags = [] - - - 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 """ - self.htmlstack.append((tag,attrs,block)) - 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): - """ Close an open HTML tag """ - self.htmlstack.pop() - self.writeout("" % 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))) - -#-------------------------------------------------- -# Interface to parser -#-------------------------------------------------- - def characters(self, data): - if self.processelem and self.processcont: - self.data.append(data) - - 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 handle_starttag(self, tag, method, attrs): - method(tag,attrs) - - def handle_endtag(self, tag, attrs, method): - method(tag, attrs) - - 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): - """ Stop processing the text nodes """ - self.processcont = False - - def s_processcont(self, tag, attrs): - """ Start processing the text nodes """ - self.processcont = True - - def classname(self, attrs): - """ Generate a class name from a style name """ - c = attrs.get((TEXTNS,'style-name'),'') - c = c.replace(".","_") - return c - - def get_anchor(self, name): - """ Create a unique anchor id for a href 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.title = ''.join(self.data) - #self.metatags.append('<title>%s\n' % escape(self.title)) - 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.language = ''.join(self.data) - self.metatags.append('\n' % escape(self.language)) - self.data = [] - - def e_dc_creator(self, tag, attrs): - """ Set the content creator. Identifies the targeted audience - """ - self.creator = ''.join(self.data) - self.metatags.append('\n' % escape(self.creator)) - self.data = [] - - def s_custom_shape(self, tag, attrs): - """ A is made into a
in HTML which is then styled - """ - anchor_type = attrs.get((TEXTNS,'anchor-type'),'notfound') - htmltag = 'div' - 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 = 'position:absolute;' - elif anchor_type == 'char': - style = "position:absolute;" - elif anchor_type == 'as-char': - htmltag = 'div' - style = '' - 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")] + ";" - if self.generate_css: - self.opentag(htmltag, {'class': name, 'style': style}) - else: - self.opentag(htmltag) - - def e_custom_shape(self, tag, attrs): - """ End the - """ - self.closetag('div') - - 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'),'notfound') - htmltag = 'div' - 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 = 'position:relative;' - elif anchor_type == 'char': - style = "position:relative;" - elif anchor_type == 'as-char': - htmltag = 'div' - style = '' - 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")] + ";" - if self.generate_css: - self.opentag(htmltag, {'class': name, 'style': style}) - else: - self.opentag(htmltag) - - 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 self.generate_css: - if anchor_type != "char": - htmlattrs['style'] = "display: block;" - self.emptytag('img', htmlattrs) - - def s_draw_object(self, tag, attrs): - """ A is embedded object in the document (e.g. spreadsheet in presentation). - """ - objhref = attrs[(XLINKNS,"href")] - # Remove leading "./": from "./Object 1" to "Object 1" -# objhref = objhref [2:] - - # Not using os.path.join since it fails to find the file on Windows. -# objcontentpath = '/'.join([objhref, 'content.xml']) - - for c in self.document.childnodes: - if c.folder == objhref: - self._walknode(c.topnode) - - def s_draw_object_ole(self, tag, attrs): - """ A is embedded OLE object in the document (e.g. MS Graph). - """ - class_id = attrs[(DRAWNS,"class-id")] - if class_id and class_id.lower() == "00020803-0000-0000-c000-000000000046": ## Microsoft Graph 97 Chart - tagattrs = { 'name':'object_ole_graph', 'class':'ole-graph' } - self.opentag('a', tagattrs) - self.closetag('a', tagattrs) - - def s_draw_page(self, tag, attrs): - """ A is a slide in a presentation. We use a
element in HTML. - Therefore if you convert a ODP file, you get a series of
s. - Override this for your own purpose. - """ - name = attrs.get( (DRAWNS,'name'), "NoName") - stylename = attrs.get( (DRAWNS,'style-name'), "") - stylename = stylename.replace(".","_") - masterpage = attrs.get( (DRAWNS,'master-page-name'),"") - masterpage = masterpage.replace(".","_") - if self.generate_css: - self.opentag('fieldset', {'class':"DP-%s MP-%s" % (stylename, masterpage) }) - else: - self.opentag('fieldset') - self.opentag('legend') - self.writeout(escape(name)) - self.closetag('legend') - - def e_draw_page(self, tag, attrs): - self.closetag('fieldset') - - def s_draw_textbox(self, tag, attrs): - style = '' - if attrs.has_key( (FONS,"min-height") ): - style = style + "min-height:" + attrs[(FONS,"min-height")] + ";" - self.opentag('div') -# self.opentag('div', {'style': style}) - - def e_draw_textbox(self, tag, attrs): - """ End the - """ - self.closetag('div') - - def html_body(self, tag, attrs): - self.writedata() - if self.generate_css and self.use_internal_css: - self.opentag('style', {'type':"text/css"}, True) - self.writeout('/**/\n') - self.closetag('style') - self.purgedata() - self.closetag('head') - self.opentag('body', block=True) - - default_styles = """ -img { width: 100%; height: 100%; } -* { padding: 0; margin: 0; background-color:white; } -body { margin: 0 1em; } -ol, ul { padding-left: 2em; } -""" - - def generate_stylesheet(self): - for name in self.stylestack: - styles = self.styledict.get(name) - # Preload with the family's default style - if styles.has_key('__style-family') and self.styledict.has_key(styles['__style-family']): - familystyle = self.styledict[styles['__style-family']].copy() - del styles['__style-family'] - for style, val in styles.items(): - familystyle[style] = val - styles = familystyle - # Resolve the remaining parent styles - while styles.has_key('__parent-style-name') and self.styledict.has_key(styles['__parent-style-name']): - parentstyle = self.styledict[styles['__parent-style-name']].copy() - del styles['__parent-style-name'] - for style, val in styles.items(): - parentstyle[style] = val - styles = parentstyle - self.styledict[name] = styles - # Write the styles to HTML - self.writeout(self.default_styles) - for name in self.stylestack: - styles = self.styledict.get(name) - css2 = self.cs.convert_styles(styles) - self.writeout("%s {\n" % name) - for style, val in css2.items(): - self.writeout("\t%s: %s;\n" % (style, val) ) - self.writeout("}\n") - - def generate_footnotes(self): - if self.currentnote == 0: - return - if self.generate_css: - self.opentag('ol', {'style':'border-top: 1px solid black'}, True) - else: - self.opentag('ol') - for key in range(1,self.currentnote+1): - note = self.notedict[key] -# for key,note in self.notedict.items(): - self.opentag('li', { 'id':"footnote-%d" % key }) -# self.opentag('sup') -# self.writeout(escape(note['citation'])) -# self.closetag('sup', False) - self.writeout(note['body']) - self.closetag('li') - self.closetag('ol') - - def s_office_automatic_styles(self, tag, attrs): - if self.xmlfile == 'styles.xml': - self.autoprefix = "A" - else: - self.autoprefix = "" - - def s_office_document_content(self, tag, attrs): - """ First tag in the content.xml file""" - self.writeout('\n') - self.opentag('html', {'xmlns':"http://www.w3.org/1999/xhtml"}, True) - self.opentag('head', block=True) - self.emptytag('meta', { 'http-equiv':"Content-Type", 'content':"text/html;charset=UTF-8"}) - for metaline in self.metatags: - self.writeout(metaline) - self.writeout('%s\n' % escape(self.title)) - - def e_office_document_content(self, tag, attrs): - """ Last tag """ - self.closetag('html') - - def s_office_master_styles(self, tag, attrs): - """ """ - - def s_office_presentation(self, tag, attrs): - """ For some odd reason, OpenOffice Impress doesn't define a default-style - for the 'paragraph'. We therefore force a standard when we see - it is a presentation - """ - self.styledict['p'] = {(FONS,u'font-size'): u"24pt" } - self.styledict['presentation'] = {(FONS,u'font-size'): u"24pt" } - self.html_body(tag, attrs) - - def e_office_presentation(self, tag, attrs): - self.generate_footnotes() - self.closetag('body') - - def s_office_spreadsheet(self, tag, attrs): - self.html_body(tag, attrs) - - def e_office_spreadsheet(self, tag, attrs): - self.generate_footnotes() - self.closetag('body') - - def s_office_styles(self, tag, attrs): - self.autoprefix = "" - - def s_office_text(self, tag, attrs): - """ OpenDocument text """ - self.styledict['frame'] = { (STYLENS,'wrap'): u'parallel'} - self.html_body(tag, attrs) - - def e_office_text(self, tag, attrs): - self.generate_footnotes() - self.closetag('body') - - def s_style_handle_properties(self, tag, attrs): - """ Copy all attributes to a struct. - We will later convert them to CSS2 - """ - for key,attr in attrs.items(): - self.styledict[self.currentstyle][key] = attr - - - familymap = {'frame':'frame', 'paragraph':'p', 'presentation':'presentation', - 'text':'span','section':'div', - 'table':'table','table-cell':'td','table-column':'col', - 'table-row':'tr','graphic':'graphic' } - - def s_style_default_style(self, tag, attrs): - """ A default style is like a style on an HTML tag - """ - family = attrs[(STYLENS,'family')] - htmlfamily = self.familymap.get(family,'unknown') - self.currentstyle = htmlfamily -# self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def e_style_default_style(self, tag, attrs): - self.currentstyle = None - - def s_style_font_face(self, tag, attrs): - """ It is possible that the HTML browser doesn't know how to - show a particular font. Luckily 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 - """ - name = attrs[(STYLENS,"name")] - family = attrs[(SVGNS,"font-family")] - generic = attrs.get( (STYLENS,'font-family-generic'),"" ) - self.cs.save_font(name, family, generic) - - def s_style_footer(self, tag, attrs): - self.opentag('div', { 'id':"footer" }) - self.purgedata() - - def e_style_footer(self, tag, attrs): - self.writedata() - self.closetag('div') - self.purgedata() - - def s_style_footer_style(self, tag, attrs): - self.currentstyle = "@print #footer" - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def s_style_header(self, tag, attrs): - self.opentag('div', { 'id':"header" }) - self.purgedata() - - def e_style_header(self, tag, attrs): - self.writedata() - self.closetag('div') - self.purgedata() - - def s_style_header_style(self, tag, attrs): - self.currentstyle = "@print #header" - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def s_style_default_page_layout(self, tag, attrs): - """ Collect the formatting for the default page layout style. - """ - self.currentstyle = "@page" - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def s_style_page_layout(self, tag, attrs): - """ Collect the formatting for the page layout style. - This won't work in CSS 2.1, as page identifiers are not allowed. - It is legal in CSS3, but the rest of the application doesn't specify when to use what page layout - """ - name = attrs[(STYLENS,'name')] - name = name.replace(".","_") - self.currentstyle = ".PL-" + name - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def e_style_page_layout(self, tag, attrs): - """ End this style - """ - self.currentstyle = None - - def s_style_master_page(self, tag, attrs): - """ Collect the formatting for the page layout style. - """ - name = attrs[(STYLENS,'name')] - name = name.replace(".","_") - - self.currentstyle = ".MP-" + name - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {('','position'):'relative'} - # Then load the pagelayout style if we find it - pagelayout = attrs.get( (STYLENS,'page-layout-name'), None) - if pagelayout: - pagelayout = ".PL-" + pagelayout - if self.styledict.has_key( pagelayout ): - styles = self.styledict[pagelayout] - for style, val in styles.items(): - self.styledict[self.currentstyle][style] = val - else: - self.styledict[self.currentstyle]['__parent-style-name'] = pagelayout - self.s_ignorexml(tag, attrs) - - # Short prefixes for class selectors - _familyshort = {'drawing-page':'DP', 'paragraph':'P', 'presentation':'PR', - 'text':'S', 'section':'D', - 'table':'T', 'table-cell':'TD', 'table-column':'TC', - 'table-row':'TR', 'graphic':'G' } - - def s_style_style(self, tag, attrs): - """ Collect the formatting for the style. - Styles have scope. The same name can be used for both paragraph and - character styles Since CSS has no scope we use a prefix. (Not elegant) - In ODF a style can have a parent, these parents can be chained. - We may not have encountered the parent yet, but if we have, we resolve it. - """ - name = attrs[(STYLENS,'name')] - name = name.replace(".","_") - family = attrs[(STYLENS,'family')] - htmlfamily = self.familymap.get(family,'unknown') - sfamily = self._familyshort.get(family,'X') - name = "%s%s-%s" % (self.autoprefix, sfamily, name) - parent = attrs.get( (STYLENS,'parent-style-name') ) - self.currentstyle = special_styles.get(name,"."+name) - self.stylestack.append(self.currentstyle) - if not self.styledict.has_key(self.currentstyle): - self.styledict[self.currentstyle] = {} - - self.styledict[self.currentstyle]['__style-family'] = htmlfamily - - # Then load the parent style if we find it - if parent: - parent = "%s-%s" % (sfamily, parent) - parent = special_styles.get(parent, "."+parent) - if self.styledict.has_key( parent ): - styles = self.styledict[parent] - for style, val in styles.items(): - self.styledict[self.currentstyle][style] = val - else: - self.styledict[self.currentstyle]['__parent-style-name'] = parent - - def e_style_style(self, tag, attrs): - """ End this style - """ - self.currentstyle = None - - def s_table_table(self, tag, attrs): - """ Start a table - """ - c = attrs.get( (TABLENS,'style-name'), None) - if c and self.generate_css: - c = c.replace(".","_") - self.opentag('table',{ 'class': "T-%s" % c }) - else: - self.opentag('table') - self.purgedata() - - def e_table_table(self, tag, attrs): - """ End a table - """ - self.writedata() - self.closetag('table') - self.purgedata() - - def s_table_table_cell(self, tag, attrs): - """ Start a table cell """ - #FIXME: number-columns-repeated § 8.1.3 - #repeated = int(attrs.get( (TABLENS,'number-columns-repeated'), 1)) - htmlattrs = {} - rowspan = attrs.get( (TABLENS,'number-rows-spanned') ) - if rowspan: - htmlattrs['rowspan'] = rowspan - colspan = attrs.get( (TABLENS,'number-columns-spanned') ) - if colspan: - htmlattrs['colspan'] = colspan - - c = attrs.get( (TABLENS,'style-name') ) - if c: - htmlattrs['class'] = 'TD-%s' % c.replace(".","_") - self.opentag('td', htmlattrs) - self.purgedata() - - def e_table_table_cell(self, tag, attrs): - """ End a table cell """ - self.writedata() - self.closetag('td') - self.purgedata() - - def s_table_table_column(self, tag, attrs): - """ Start a table column """ - c = attrs.get( (TABLENS,'style-name'), None) - repeated = int(attrs.get( (TABLENS,'number-columns-repeated'), 1)) - htmlattrs = {} - if c: - htmlattrs['class'] = "TC-%s" % c.replace(".","_") - for x in xrange(repeated): - self.emptytag('col', htmlattrs) - self.purgedata() - - def s_table_table_row(self, tag, attrs): - """ Start a table row """ - #FIXME: table:number-rows-repeated - c = attrs.get( (TABLENS,'style-name'), None) - htmlattrs = {} - if c: - htmlattrs['class'] = "TR-%s" % c.replace(".","_") - self.opentag('tr', htmlattrs) - self.purgedata() - - def e_table_table_row(self, tag, attrs): - """ End a table row """ - self.writedata() - self.closetag('tr') - self.purgedata() - - def s_text_a(self, tag, attrs): - """ Anchors start """ - self.writedata() - href = attrs[(XLINKNS,"href")].split("|")[0] - if href[0] == "#": - href = "#" + self.get_anchor(href[1:]) - self.opentag('a', {'href':href}) - self.purgedata() - - def e_text_a(self, tag, attrs): - """ End an anchor or bookmark reference """ - self.writedata() - self.closetag('a', False) - self.purgedata() - - def s_text_bookmark(self, tag, attrs): - """ Bookmark definition """ - name = attrs[(TEXTNS,'name')] - html_id = self.get_anchor(name) - self.writedata() - self.opentag('span', {'id':html_id}) - self.closetag('span', False) - self.purgedata() - - def s_text_bookmark_ref(self, tag, attrs): - """ Bookmark reference """ - name = attrs[(TEXTNS,'ref-name')] - html_id = "#" + self.get_anchor(name) - self.writedata() - self.opentag('a', {'href':html_id}) - self.purgedata() - - def s_text_h(self, tag, attrs): - """ Headings start """ - level = int(attrs[(TEXTNS,'outline-level')]) - if level > 6: level = 6 # Heading levels go only to 6 in XHTML - if level < 1: level = 1 - self.headinglevels[level] = self.headinglevels[level] + 1 - name = self.classname(attrs) - for x in range(level + 1,10): - self.headinglevels[x] = 0 - special = special_styles.get("P-"+name) - if special or not self.generate_css: - self.opentag('h%s' % level) - else: - self.opentag('h%s' % level, {'class':"P-%s" % name }) - self.purgedata() - - def e_text_h(self, tag, attrs): - """ Headings end - Side-effect: If there is no title in the metadata, then it is taken - from the first heading of any level. - """ - self.writedata() - level = int(attrs[(TEXTNS,'outline-level')]) - if level > 6: level = 6 # Heading levels go only to 6 in XHTML - if level < 1: level = 1 - lev = self.headinglevels[1:level+1] - outline = '.'.join(map(str,lev) ) - heading = ''.join(self.data) - if self.title == '': self.title = heading - anchor = self.get_anchor("%s.%s" % ( outline, heading)) - self.opentag('a', {'id': anchor} ) - self.closetag('a', False) - self.closetag('h%s' % level) - self.purgedata() - - def s_text_line_break(self, tag, attrs): - """ Force a line break (
) """ - self.writedata() - self.emptytag('br') - self.purgedata() - - def s_text_list(self, tag, attrs): - """ Start a list (
    or
      ) - To know which level we're at, we have to count the number - of elements on the tagstack. - """ - name = attrs.get( (TEXTNS,'style-name') ) - level = self.tagstack.count_tags(tag) + 1 - if name: - name = name.replace(".","_") - else: - # FIXME: If a list is contained in a table cell or text box, - # the list level must return to 1, even though the table or - # textbox itself may be nested within another list. - name = self.tagstack.rfindattr( (TEXTNS,'style-name') ) - list_class = "%s_%d" % (name, level) - if self.generate_css: - self.opentag('%s' % self.listtypes.get(list_class,'ul'), {'class': list_class }) - else: - self.opentag('%s' % self.listtypes.get(list_class,'ul')) - self.purgedata() - - def e_text_list(self, tag, attrs): - """ End a list """ - self.writedata() - name = attrs.get( (TEXTNS,'style-name') ) - level = self.tagstack.count_tags(tag) + 1 - if name: - name = name.replace(".","_") - else: - # FIXME: If a list is contained in a table cell or text box, - # the list level must return to 1, even though the table or - # textbox itself may be nested within another list. - name = self.tagstack.rfindattr( (TEXTNS,'style-name') ) - list_class = "%s_%d" % (name, level) - self.closetag(self.listtypes.get(list_class,'ul')) - self.purgedata() - - def s_text_list_item(self, tag, attrs): - """ Start list item """ - self.opentag('li') - self.purgedata() - - def e_text_list_item(self, tag, attrs): - """ End list item """ - self.writedata() - self.closetag('li') - self.purgedata() - - def s_text_list_level_style_bullet(self, tag, attrs): - """ CSS doesn't have the ability to set the glyph - to a particular character, so we just go through - the available glyphs - """ - name = self.tagstack.rfindattr( (STYLENS,'name') ) - level = attrs[(TEXTNS,'level')] - self.prevstyle = self.currentstyle - list_class = "%s_%s" % (name, level) - self.listtypes[list_class] = 'ul' - self.currentstyle = ".%s_%s" % ( name.replace(".","_"), level) - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - level = int(level) - listtype = ("square", "disc", "circle")[level % 3] - self.styledict[self.currentstyle][('','list-style-type')] = listtype - - def e_text_list_level_style_bullet(self, tag, attrs): - self.currentstyle = self.prevstyle - del self.prevstyle - - def s_text_list_level_style_number(self, tag, attrs): - name = self.tagstack.stackparent()[(STYLENS,'name')] - level = attrs[(TEXTNS,'level')] - num_format = attrs.get( (STYLENS,'name'),"1") - list_class = "%s_%s" % (name, level) - self.prevstyle = self.currentstyle - self.currentstyle = ".%s_%s" % ( name.replace(".","_"), level) - self.listtypes[list_class] = 'ol' - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - if num_format == "1": listtype = "decimal" - elif num_format == "I": listtype = "upper-roman" - elif num_format == "i": listtype = "lower-roman" - elif num_format == "A": listtype = "upper-alpha" - elif num_format == "a": listtype = "lower-alpha" - else: listtype = "decimal" - self.styledict[self.currentstyle][('','list-style-type')] = listtype - - def e_text_list_level_style_number(self, tag, attrs): - self.currentstyle = self.prevstyle - del self.prevstyle - - def s_text_note(self, tag, attrs): - self.writedata() - self.purgedata() - self.currentnote = self.currentnote + 1 - self.notedict[self.currentnote] = {} - self.notebody = [] - - def e_text_note(self, tag, attrs): - pass - - def collectnote(self,s): - if s != '': - self.notebody.append(s) - - def s_text_note_body(self, tag, attrs): - self._orgwfunc = self._wfunc - self._wfunc = self.collectnote - - def e_text_note_body(self, tag, attrs): - self._wfunc = self._orgwfunc - self.notedict[self.currentnote]['body'] = ''.join(self.notebody) - self.notebody = '' - del self._orgwfunc - - def e_text_note_citation(self, tag, attrs): - mark = ''.join(self.data) - self.notedict[self.currentnote]['citation'] = mark - self.opentag('a',{ 'href': "#footnote-%s" % self.currentnote }) - self.opentag('sup') -# self.writeout( escape(mark) ) - # Since HTML only knows about endnotes, there is too much risk that the - # marker is reused in the source. Therefore we force numeric markers - self.writeout(unicode(self.currentnote)) - self.closetag('sup') - self.closetag('a') - - def s_text_p(self, tag, attrs): - """ Paragraph - """ - htmlattrs = {} - specialtag = "p" - c = attrs.get( (TEXTNS,'style-name'), None) - if c: - c = c.replace(".","_") - specialtag = special_styles.get("P-"+c) - if specialtag is None: - specialtag = 'p' - if self.generate_css: - htmlattrs['class'] = "P-%s" % c - self.opentag(specialtag, htmlattrs) - self.purgedata() - - def e_text_p(self, tag, attrs): - """ End Paragraph - """ - specialtag = "p" - c = attrs.get( (TEXTNS,'style-name'), None) - if c: - c = c.replace(".","_") - specialtag = special_styles.get("P-"+c) - if specialtag is None: - specialtag = 'p' - self.writedata() - self.closetag(specialtag) - self.purgedata() - - def s_text_s(self, tag, attrs): - """ Generate a number of spaces. ODF has an element; HTML uses   - We use   so we can send the output through an XML parser if we desire to - """ - c = attrs.get( (TEXTNS,'c'),"1") - for x in xrange(int(c)): - self.writeout(' ') - - def s_text_span(self, tag, attrs): - """ The element matches the element in HTML. It is - typically used to properties of the text. - """ - self.writedata() - c = attrs.get( (TEXTNS,'style-name'), None) - htmlattrs = {} - if c: - c = c.replace(".","_") - special = special_styles.get("S-"+c) - if special is None and self.generate_css: - htmlattrs['class'] = "S-%s" % c - self.opentag('span', htmlattrs) - self.purgedata() - - def e_text_span(self, tag, attrs): - """ End the """ - self.writedata() - self.closetag('span', False) - self.purgedata() - - def s_text_tab(self, tag, attrs): - """ Move to the next tabstop. We ignore this in HTML - """ - self.writedata() - self.writeout(' ') - self.purgedata() - - def s_text_x_source(self, tag, attrs): - """ Various indexes and tables of contents. We ignore those. - """ - self.writedata() - self.purgedata() - self.s_ignorexml(tag, attrs) - - def e_text_x_source(self, tag, attrs): - """ Various indexes and tables of contents. We ignore those. - """ - self.writedata() - self.purgedata() - - -#----------------------------------------------------------------------------- -# -# Reading the file -# -#----------------------------------------------------------------------------- - - def load(self, odffile): - """ Loads a document into the parser and parses it. - The argument can either be a filename or a document in memory. - """ - self.lines = [] - self._wfunc = self._wlines - if isinstance(odffile, basestring): - self.document = load(odffile) - else: - self.document = odffile - self._walknode(self.document.topnode) - - def _walknode(self, node): - if node.nodeType == Node.ELEMENT_NODE: - self.startElementNS(node.qname, node.tagName, node.attributes) - for c in node.childNodes: - self._walknode(c) - self.endElementNS(node.qname, node.tagName) - if node.nodeType == Node.TEXT_NODE or node.nodeType == Node.CDATA_SECTION_NODE: - self.characters(unicode(node)) - - - def odf2xhtml(self, odffile): - """ Load a file and return the XHTML - """ - self.load(odffile) - return self.xhtml() - - def _wlines(self,s): - if s != '': self.lines.append(s) - - def xhtml(self): - """ Returns the xhtml - """ - return ''.join(self.lines) - - def _writecss(self, s): - if s != '': self._csslines.append(s) - - def _writenothing(self, s): - pass - - def css(self): - """ Returns the CSS content """ - self._csslines = [] - self._wfunc = self._writecss - self.generate_stylesheet() - res = ''.join(self._csslines) - self._wfunc = self._wlines - del self._csslines - return res - - def save(self, outputfile, addsuffix=False): - """ Save the HTML under the filename. - If the filename is '-' then save to stdout - We have the last style filename in self.stylefilename - """ - if outputfile == '-': - outputfp = sys.stdout - else: - if addsuffix: - outputfile = outputfile + ".html" - outputfp = file(outputfile, "w") - outputfp.write(self.xhtml().encode('us-ascii','xmlcharrefreplace')) - outputfp.close() - - -class ODF2XHTMLembedded(ODF2XHTML): - """ The ODF2XHTML parses an ODF file and produces XHTML""" - - def __init__(self, lines, generate_css=True, embedable=False): - self._resetobject() - self.lines = lines - - # Tags - self.generate_css = generate_css - 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), - (DRAWNS, 'object'): (self.s_draw_object, None), - (DRAWNS, 'object-ole'): (self.s_draw_object_ole, None), - (DRAWNS, 'text-box'): (self.s_draw_textbox, self.e_draw_textbox), -# (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-page-layout"):(self.s_style_default_page_layout, self.e_style_page_layout), -# (STYLENS, "default-page-layout"):(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), - (TEXTNS, "page-number"):(None, None), - } - diff --git a/tablib/packages/odf/odfmanifest.py b/tablib/packages/odf/odfmanifest.py deleted file mode 100644 index 07754fd2..00000000 --- a/tablib/packages/odf/odfmanifest.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/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): -# - -# This script lists the content of the manifest.xml file -import zipfile -from xml.sax import make_parser,handler -from xml.sax.xmlreader import InputSource -import xml.sax.saxutils -from cStringIO import StringIO - -MANIFESTNS="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" - -#----------------------------------------------------------------------------- -# -# ODFMANIFESTHANDLER -# -#----------------------------------------------------------------------------- - -class ODFManifestHandler(handler.ContentHandler): - """ The ODFManifestHandler parses a manifest file and produces a list of - content """ - - def __init__(self): - self.manifest = {} - - # Tags - # FIXME: Also handle encryption data - self.elements = { - (MANIFESTNS, 'file-entry'): (self.s_file_entry, self.donothing), - } - - def handle_starttag(self, tag, method, attrs): - method(tag,attrs) - - def handle_endtag(self, tag, method): - method(tag) - - def startElementNS(self, tag, qname, attrs): - method = self.elements.get(tag, (None, None))[0] - if method: - self.handle_starttag(tag, method, attrs) - else: - self.unknown_starttag(tag,attrs) - - def endElementNS(self, tag, qname): - method = self.elements.get(tag, (None, None))[1] - if method: - self.handle_endtag(tag, method) - else: - self.unknown_endtag(tag) - - def unknown_starttag(self, tag, attrs): - pass - - def unknown_endtag(self, tag): - pass - - def donothing(self, tag, attrs=None): - pass - - def s_file_entry(self, tag, attrs): - m = attrs.get((MANIFESTNS, 'media-type'),"application/octet-stream") - p = attrs.get((MANIFESTNS, 'full-path')) - self.manifest[p] = { 'media-type':m, 'full-path':p } - - -#----------------------------------------------------------------------------- -# -# Reading the file -# -#----------------------------------------------------------------------------- - -def manifestlist(manifestxml): - odhandler = ODFManifestHandler() - parser = make_parser() - parser.setFeature(handler.feature_namespaces, 1) - parser.setContentHandler(odhandler) - parser.setErrorHandler(handler.ErrorHandler()) - - inpsrc = InputSource() - inpsrc.setByteStream(StringIO(manifestxml)) - parser.parse(inpsrc) - - return odhandler.manifest - -def odfmanifest(odtfile): - z = zipfile.ZipFile(odtfile) - manifest = z.read('META-INF/manifest.xml') - z.close() - return manifestlist(manifest) - -if __name__ == "__main__": - import sys - result = odfmanifest(sys.argv[1]) - for file in result.values(): - print "%-40s %-40s" % (file['media-type'], file['full-path']) - diff --git a/tablib/packages/odf/office.py b/tablib/packages/odf/office.py deleted file mode 100644 index 085e251d..00000000 --- a/tablib/packages/odf/office.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- 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 OFFICENS -from element import Element -from draw import StyleRefElement - -# Autogenerated -def Annotation(**args): - return StyleRefElement(qname = (OFFICENS,'annotation'), **args) - -def AutomaticStyles(**args): - return Element(qname = (OFFICENS, 'automatic-styles'), **args) - -def BinaryData(**args): - return Element(qname = (OFFICENS,'binary-data'), **args) - -def Body(**args): - return Element(qname = (OFFICENS, 'body'), **args) - -def ChangeInfo(**args): - return Element(qname = (OFFICENS,'change-info'), **args) - -def Chart(**args): - return Element(qname = (OFFICENS,'chart'), **args) - -def DdeSource(**args): - return Element(qname = (OFFICENS,'dde-source'), **args) - -def Document(version="1.1", **args): - return Element(qname = (OFFICENS,'document'), version=version, **args) - -def DocumentContent(version="1.1", **args): - return Element(qname = (OFFICENS, 'document-content'), version=version, **args) - -def DocumentMeta(version="1.1", **args): - return Element(qname = (OFFICENS, 'document-meta'), version=version, **args) - -def DocumentSettings(version="1.1", **args): - return Element(qname = (OFFICENS, 'document-settings'), version=version, **args) - -def DocumentStyles(version="1.1", **args): - return Element(qname = (OFFICENS, 'document-styles'), version=version, **args) - -def Drawing(**args): - return Element(qname = (OFFICENS,'drawing'), **args) - -def EventListeners(**args): - return Element(qname = (OFFICENS,'event-listeners'), **args) - -def FontFaceDecls(**args): - return Element(qname = (OFFICENS, 'font-face-decls'), **args) - -def Forms(**args): - return Element(qname = (OFFICENS,'forms'), **args) - -def Image(**args): - return Element(qname = (OFFICENS,'image'), **args) - -def MasterStyles(**args): - return Element(qname = (OFFICENS, 'master-styles'), **args) - -def Meta(**args): - return Element(qname = (OFFICENS, 'meta'), **args) - -def Presentation(**args): - return Element(qname = (OFFICENS,'presentation'), **args) - -def Script(**args): - return Element(qname = (OFFICENS, 'script'), **args) - -def Scripts(**args): - return Element(qname = (OFFICENS, 'scripts'), **args) - -def Settings(**args): - return Element(qname = (OFFICENS, 'settings'), **args) - -def Spreadsheet(**args): - return Element(qname = (OFFICENS, 'spreadsheet'), **args) - -def Styles(**args): - return Element(qname = (OFFICENS, 'styles'), **args) - -def Text(**args): - return Element(qname = (OFFICENS, 'text'), **args) - -# Autogenerated end diff --git a/tablib/packages/odf/opendocument.py b/tablib/packages/odf/opendocument.py deleted file mode 100644 index 63196382..00000000 --- a/tablib/packages/odf/opendocument.py +++ /dev/null @@ -1,654 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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__="""Use OpenDocument to generate your documents.""" - -import zipfile, time, sys, mimetypes, copy -from cStringIO import StringIO -from namespaces import * -import manifest, meta -from office import * -import element -from attrconverters import make_NCName -from xml.sax.xmlreader import InputSource -from odfmanifest import manifestlist - -__version__= TOOLSVERSION - -_XMLPROLOGUE = u"\n" - -UNIXPERMS = 0100644 << 16L # -rw-r--r-- - -IS_FILENAME = 0 -IS_IMAGE = 1 -# We need at least Python 2.2 -assert sys.version_info[0]>=2 and sys.version_info[1] >= 2 - -#sys.setrecursionlimit(100) -#The recursion limit is set conservative so mistakes like -# s=content() s.addElement(s) won't eat up too much processor time. - -odmimetypes = { - 'application/vnd.oasis.opendocument.text': '.odt', - 'application/vnd.oasis.opendocument.text-template': '.ott', - 'application/vnd.oasis.opendocument.graphics': '.odg', - 'application/vnd.oasis.opendocument.graphics-template': '.otg', - 'application/vnd.oasis.opendocument.presentation': '.odp', - 'application/vnd.oasis.opendocument.presentation-template': '.otp', - 'application/vnd.oasis.opendocument.spreadsheet': '.ods', - 'application/vnd.oasis.opendocument.spreadsheet-template': '.ots', - 'application/vnd.oasis.opendocument.chart': '.odc', - 'application/vnd.oasis.opendocument.chart-template': '.otc', - 'application/vnd.oasis.opendocument.image': '.odi', - 'application/vnd.oasis.opendocument.image-template': '.oti', - 'application/vnd.oasis.opendocument.formula': '.odf', - 'application/vnd.oasis.opendocument.formula-template': '.otf', - 'application/vnd.oasis.opendocument.text-master': '.odm', - 'application/vnd.oasis.opendocument.text-web': '.oth', -} - -class OpaqueObject: - def __init__(self, filename, mediatype, content=None): - self.mediatype = mediatype - self.filename = filename - self.content = content - -class OpenDocument: - """ A class to hold the content of an OpenDocument document - Use the xml method to write the XML - source to the screen or to a file - d = OpenDocument(mimetype) - fd.write(d.xml()) - """ - thumbnail = None - - def __init__(self, mimetype, add_generator=True): - self.mimetype = mimetype - self.childobjects = [] - self._extra = [] - self.folder = "" # Always empty for toplevel documents - self.topnode = Document(mimetype=self.mimetype) - self.topnode.ownerDocument = self - - self.clear_caches() - - self.Pictures = {} - self.meta = Meta() - self.topnode.addElement(self.meta) - if add_generator: - self.meta.addElement(meta.Generator(text=TOOLSVERSION)) - self.scripts = Scripts() - self.topnode.addElement(self.scripts) - self.fontfacedecls = FontFaceDecls() - self.topnode.addElement(self.fontfacedecls) - self.settings = Settings() - self.topnode.addElement(self.settings) - self.styles = Styles() - self.topnode.addElement(self.styles) - self.automaticstyles = AutomaticStyles() - self.topnode.addElement(self.automaticstyles) - self.masterstyles = MasterStyles() - self.topnode.addElement(self.masterstyles) - self.body = Body() - self.topnode.addElement(self.body) - - def rebuild_caches(self, node=None): - if node is None: node = self.topnode - self.build_caches(node) - for e in node.childNodes: - if e.nodeType == element.Node.ELEMENT_NODE: - self.rebuild_caches(e) - - def clear_caches(self): - self.element_dict = {} - self._styles_dict = {} - self._styles_ooo_fix = {} - - def build_caches(self, element): - """ Called from element.py - """ - if not self.element_dict.has_key(element.qname): - self.element_dict[element.qname] = [] - self.element_dict[element.qname].append(element) - if element.qname == (STYLENS, u'style'): - self.__register_stylename(element) # Add to style dictionary - styleref = element.getAttrNS(TEXTNS,u'style-name') - if styleref is not None and self._styles_ooo_fix.has_key(styleref): - element.setAttrNS(TEXTNS,u'style-name', self._styles_ooo_fix[styleref]) - - def __register_stylename(self, element): - ''' Register a style. But there are three style dictionaries: - office:styles, office:automatic-styles and office:master-styles - Chapter 14 - ''' - name = element.getAttrNS(STYLENS, u'name') - if name is None: - return - if element.parentNode.qname in ((OFFICENS,u'styles'), (OFFICENS,u'automatic-styles')): - if self._styles_dict.has_key(name): - newname = 'M'+name # Rename style - self._styles_ooo_fix[name] = newname - # From here on all references to the old name will refer to the new one - name = newname - element.setAttrNS(STYLENS, u'name', name) - self._styles_dict[name] = element - - def toXml(self, filename=''): - xml=StringIO() - xml.write(_XMLPROLOGUE) - self.body.toXml(0, xml) - if not filename: - return xml.getvalue() - else: - f=file(filename,'w') - f.write(xml.getvalue()) - f.close() - - def xml(self): - """ Generates the full document as an XML file - Always written as a bytestream in UTF-8 encoding - """ - self.__replaceGenerator() - xml=StringIO() - xml.write(_XMLPROLOGUE) - self.topnode.toXml(0, xml) - return xml.getvalue() - - - def contentxml(self): - """ Generates the content.xml file - Always written as a bytestream in UTF-8 encoding - """ - xml=StringIO() - xml.write(_XMLPROLOGUE) - x = DocumentContent() - x.write_open_tag(0, xml) - if self.scripts.hasChildNodes(): - self.scripts.toXml(1, xml) - if self.fontfacedecls.hasChildNodes(): - self.fontfacedecls.toXml(1, xml) - a = AutomaticStyles() - stylelist = self._used_auto_styles([self.styles, self.automaticstyles, self.body]) - if len(stylelist) > 0: - a.write_open_tag(1, xml) - for s in stylelist: - s.toXml(2, xml) - a.write_close_tag(1, xml) - else: - a.toXml(1, xml) - self.body.toXml(1, xml) - x.write_close_tag(0, xml) - return xml.getvalue() - - def __manifestxml(self): - """ Generates the manifest.xml file - The self.manifest isn't avaible unless the document is being saved - """ - xml=StringIO() - xml.write(_XMLPROLOGUE) - self.manifest.toXml(0,xml) - return xml.getvalue() - - def metaxml(self): - """ Generates the meta.xml file """ - self.__replaceGenerator() - x = DocumentMeta() - x.addElement(self.meta) - xml=StringIO() - xml.write(_XMLPROLOGUE) - x.toXml(0,xml) - return xml.getvalue() - - def settingsxml(self): - """ Generates the settings.xml file """ - x = DocumentSettings() - x.addElement(self.settings) - xml=StringIO() - xml.write(_XMLPROLOGUE) - x.toXml(0,xml) - return xml.getvalue() - - def _parseoneelement(self, top, stylenamelist): - """ Finds references to style objects in master-styles - and add the style name to the style list if not already there. - Recursive - """ - for e in top.childNodes: - if e.nodeType == element.Node.ELEMENT_NODE: - for styleref in ( (DRAWNS,u'style-name'), - (DRAWNS,u'text-style-name'), - (PRESENTATIONNS,u'style-name'), - (STYLENS,u'data-style-name'), - (STYLENS,u'list-style-name'), - (STYLENS,u'page-layout-name'), - (STYLENS,u'style-name'), - (TABLENS,u'default-cell-style-name'), - (TABLENS,u'style-name'), - (TEXTNS,u'style-name') ): - if e.getAttrNS(styleref[0],styleref[1]): - stylename = e.getAttrNS(styleref[0],styleref[1]) - if stylename not in stylenamelist: - stylenamelist.append(stylename) - stylenamelist = self._parseoneelement(e, stylenamelist) - return stylenamelist - - def _used_auto_styles(self, segments): - """ Loop through the masterstyles elements, and find the automatic - styles that are used. These will be added to the automatic-styles - element in styles.xml - """ - stylenamelist = [] - for top in segments: - stylenamelist = self._parseoneelement(top, stylenamelist) - stylelist = [] - for e in self.automaticstyles.childNodes: - if e.getAttrNS(STYLENS,u'name') in stylenamelist: - stylelist.append(e) - return stylelist - - def stylesxml(self): - """ Generates the styles.xml file """ - xml=StringIO() - xml.write(_XMLPROLOGUE) - x = DocumentStyles() - x.write_open_tag(0, xml) - if self.fontfacedecls.hasChildNodes(): - self.fontfacedecls.toXml(1, xml) - self.styles.toXml(1, xml) - a = AutomaticStyles() - a.write_open_tag(1, xml) - for s in self._used_auto_styles([self.masterstyles]): - s.toXml(2, xml) - a.write_close_tag(1, xml) - if self.masterstyles.hasChildNodes(): - self.masterstyles.toXml(1, xml) - x.write_close_tag(0, xml) - return xml.getvalue() - - def addPicture(self, filename, mediatype=None, content=None): - """ Add a picture - It uses the same convention as OOo, in that it saves the picture in - the zipfile in the subdirectory 'Pictures' - If passed a file ptr, mediatype must be set - """ - if content is None: - if mediatype is None: - mediatype, encoding = mimetypes.guess_type(filename) - if mediatype is None: - mediatype = '' - try: ext = filename[filename.rindex('.'):] - except: ext='' - else: - ext = mimetypes.guess_extension(mediatype) - manifestfn = "Pictures/%0.0f%s" % ((time.time()*10000000000), ext) - self.Pictures[manifestfn] = (IS_FILENAME, filename, mediatype) - else: - manifestfn = filename - self.Pictures[manifestfn] = (IS_IMAGE, content, mediatype) - return manifestfn - - def addPictureFromFile(self, filename, mediatype=None): - """ Add a picture - It uses the same convention as OOo, in that it saves the picture in - the zipfile in the subdirectory 'Pictures'. - If mediatype is not given, it will be guessed from the filename - extension. - """ - if mediatype is None: - mediatype, encoding = mimetypes.guess_type(filename) - if mediatype is None: - mediatype = '' - try: ext = filename[filename.rindex('.'):] - except ValueError: ext='' - else: - ext = mimetypes.guess_extension(mediatype) - manifestfn = "Pictures/%0.0f%s" % ((time.time()*10000000000), ext) - self.Pictures[manifestfn] = (IS_FILENAME, filename, mediatype) - return manifestfn - - def addPictureFromString(self, content, mediatype): - """ Add a picture - It uses the same convention as OOo, in that it saves the picture in - the zipfile in the subdirectory 'Pictures'. The content variable - is a string that contains the binary image data. The mediatype - indicates the image format. - """ - ext = mimetypes.guess_extension(mediatype) - manifestfn = "Pictures/%0.0f%s" % ((time.time()*10000000000), ext) - self.Pictures[manifestfn] = (IS_IMAGE, content, mediatype) - return manifestfn - - def addThumbnail(self, filecontent=None): - """ Add a fixed thumbnail - The thumbnail in the library is big, so this is pretty useless. - """ - if filecontent is None: - import thumbnail - self.thumbnail = thumbnail.thumbnail() - else: - self.thumbnail = filecontent - - def addObject(self, document, objectname=None): - """ Adds an object (subdocument). The object must be an OpenDocument class - The return value will be the folder in the zipfile the object is stored in - """ - self.childobjects.append(document) - if objectname is None: - document.folder = "%s/Object %d" % (self.folder, len(self.childobjects)) - else: - document.folder = objectname - return ".%s" % document.folder - - def _savePictures(self, object, folder): - hasPictures = False - for arcname, picturerec in object.Pictures.items(): - what_it_is, fileobj, mediatype = picturerec - self.manifest.addElement(manifest.FileEntry(fullpath="%s%s" % ( folder ,arcname), mediatype=mediatype)) - hasPictures = True - if what_it_is == IS_FILENAME: - self._z.write(fileobj, arcname, zipfile.ZIP_STORED) - else: - zi = zipfile.ZipInfo(str(arcname), self._now) - zi.compress_type = zipfile.ZIP_STORED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, fileobj) - # According to section 17.7.3 in ODF 1.1, the pictures folder should not have a manifest entry -# if hasPictures: -# self.manifest.addElement(manifest.FileEntry(fullpath="%sPictures/" % folder, mediatype="")) - # Look in subobjects - subobjectnum = 1 - for subobject in object.childobjects: - self._savePictures(subobject,'%sObject %d/' % (folder, subobjectnum)) - subobjectnum += 1 - - def __replaceGenerator(self): - """ Section 3.1.1: The application MUST NOT export the original identifier - belonging to the application that created the document. - """ - for m in self.meta.childNodes[:]: - if m.qname == (METANS, u'generator'): - self.meta.removeChild(m) - self.meta.addElement(meta.Generator(text=TOOLSVERSION)) - - def save(self, outputfile, addsuffix=False): - """ Save the document under the filename. - If the filename is '-' then save to stdout - """ - if outputfile == '-': - outputfp = zipfile.ZipFile(sys.stdout,"w") - else: - if addsuffix: - outputfile = outputfile + odmimetypes.get(self.mimetype,'.xxx') - outputfp = zipfile.ZipFile(outputfile, "w") - self.__zipwrite(outputfp) - outputfp.close() - - def write(self, outputfp): - """ User API to write the ODF file to an open file descriptor - Writes the ZIP format - """ - zipoutputfp = zipfile.ZipFile(outputfp,"w") - self.__zipwrite(zipoutputfp) - - def __zipwrite(self, outputfp): - """ Write the document to an open file pointer - This is where the real work is done - """ - self._z = outputfp - self._now = time.localtime()[:6] - self.manifest = manifest.Manifest() - - # Write mimetype - zi = zipfile.ZipInfo('mimetype', self._now) - zi.compress_type = zipfile.ZIP_STORED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, self.mimetype) - - self._saveXmlObjects(self,"") - - # Write pictures - self._savePictures(self,"") - - # Write the thumbnail - if self.thumbnail is not None: - self.manifest.addElement(manifest.FileEntry(fullpath="Thumbnails/", mediatype='')) - self.manifest.addElement(manifest.FileEntry(fullpath="Thumbnails/thumbnail.png", mediatype='')) - zi = zipfile.ZipInfo("Thumbnails/thumbnail.png", self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, self.thumbnail) - - # Write any extra files - for op in self._extra: - if op.filename == "META-INF/documentsignatures.xml": continue # Don't save signatures - self.manifest.addElement(manifest.FileEntry(fullpath=op.filename, mediatype=op.mediatype)) - zi = zipfile.ZipInfo(op.filename.encode('utf-8'), self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - if op.content is not None: - self._z.writestr(zi, op.content) - # Write manifest - zi = zipfile.ZipInfo("META-INF/manifest.xml", self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, self.__manifestxml() ) - del self._z - del self._now - del self.manifest - - - def _saveXmlObjects(self, object, folder): - if self == object: - self.manifest.addElement(manifest.FileEntry(fullpath="/", mediatype=object.mimetype)) - else: - self.manifest.addElement(manifest.FileEntry(fullpath=folder, mediatype=object.mimetype)) - # Write styles - self.manifest.addElement(manifest.FileEntry(fullpath="%sstyles.xml" % folder, mediatype="text/xml")) - zi = zipfile.ZipInfo("%sstyles.xml" % folder, self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, object.stylesxml() ) - - # Write content - self.manifest.addElement(manifest.FileEntry(fullpath="%scontent.xml" % folder, mediatype="text/xml")) - zi = zipfile.ZipInfo("%scontent.xml" % folder, self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, object.contentxml() ) - - # Write settings - if object.settings.hasChildNodes(): - self.manifest.addElement(manifest.FileEntry(fullpath="%ssettings.xml" % folder, mediatype="text/xml")) - zi = zipfile.ZipInfo("%ssettings.xml" % folder, self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, object.settingsxml() ) - - # Write meta - if self == object: - self.manifest.addElement(manifest.FileEntry(fullpath="meta.xml", mediatype="text/xml")) - zi = zipfile.ZipInfo("meta.xml", self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, object.metaxml() ) - - # Write subobjects - subobjectnum = 1 - for subobject in object.childobjects: - self._saveXmlObjects(subobject, '%sObject %d/' % (folder, subobjectnum)) - subobjectnum += 1 - -# Document's DOM methods - def createElement(self, element): - """ Inconvenient interface to create an element, but follows XML-DOM. - Does not allow attributes as argument, therefore can't check grammar. - """ - return element(check_grammar=False) - - def createTextNode(self, data): - """ Method to create a text node """ - return element.Text(data) - - def createCDATASection(self, data): - """ Method to create a CDATA section """ - return element.CDATASection(cdata) - - def getMediaType(self): - """ Returns the media type """ - return self.mimetype - - def getStyleByName(self, name): - """ Finds a style object based on the name """ - ncname = make_NCName(name) - if self._styles_dict == {}: - self.rebuild_caches() - return self._styles_dict.get(ncname, None) - - def getElementsByType(self, element): - """ Gets elements based on the type, which is function from text.py, draw.py etc. """ - obj = element(check_grammar=False) - if self.element_dict == {}: - self.rebuild_caches() - return self.element_dict.get(obj.qname, []) - -# Convenience functions -def OpenDocumentChart(): - """ Creates a chart document """ - doc = OpenDocument('application/vnd.oasis.opendocument.chart') - doc.chart = Chart() - doc.body.addElement(doc.chart) - return doc - -def OpenDocumentDrawing(): - """ Creates a drawing document """ - doc = OpenDocument('application/vnd.oasis.opendocument.graphics') - doc.drawing = Drawing() - doc.body.addElement(doc.drawing) - return doc - -def OpenDocumentImage(): - """ Creates an image document """ - doc = OpenDocument('application/vnd.oasis.opendocument.image') - doc.image = Image() - doc.body.addElement(doc.image) - return doc - -def OpenDocumentPresentation(): - """ Creates a presentation document """ - doc = OpenDocument('application/vnd.oasis.opendocument.presentation') - doc.presentation = Presentation() - doc.body.addElement(doc.presentation) - return doc - -def OpenDocumentSpreadsheet(): - """ Creates a spreadsheet document """ - doc = OpenDocument('application/vnd.oasis.opendocument.spreadsheet') - doc.spreadsheet = Spreadsheet() - doc.body.addElement(doc.spreadsheet) - return doc - -def OpenDocumentText(): - """ Creates a text document """ - doc = OpenDocument('application/vnd.oasis.opendocument.text') - doc.text = Text() - doc.body.addElement(doc.text) - return doc - -def OpenDocumentTextMaster(): - """ Creates a text master document """ - doc = OpenDocument('application/vnd.oasis.opendocument.text-master') - doc.text = Text() - doc.body.addElement(doc.text) - return doc - -def __loadxmlparts(z, manifest, doc, objectpath): - from load import LoadParser - from xml.sax import make_parser, handler - - for xmlfile in (objectpath+'settings.xml', objectpath+'meta.xml', objectpath+'content.xml', objectpath+'styles.xml'): - if not manifest.has_key(xmlfile): - continue - try: - xmlpart = z.read(xmlfile) - doc._parsing = xmlfile - - parser = make_parser() - parser.setFeature(handler.feature_namespaces, 1) - parser.setContentHandler(LoadParser(doc)) - parser.setErrorHandler(handler.ErrorHandler()) - - inpsrc = InputSource() - inpsrc.setByteStream(StringIO(xmlpart)) - parser.parse(inpsrc) - del doc._parsing - except KeyError, v: pass - -def load(odffile): - """ Load an ODF file into memory - Returns a reference to the structure - """ - z = zipfile.ZipFile(odffile) - mimetype = z.read('mimetype') - doc = OpenDocument(mimetype, add_generator=False) - - # Look in the manifest file to see if which of the four files there are - manifestpart = z.read('META-INF/manifest.xml') - manifest = manifestlist(manifestpart) - __loadxmlparts(z, manifest, doc, '') - for mentry,mvalue in manifest.items(): - if mentry[:9] == "Pictures/" and len(mentry) > 9: - doc.addPicture(mvalue['full-path'], mvalue['media-type'], z.read(mentry)) - elif mentry == "Thumbnails/thumbnail.png": - doc.addThumbnail(z.read(mentry)) - elif mentry in ('settings.xml', 'meta.xml', 'content.xml', 'styles.xml'): - pass - # Load subobjects into structure - elif mentry[:7] == "Object " and len(mentry) < 11 and mentry[-1] == "/": - subdoc = OpenDocument(mvalue['media-type'], add_generator=False) - doc.addObject(subdoc, "/" + mentry[:-1]) - __loadxmlparts(z, manifest, subdoc, mentry) - elif mentry[:7] == "Object ": - pass # Don't load subobjects as opaque objects - else: - if mvalue['full-path'][-1] == '/': - doc._extra.append(OpaqueObject(mvalue['full-path'], mvalue['media-type'], None)) - else: - doc._extra.append(OpaqueObject(mvalue['full-path'], mvalue['media-type'], z.read(mentry))) - # Add the SUN junk here to the struct somewhere - # It is cached data, so it can be out-of-date - z.close() - b = doc.getElementsByType(Body) - if mimetype[:39] == 'application/vnd.oasis.opendocument.text': - doc.text = b[0].firstChild - elif mimetype[:43] == 'application/vnd.oasis.opendocument.graphics': - doc.graphics = b[0].firstChild - elif mimetype[:47] == 'application/vnd.oasis.opendocument.presentation': - doc.presentation = b[0].firstChild - elif mimetype[:46] == 'application/vnd.oasis.opendocument.spreadsheet': - doc.spreadsheet = b[0].firstChild - elif mimetype[:40] == 'application/vnd.oasis.opendocument.chart': - doc.chart = b[0].firstChild - elif mimetype[:40] == 'application/vnd.oasis.opendocument.image': - doc.image = b[0].firstChild - elif mimetype[:42] == 'application/vnd.oasis.opendocument.formula': - doc.formula = b[0].firstChild - return doc - -# vim: set expandtab sw=4 : diff --git a/tablib/packages/odf/presentation.py b/tablib/packages/odf/presentation.py deleted file mode 100644 index c1f2135a..00000000 --- a/tablib/packages/odf/presentation.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- 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 PRESENTATIONNS -from element import Element - -# ODF 1.0 section 9.6 and 9.7 -# Autogenerated -def AnimationGroup(**args): - return Element(qname = (PRESENTATIONNS,'animation-group'), **args) - -def Animations(**args): - return Element(qname = (PRESENTATIONNS,'animations'), **args) - -def DateTime(**args): - return Element(qname = (PRESENTATIONNS,'date-time'), **args) - -def DateTimeDecl(**args): - return Element(qname = (PRESENTATIONNS,'date-time-decl'), **args) - -def Dim(**args): - return Element(qname = (PRESENTATIONNS,'dim'), **args) - -def EventListener(**args): - return Element(qname = (PRESENTATIONNS,'event-listener'), **args) - -def Footer(**args): - return Element(qname = (PRESENTATIONNS,'footer'), **args) - -def FooterDecl(**args): - return Element(qname = (PRESENTATIONNS,'footer-decl'), **args) - -def Header(**args): - return Element(qname = (PRESENTATIONNS,'header'), **args) - -def HeaderDecl(**args): - return Element(qname = (PRESENTATIONNS,'header-decl'), **args) - -def HideShape(**args): - return Element(qname = (PRESENTATIONNS,'hide-shape'), **args) - -def HideText(**args): - return Element(qname = (PRESENTATIONNS,'hide-text'), **args) - -def Notes(**args): - return Element(qname = (PRESENTATIONNS,'notes'), **args) - -def Placeholder(**args): - return Element(qname = (PRESENTATIONNS,'placeholder'), **args) - -def Play(**args): - return Element(qname = (PRESENTATIONNS,'play'), **args) - -def Settings(**args): - return Element(qname = (PRESENTATIONNS,'settings'), **args) - -def Show(**args): - return Element(qname = (PRESENTATIONNS,'show'), **args) - -def ShowShape(**args): - return Element(qname = (PRESENTATIONNS,'show-shape'), **args) - -def ShowText(**args): - return Element(qname = (PRESENTATIONNS,'show-text'), **args) - -def Sound(**args): - return Element(qname = (PRESENTATIONNS,'sound'), **args) - diff --git a/tablib/packages/odf/script.py b/tablib/packages/odf/script.py deleted file mode 100644 index adbc73f6..00000000 --- a/tablib/packages/odf/script.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- 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 SCRIPTNS -from element import Element - -# ODF 1.0 section 12.4.1 -# The element binds an event to a macro. - -# Autogenerated -def EventListener(**args): - return Element(qname = (SCRIPTNS,'event-listener'), **args) - diff --git a/tablib/packages/odf/style.py b/tablib/packages/odf/style.py deleted file mode 100644 index f64d7c82..00000000 --- a/tablib/packages/odf/style.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- 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 STYLENS -from element import Element - -def StyleElement(**args): - e = Element(**args) - if args.get('check_grammar', True) == True: - if not args.has_key('displayname'): - e.setAttrNS(STYLENS,'display-name', args.get('name')) - return e - -# Autogenerated -def BackgroundImage(**args): - return Element(qname = (STYLENS,'background-image'), **args) - -def ChartProperties(**args): - return Element(qname = (STYLENS,'chart-properties'), **args) - -def Column(**args): - return Element(qname = (STYLENS,'column'), **args) - -def ColumnSep(**args): - return Element(qname = (STYLENS,'column-sep'), **args) - -def Columns(**args): - return Element(qname = (STYLENS,'columns'), **args) - -def DefaultStyle(**args): - return Element(qname = (STYLENS,'default-style'), **args) - -def DrawingPageProperties(**args): - return Element(qname = (STYLENS,'drawing-page-properties'), **args) - -def DropCap(**args): - return Element(qname = (STYLENS,'drop-cap'), **args) - -def FontFace(**args): - return Element(qname = (STYLENS,'font-face'), **args) - -def Footer(**args): - return Element(qname = (STYLENS,'footer'), **args) - -def FooterLeft(**args): - return Element(qname = (STYLENS,'footer-left'), **args) - -def FooterStyle(**args): - return Element(qname = (STYLENS,'footer-style'), **args) - -def FootnoteSep(**args): - return Element(qname = (STYLENS,'footnote-sep'), **args) - -def GraphicProperties(**args): - return Element(qname = (STYLENS,'graphic-properties'), **args) - -def HandoutMaster(**args): - return Element(qname = (STYLENS,'handout-master'), **args) - -def Header(**args): - return Element(qname = (STYLENS,'header'), **args) - -def HeaderFooterProperties(**args): - return Element(qname = (STYLENS,'header-footer-properties'), **args) - -def HeaderLeft(**args): - return Element(qname = (STYLENS,'header-left'), **args) - -def HeaderStyle(**args): - return Element(qname = (STYLENS,'header-style'), **args) - -def ListLevelProperties(**args): - return Element(qname = (STYLENS,'list-level-properties'), **args) - -def Map(**args): - return Element(qname = (STYLENS,'map'), **args) - -def MasterPage(**args): - return StyleElement(qname = (STYLENS,'master-page'), **args) - -def PageLayout(**args): - return Element(qname = (STYLENS,'page-layout'), **args) - -def PageLayoutProperties(**args): - return Element(qname = (STYLENS,'page-layout-properties'), **args) - -def ParagraphProperties(**args): - return Element(qname = (STYLENS,'paragraph-properties'), **args) - -def PresentationPageLayout(**args): - return StyleElement(qname = (STYLENS,'presentation-page-layout'), **args) - -def RegionCenter(**args): - return Element(qname = (STYLENS,'region-center'), **args) - -def RegionLeft(**args): - return Element(qname = (STYLENS,'region-left'), **args) - -def RegionRight(**args): - return Element(qname = (STYLENS,'region-right'), **args) - -def RubyProperties(**args): - return Element(qname = (STYLENS,'ruby-properties'), **args) - -def SectionProperties(**args): - return Element(qname = (STYLENS,'section-properties'), **args) - -def Style(**args): - return StyleElement(qname = (STYLENS,'style'), **args) - -def TabStop(**args): - return Element(qname = (STYLENS,'tab-stop'), **args) - -def TabStops(**args): - return Element(qname = (STYLENS,'tab-stops'), **args) - -def TableCellProperties(**args): - return Element(qname = (STYLENS,'table-cell-properties'), **args) - -def TableColumnProperties(**args): - return Element(qname = (STYLENS,'table-column-properties'), **args) - -def TableProperties(**args): - return Element(qname = (STYLENS,'table-properties'), **args) - -def TableRowProperties(**args): - return Element(qname = (STYLENS,'table-row-properties'), **args) - -def TextProperties(**args): - return Element(qname = (STYLENS,'text-properties'), **args) - diff --git a/tablib/packages/odf/svg.py b/tablib/packages/odf/svg.py deleted file mode 100644 index 346c4904..00000000 --- a/tablib/packages/odf/svg.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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 SVGNS -from element import Element -from draw import DrawElement - -# Autogenerated -def DefinitionSrc(**args): - return Element(qname = (SVGNS,'definition-src'), **args) - -def Desc(**args): - return Element(qname = (SVGNS,'desc'), **args) - -def FontFaceFormat(**args): - return Element(qname = (SVGNS,'font-face-format'), **args) - -def FontFaceName(**args): - return Element(qname = (SVGNS,'font-face-name'), **args) - -def FontFaceSrc(**args): - return Element(qname = (SVGNS,'font-face-src'), **args) - -def FontFaceUri(**args): - return Element(qname = (SVGNS,'font-face-uri'), **args) - -def Lineargradient(**args): - return DrawElement(qname = (SVGNS,'linearGradient'), **args) - -def Radialgradient(**args): - return DrawElement(qname = (SVGNS,'radialGradient'), **args) - -def Stop(**args): - return Element(qname = (SVGNS,'stop'), **args) - -def Title(**args): - return Element(qname = (SVGNS,'title'), **args) diff --git a/tablib/packages/odf/table.py b/tablib/packages/odf/table.py deleted file mode 100644 index 4ba0c36e..00000000 --- a/tablib/packages/odf/table.py +++ /dev/null @@ -1,307 +0,0 @@ -# -*- 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 TABLENS -from element import Element - - -# Autogenerated -def Body(**args): - return Element(qname = (TABLENS,'body'), **args) - -def CalculationSettings(**args): - return Element(qname = (TABLENS,'calculation-settings'), **args) - -def CellAddress(**args): - return Element(qname = (TABLENS,'cell-address'), **args) - -def CellContentChange(**args): - return Element(qname = (TABLENS,'cell-content-change'), **args) - -def CellContentDeletion(**args): - return Element(qname = (TABLENS,'cell-content-deletion'), **args) - -def CellRangeSource(**args): - return Element(qname = (TABLENS,'cell-range-source'), **args) - -def ChangeDeletion(**args): - return Element(qname = (TABLENS,'change-deletion'), **args) - -def ChangeTrackTableCell(**args): - return Element(qname = (TABLENS,'change-track-table-cell'), **args) - -def Consolidation(**args): - return Element(qname = (TABLENS,'consolidation'), **args) - -def ContentValidation(**args): - return Element(qname = (TABLENS,'content-validation'), **args) - -def ContentValidations(**args): - return Element(qname = (TABLENS,'content-validations'), **args) - -def CoveredTableCell(**args): - return Element(qname = (TABLENS,'covered-table-cell'), **args) - -def CutOffs(**args): - return Element(qname = (TABLENS,'cut-offs'), **args) - -def DataPilotDisplayInfo(**args): - return Element(qname = (TABLENS,'data-pilot-display-info'), **args) - -def DataPilotField(**args): - return Element(qname = (TABLENS,'data-pilot-field'), **args) - -def DataPilotFieldReference(**args): - return Element(qname = (TABLENS,'data-pilot-field-reference'), **args) - -def DataPilotGroup(**args): - return Element(qname = (TABLENS,'data-pilot-group'), **args) - -def DataPilotGroupMember(**args): - return Element(qname = (TABLENS,'data-pilot-group-member'), **args) - -def DataPilotGroups(**args): - return Element(qname = (TABLENS,'data-pilot-groups'), **args) - -def DataPilotLayoutInfo(**args): - return Element(qname = (TABLENS,'data-pilot-layout-info'), **args) - -def DataPilotLevel(**args): - return Element(qname = (TABLENS,'data-pilot-level'), **args) - -def DataPilotMember(**args): - return Element(qname = (TABLENS,'data-pilot-member'), **args) - -def DataPilotMembers(**args): - return Element(qname = (TABLENS,'data-pilot-members'), **args) - -def DataPilotSortInfo(**args): - return Element(qname = (TABLENS,'data-pilot-sort-info'), **args) - -def DataPilotSubtotal(**args): - return Element(qname = (TABLENS,'data-pilot-subtotal'), **args) - -def DataPilotSubtotals(**args): - return Element(qname = (TABLENS,'data-pilot-subtotals'), **args) - -def DataPilotTable(**args): - return Element(qname = (TABLENS,'data-pilot-table'), **args) - -def DataPilotTables(**args): - return Element(qname = (TABLENS,'data-pilot-tables'), **args) - -def DatabaseRange(**args): - return Element(qname = (TABLENS,'database-range'), **args) - -def DatabaseRanges(**args): - return Element(qname = (TABLENS,'database-ranges'), **args) - -def DatabaseSourceQuery(**args): - return Element(qname = (TABLENS,'database-source-query'), **args) - -def DatabaseSourceSql(**args): - return Element(qname = (TABLENS,'database-source-sql'), **args) - -def DatabaseSourceTable(**args): - return Element(qname = (TABLENS,'database-source-table'), **args) - -def DdeLink(**args): - return Element(qname = (TABLENS,'dde-link'), **args) - -def DdeLinks(**args): - return Element(qname = (TABLENS,'dde-links'), **args) - -def Deletion(**args): - return Element(qname = (TABLENS,'deletion'), **args) - -def Deletions(**args): - return Element(qname = (TABLENS,'deletions'), **args) - -def Dependencies(**args): - return Element(qname = (TABLENS,'dependencies'), **args) - -def Dependency(**args): - return Element(qname = (TABLENS,'dependency'), **args) - -def Detective(**args): - return Element(qname = (TABLENS,'detective'), **args) - -def ErrorMacro(**args): - return Element(qname = (TABLENS,'error-macro'), **args) - -def ErrorMessage(**args): - return Element(qname = (TABLENS,'error-message'), **args) - -def EvenColumns(**args): - return Element(qname = (TABLENS,'even-columns'), **args) - -def EvenRows(**args): - return Element(qname = (TABLENS,'even-rows'), **args) - -def Filter(**args): - return Element(qname = (TABLENS,'filter'), **args) - -def FilterAnd(**args): - return Element(qname = (TABLENS,'filter-and'), **args) - -def FilterCondition(**args): - return Element(qname = (TABLENS,'filter-condition'), **args) - -def FilterOr(**args): - return Element(qname = (TABLENS,'filter-or'), **args) - -def FirstColumn(**args): - return Element(qname = (TABLENS,'first-column'), **args) - -def FirstRow(**args): - return Element(qname = (TABLENS,'first-row'), **args) - -def HelpMessage(**args): - return Element(qname = (TABLENS,'help-message'), **args) - -def HighlightedRange(**args): - return Element(qname = (TABLENS,'highlighted-range'), **args) - -def Insertion(**args): - return Element(qname = (TABLENS,'insertion'), **args) - -def InsertionCutOff(**args): - return Element(qname = (TABLENS,'insertion-cut-off'), **args) - -def Iteration(**args): - return Element(qname = (TABLENS,'iteration'), **args) - -def LabelRange(**args): - return Element(qname = (TABLENS,'label-range'), **args) - -def LabelRanges(**args): - return Element(qname = (TABLENS,'label-ranges'), **args) - -def LastColumn(**args): - return Element(qname = (TABLENS,'last-column'), **args) - -def LastRow(**args): - return Element(qname = (TABLENS,'last-row'), **args) - -def Movement(**args): - return Element(qname = (TABLENS,'movement'), **args) - -def MovementCutOff(**args): - return Element(qname = (TABLENS,'movement-cut-off'), **args) - -def NamedExpression(**args): - return Element(qname = (TABLENS,'named-expression'), **args) - -def NamedExpressions(**args): - return Element(qname = (TABLENS,'named-expressions'), **args) - -def NamedRange(**args): - return Element(qname = (TABLENS,'named-range'), **args) - -def NullDate(**args): - return Element(qname = (TABLENS,'null-date'), **args) - -def OddColumns(**args): - return Element(qname = (TABLENS,'odd-columns'), **args) - -def OddRows(**args): - return Element(qname = (TABLENS,'odd-rows'), **args) - -def Operation(**args): - return Element(qname = (TABLENS,'operation'), **args) - -def Previous(**args): - return Element(qname = (TABLENS,'previous'), **args) - -def Scenario(**args): - return Element(qname = (TABLENS,'scenario'), **args) - -def Shapes(**args): - return Element(qname = (TABLENS,'shapes'), **args) - -def Sort(**args): - return Element(qname = (TABLENS,'sort'), **args) - -def SortBy(**args): - return Element(qname = (TABLENS,'sort-by'), **args) - -def SortGroups(**args): - return Element(qname = (TABLENS,'sort-groups'), **args) - -def SourceCellRange(**args): - return Element(qname = (TABLENS,'source-cell-range'), **args) - -def SourceRangeAddress(**args): - return Element(qname = (TABLENS,'source-range-address'), **args) - -def SourceService(**args): - return Element(qname = (TABLENS,'source-service'), **args) - -def SubtotalField(**args): - return Element(qname = (TABLENS,'subtotal-field'), **args) - -def SubtotalRule(**args): - return Element(qname = (TABLENS,'subtotal-rule'), **args) - -def SubtotalRules(**args): - return Element(qname = (TABLENS,'subtotal-rules'), **args) - -def Table(**args): - return Element(qname = (TABLENS,'table'), **args) - -def TableCell(**args): - return Element(qname = (TABLENS,'table-cell'), **args) - -def TableColumn(**args): - return Element(qname = (TABLENS,'table-column'), **args) - -def TableColumnGroup(**args): - return Element(qname = (TABLENS,'table-column-group'), **args) - -def TableColumns(**args): - return Element(qname = (TABLENS,'table-columns'), **args) - -def TableHeaderColumns(**args): - return Element(qname = (TABLENS,'table-header-columns'), **args) - -def TableHeaderRows(**args): - return Element(qname = (TABLENS,'table-header-rows'), **args) - -def TableRow(**args): - return Element(qname = (TABLENS,'table-row'), **args) - -def TableRowGroup(**args): - return Element(qname = (TABLENS,'table-row-group'), **args) - -def TableRows(**args): - return Element(qname = (TABLENS,'table-rows'), **args) - -def TableSource(**args): - return Element(qname = (TABLENS,'table-source'), **args) - -def TableTemplate(**args): - return Element(qname = (TABLENS,'table-template'), **args) - -def TargetRangeAddress(**args): - return Element(qname = (TABLENS,'target-range-address'), **args) - -def TrackedChanges(**args): - return Element(qname = (TABLENS,'tracked-changes'), **args) - diff --git a/tablib/packages/odf/teletype.py b/tablib/packages/odf/teletype.py deleted file mode 100644 index 53b58fd4..00000000 --- a/tablib/packages/odf/teletype.py +++ /dev/null @@ -1,137 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Create and extract text from ODF, handling whitespace correctly. -# 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. - - -""" -Class for handling whitespace properly in OpenDocument. - -While it is possible to use getTextContent() and setTextContent() -to extract or create ODF content, these won't extract or create -the appropriate , , or -elements. This module takes care of that problem. -""" - -from odf.element import Node -import odf.opendocument -from odf.text import S,LineBreak,Tab - -class WhitespaceText(object): - - def __init__(self): - self.textBuffer = [] - self.spaceCount = 0 - - def addTextToElement(self, odfElement, s): - """ Process an input string, inserting - elements for '\t', - elements for '\n', and - elements for runs of more than one blank. - These will be added to the given element. - """ - i = 0 - ch = ' ' - - # When we encounter a tab or newline, we can immediately - # dump any accumulated text and then emit the appropriate - # ODF element. - # - # When we encounter a space, we add it to the text buffer, - # and then collect more spaces. If there are more spaces - # after the first one, we dump the text buffer and then - # then emit the appropriate element. - - while i < len(s): - ch = s[i] - if ch == '\t': - self._emitTextBuffer(odfElement) - odfElement.addElement(Tab()) - i += 1 - elif ch == '\n': - self._emitTextBuffer(odfElement); - odfElement.addElement(LineBreak()) - i += 1 - elif ch == ' ': - self.textBuffer.append(' ') - i += 1 - self.spaceCount = 0 - while i < len(s) and (s[i] == ' '): - self.spaceCount += 1 - i += 1 - if self.spaceCount > 0: - self._emitTextBuffer(odfElement) - self._emitSpaces(odfElement) - else: - self.textBuffer.append(ch) - i += 1 - - self._emitTextBuffer(odfElement) - - def _emitTextBuffer(self, odfElement): - """ Creates a Text Node whose contents are the current textBuffer. - Side effect: clears the text buffer. - """ - if len(self.textBuffer) > 0: - odfElement.addText(''.join(self.textBuffer)) - self.textBuffer = [] - - - def _emitSpaces(self, odfElement): - """ Creates a element for the current spaceCount. - Side effect: sets spaceCount back to zero - """ - if self.spaceCount > 0: - spaceElement = S(c=self.spaceCount) - odfElement.addElement(spaceElement) - self.spaceCount = 0 - -def addTextToElement(odfElement, s): - wst = WhitespaceText() - wst.addTextToElement(odfElement, s) - -def extractText(odfElement): - """ Extract text content from an Element, with whitespace represented - properly. Returns the text, with tabs, spaces, and newlines - correctly evaluated. This method recursively descends through the - children of the given element, accumulating text and "unwrapping" - , , and elements along the way. - """ - result = []; - - if len(odfElement.childNodes) != 0: - for child in odfElement.childNodes: - if child.nodeType == Node.TEXT_NODE: - result.append(child.data) - elif child.nodeType == Node.ELEMENT_NODE: - subElement = child - tagName = subElement.qname; - if tagName == (u"urn:oasis:names:tc:opendocument:xmlns:text:1.0", u"line-break"): - result.append("\n") - elif tagName == (u"urn:oasis:names:tc:opendocument:xmlns:text:1.0", u"tab"): - result.append("\t") - elif tagName == (u"urn:oasis:names:tc:opendocument:xmlns:text:1.0", u"s"): - c = subElement.getAttribute('c') - if c: - spaceCount = int(c) - else: - spaceCount = 1 - - result.append(" " * spaceCount) - else: - result.append(extractText(subElement)) - return ''.join(result) diff --git a/tablib/packages/odf/text.py b/tablib/packages/odf/text.py deleted file mode 100644 index b55a3a4a..00000000 --- a/tablib/packages/odf/text.py +++ /dev/null @@ -1,562 +0,0 @@ -# -*- 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 TEXTNS -from element import Element -from style import StyleElement - -# Autogenerated -def A(**args): - return Element(qname = (TEXTNS,'a'), **args) - -def AlphabeticalIndex(**args): - return Element(qname = (TEXTNS,'alphabetical-index'), **args) - -def AlphabeticalIndexAutoMarkFile(**args): - return Element(qname = (TEXTNS,'alphabetical-index-auto-mark-file'), **args) - -def AlphabeticalIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'alphabetical-index-entry-template'), **args) - -def AlphabeticalIndexMark(**args): - return Element(qname = (TEXTNS,'alphabetical-index-mark'), **args) - -def AlphabeticalIndexMarkEnd(**args): - return Element(qname = (TEXTNS,'alphabetical-index-mark-end'), **args) - -def AlphabeticalIndexMarkStart(**args): - return Element(qname = (TEXTNS,'alphabetical-index-mark-start'), **args) - -def AlphabeticalIndexSource(**args): - return Element(qname = (TEXTNS,'alphabetical-index-source'), **args) - -def AuthorInitials(**args): - return Element(qname = (TEXTNS,'author-initials'), **args) - -def AuthorName(**args): - return Element(qname = (TEXTNS,'author-name'), **args) - -def Bibliography(**args): - return Element(qname = (TEXTNS,'bibliography'), **args) - -def BibliographyConfiguration(**args): - return Element(qname = (TEXTNS,'bibliography-configuration'), **args) - -def BibliographyEntryTemplate(**args): - return Element(qname = (TEXTNS,'bibliography-entry-template'), **args) - -def BibliographyMark(**args): - return Element(qname = (TEXTNS,'bibliography-mark'), **args) - -def BibliographySource(**args): - return Element(qname = (TEXTNS,'bibliography-source'), **args) - -def Bookmark(**args): - return Element(qname = (TEXTNS,'bookmark'), **args) - -def BookmarkEnd(**args): - return Element(qname = (TEXTNS,'bookmark-end'), **args) - -def BookmarkRef(**args): - return Element(qname = (TEXTNS,'bookmark-ref'), **args) - -def BookmarkStart(**args): - return Element(qname = (TEXTNS,'bookmark-start'), **args) - -def Change(**args): - return Element(qname = (TEXTNS,'change'), **args) - -def ChangeEnd(**args): - return Element(qname = (TEXTNS,'change-end'), **args) - -def ChangeStart(**args): - return Element(qname = (TEXTNS,'change-start'), **args) - -def ChangedRegion(**args): - return Element(qname = (TEXTNS,'changed-region'), **args) - -def Chapter(**args): - return Element(qname = (TEXTNS,'chapter'), **args) - -def CharacterCount(**args): - return Element(qname = (TEXTNS,'character-count'), **args) - -def ConditionalText(**args): - return Element(qname = (TEXTNS,'conditional-text'), **args) - -def CreationDate(**args): - return Element(qname = (TEXTNS,'creation-date'), **args) - -def CreationTime(**args): - return Element(qname = (TEXTNS,'creation-time'), **args) - -def Creator(**args): - return Element(qname = (TEXTNS,'creator'), **args) - -def DatabaseDisplay(**args): - return Element(qname = (TEXTNS,'database-display'), **args) - -def DatabaseName(**args): - return Element(qname = (TEXTNS,'database-name'), **args) - -def DatabaseNext(**args): - return Element(qname = (TEXTNS,'database-next'), **args) - -def DatabaseRowNumber(**args): - return Element(qname = (TEXTNS,'database-row-number'), **args) - -def DatabaseRowSelect(**args): - return Element(qname = (TEXTNS,'database-row-select'), **args) - -def Date(**args): - return Element(qname = (TEXTNS,'date'), **args) - -def DdeConnection(**args): - return Element(qname = (TEXTNS,'dde-connection'), **args) - -def DdeConnectionDecl(**args): - return Element(qname = (TEXTNS,'dde-connection-decl'), **args) - -def DdeConnectionDecls(**args): - return Element(qname = (TEXTNS,'dde-connection-decls'), **args) - -def Deletion(**args): - return Element(qname = (TEXTNS,'deletion'), **args) - -def Description(**args): - return Element(qname = (TEXTNS,'description'), **args) - -def EditingCycles(**args): - return Element(qname = (TEXTNS,'editing-cycles'), **args) - -def EditingDuration(**args): - return Element(qname = (TEXTNS,'editing-duration'), **args) - -def ExecuteMacro(**args): - return Element(qname = (TEXTNS,'execute-macro'), **args) - -def Expression(**args): - return Element(qname = (TEXTNS,'expression'), **args) - -def FileName(**args): - return Element(qname = (TEXTNS,'file-name'), **args) - -def FormatChange(**args): - return Element(qname = (TEXTNS,'format-change'), **args) - -def H(**args): - return Element(qname = (TEXTNS, 'h'), **args) - -def HiddenParagraph(**args): - return Element(qname = (TEXTNS,'hidden-paragraph'), **args) - -def HiddenText(**args): - return Element(qname = (TEXTNS,'hidden-text'), **args) - -def IllustrationIndex(**args): - return Element(qname = (TEXTNS,'illustration-index'), **args) - -def IllustrationIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'illustration-index-entry-template'), **args) - -def IllustrationIndexSource(**args): - return Element(qname = (TEXTNS,'illustration-index-source'), **args) - -def ImageCount(**args): - return Element(qname = (TEXTNS,'image-count'), **args) - -def IndexBody(**args): - return Element(qname = (TEXTNS,'index-body'), **args) - -def IndexEntryBibliography(**args): - return Element(qname = (TEXTNS,'index-entry-bibliography'), **args) - -def IndexEntryChapter(**args): - return Element(qname = (TEXTNS,'index-entry-chapter'), **args) - -def IndexEntryLinkEnd(**args): - return Element(qname = (TEXTNS,'index-entry-link-end'), **args) - -def IndexEntryLinkStart(**args): - return Element(qname = (TEXTNS,'index-entry-link-start'), **args) - -def IndexEntryPageNumber(**args): - return Element(qname = (TEXTNS,'index-entry-page-number'), **args) - -def IndexEntrySpan(**args): - return Element(qname = (TEXTNS,'index-entry-span'), **args) - -def IndexEntryTabStop(**args): - return Element(qname = (TEXTNS,'index-entry-tab-stop'), **args) - -def IndexEntryText(**args): - return Element(qname = (TEXTNS,'index-entry-text'), **args) - -def IndexSourceStyle(**args): - return Element(qname = (TEXTNS,'index-source-style'), **args) - -def IndexSourceStyles(**args): - return Element(qname = (TEXTNS,'index-source-styles'), **args) - -def IndexTitle(**args): - return Element(qname = (TEXTNS,'index-title'), **args) - -def IndexTitleTemplate(**args): - return Element(qname = (TEXTNS,'index-title-template'), **args) - -def InitialCreator(**args): - return Element(qname = (TEXTNS,'initial-creator'), **args) - -def Insertion(**args): - return Element(qname = (TEXTNS,'insertion'), **args) - -def Keywords(**args): - return Element(qname = (TEXTNS,'keywords'), **args) - -def LineBreak(**args): - return Element(qname = (TEXTNS,'line-break'), **args) - -def LinenumberingConfiguration(**args): - return Element(qname = (TEXTNS,'linenumbering-configuration'), **args) - -def LinenumberingSeparator(**args): - return Element(qname = (TEXTNS,'linenumbering-separator'), **args) - -def List(**args): - return Element(qname = (TEXTNS,'list'), **args) - -def ListHeader(**args): - return Element(qname = (TEXTNS,'list-header'), **args) - -def ListItem(**args): - return Element(qname = (TEXTNS,'list-item'), **args) - -def ListLevelStyleBullet(**args): - return Element(qname = (TEXTNS,'list-level-style-bullet'), **args) - -def ListLevelStyleImage(**args): - return Element(qname = (TEXTNS,'list-level-style-image'), **args) - -def ListLevelStyleNumber(**args): - return Element(qname = (TEXTNS,'list-level-style-number'), **args) - -def ListStyle(**args): - return StyleElement(qname = (TEXTNS,'list-style'), **args) - -def Measure(**args): - return Element(qname = (TEXTNS,'measure'), **args) - -def ModificationDate(**args): - return Element(qname = (TEXTNS,'modification-date'), **args) - -def ModificationTime(**args): - return Element(qname = (TEXTNS,'modification-time'), **args) - -def Note(**args): - return Element(qname = (TEXTNS,'note'), **args) - -def NoteBody(**args): - return Element(qname = (TEXTNS,'note-body'), **args) - -def NoteCitation(**args): - return Element(qname = (TEXTNS,'note-citation'), **args) - -def NoteContinuationNoticeBackward(**args): - return Element(qname = (TEXTNS,'note-continuation-notice-backward'), **args) - -def NoteContinuationNoticeForward(**args): - return Element(qname = (TEXTNS,'note-continuation-notice-forward'), **args) - -def NoteRef(**args): - return Element(qname = (TEXTNS,'note-ref'), **args) - -def NotesConfiguration(**args): - return Element(qname = (TEXTNS,'notes-configuration'), **args) - -def Number(**args): - return Element(qname = (TEXTNS,'number'), **args) - -def NumberedParagraph(**args): - return Element(qname = (TEXTNS,'numbered-paragraph'), **args) - -def ObjectCount(**args): - return Element(qname = (TEXTNS,'object-count'), **args) - -def ObjectIndex(**args): - return Element(qname = (TEXTNS,'object-index'), **args) - -def ObjectIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'object-index-entry-template'), **args) - -def ObjectIndexSource(**args): - return Element(qname = (TEXTNS,'object-index-source'), **args) - -def OutlineLevelStyle(**args): - return Element(qname = (TEXTNS,'outline-level-style'), **args) - -def OutlineStyle(**args): - return Element(qname = (TEXTNS,'outline-style'), **args) - -def P(**args): - return Element(qname = (TEXTNS, 'p'), **args) - -def Page(**args): - return Element(qname = (TEXTNS,'page'), **args) - -def PageContinuation(**args): - return Element(qname = (TEXTNS,'page-continuation'), **args) - -def PageCount(**args): - return Element(qname = (TEXTNS,'page-count'), **args) - -def PageNumber(**args): - return Element(qname = (TEXTNS,'page-number'), **args) - -def PageSequence(**args): - return Element(qname = (TEXTNS,'page-sequence'), **args) - -def PageVariableGet(**args): - return Element(qname = (TEXTNS,'page-variable-get'), **args) - -def PageVariableSet(**args): - return Element(qname = (TEXTNS,'page-variable-set'), **args) - -def ParagraphCount(**args): - return Element(qname = (TEXTNS,'paragraph-count'), **args) - -def Placeholder(**args): - return Element(qname = (TEXTNS,'placeholder'), **args) - -def PrintDate(**args): - return Element(qname = (TEXTNS,'print-date'), **args) - -def PrintTime(**args): - return Element(qname = (TEXTNS,'print-time'), **args) - -def PrintedBy(**args): - return Element(qname = (TEXTNS,'printed-by'), **args) - -def ReferenceMark(**args): - return Element(qname = (TEXTNS,'reference-mark'), **args) - -def ReferenceMarkEnd(**args): - return Element(qname = (TEXTNS,'reference-mark-end'), **args) - -def ReferenceMarkStart(**args): - return Element(qname = (TEXTNS,'reference-mark-start'), **args) - -def ReferenceRef(**args): - return Element(qname = (TEXTNS,'reference-ref'), **args) - -def Ruby(**args): - return Element(qname = (TEXTNS,'ruby'), **args) - -def RubyBase(**args): - return Element(qname = (TEXTNS,'ruby-base'), **args) - -def RubyText(**args): - return Element(qname = (TEXTNS,'ruby-text'), **args) - -def S(**args): - return Element(qname = (TEXTNS,'s'), **args) - -def Script(**args): - return Element(qname = (TEXTNS,'script'), **args) - -def Section(**args): - return Element(qname = (TEXTNS,'section'), **args) - -def SectionSource(**args): - return Element(qname = (TEXTNS,'section-source'), **args) - -def SenderCity(**args): - return Element(qname = (TEXTNS,'sender-city'), **args) - -def SenderCompany(**args): - return Element(qname = (TEXTNS,'sender-company'), **args) - -def SenderCountry(**args): - return Element(qname = (TEXTNS,'sender-country'), **args) - -def SenderEmail(**args): - return Element(qname = (TEXTNS,'sender-email'), **args) - -def SenderFax(**args): - return Element(qname = (TEXTNS,'sender-fax'), **args) - -def SenderFirstname(**args): - return Element(qname = (TEXTNS,'sender-firstname'), **args) - -def SenderInitials(**args): - return Element(qname = (TEXTNS,'sender-initials'), **args) - -def SenderLastname(**args): - return Element(qname = (TEXTNS,'sender-lastname'), **args) - -def SenderPhonePrivate(**args): - return Element(qname = (TEXTNS,'sender-phone-private'), **args) - -def SenderPhoneWork(**args): - return Element(qname = (TEXTNS,'sender-phone-work'), **args) - -def SenderPosition(**args): - return Element(qname = (TEXTNS,'sender-position'), **args) - -def SenderPostalCode(**args): - return Element(qname = (TEXTNS,'sender-postal-code'), **args) - -def SenderStateOrProvince(**args): - return Element(qname = (TEXTNS,'sender-state-or-province'), **args) - -def SenderStreet(**args): - return Element(qname = (TEXTNS,'sender-street'), **args) - -def SenderTitle(**args): - return Element(qname = (TEXTNS,'sender-title'), **args) - -def Sequence(**args): - return Element(qname = (TEXTNS,'sequence'), **args) - -def SequenceDecl(**args): - return Element(qname = (TEXTNS,'sequence-decl'), **args) - -def SequenceDecls(**args): - return Element(qname = (TEXTNS,'sequence-decls'), **args) - -def SequenceRef(**args): - return Element(qname = (TEXTNS,'sequence-ref'), **args) - -def SheetName(**args): - return Element(qname = (TEXTNS,'sheet-name'), **args) - -def SoftPageBreak(**args): - return Element(qname = (TEXTNS,'soft-page-break'), **args) - -def SortKey(**args): - return Element(qname = (TEXTNS,'sort-key'), **args) - -def Span(**args): - return Element(qname = (TEXTNS,'span'), **args) - -def Subject(**args): - return Element(qname = (TEXTNS,'subject'), **args) - -def Tab(**args): - return Element(qname = (TEXTNS,'tab'), **args) - -def TableCount(**args): - return Element(qname = (TEXTNS,'table-count'), **args) - -def TableFormula(**args): - return Element(qname = (TEXTNS,'table-formula'), **args) - -def TableIndex(**args): - return Element(qname = (TEXTNS,'table-index'), **args) - -def TableIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'table-index-entry-template'), **args) - -def TableIndexSource(**args): - return Element(qname = (TEXTNS,'table-index-source'), **args) - -def TableOfContent(**args): - return Element(qname = (TEXTNS,'table-of-content'), **args) - -def TableOfContentEntryTemplate(**args): - return Element(qname = (TEXTNS,'table-of-content-entry-template'), **args) - -def TableOfContentSource(**args): - return Element(qname = (TEXTNS,'table-of-content-source'), **args) - -def TemplateName(**args): - return Element(qname = (TEXTNS,'template-name'), **args) - -def TextInput(**args): - return Element(qname = (TEXTNS,'text-input'), **args) - -def Time(**args): - return Element(qname = (TEXTNS,'time'), **args) - -def Title(**args): - return Element(qname = (TEXTNS,'title'), **args) - -def TocMark(**args): - return Element(qname = (TEXTNS,'toc-mark'), **args) - -def TocMarkEnd(**args): - return Element(qname = (TEXTNS,'toc-mark-end'), **args) - -def TocMarkStart(**args): - return Element(qname = (TEXTNS,'toc-mark-start'), **args) - -def TrackedChanges(**args): - return Element(qname = (TEXTNS,'tracked-changes'), **args) - -def UserDefined(**args): - return Element(qname = (TEXTNS,'user-defined'), **args) - -def UserFieldDecl(**args): - return Element(qname = (TEXTNS,'user-field-decl'), **args) - -def UserFieldDecls(**args): - return Element(qname = (TEXTNS,'user-field-decls'), **args) - -def UserFieldGet(**args): - return Element(qname = (TEXTNS,'user-field-get'), **args) - -def UserFieldInput(**args): - return Element(qname = (TEXTNS,'user-field-input'), **args) - -def UserIndex(**args): - return Element(qname = (TEXTNS,'user-index'), **args) - -def UserIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'user-index-entry-template'), **args) - -def UserIndexMark(**args): - return Element(qname = (TEXTNS,'user-index-mark'), **args) - -def UserIndexMarkEnd(**args): - return Element(qname = (TEXTNS,'user-index-mark-end'), **args) - -def UserIndexMarkStart(**args): - return Element(qname = (TEXTNS,'user-index-mark-start'), **args) - -def UserIndexSource(**args): - return Element(qname = (TEXTNS,'user-index-source'), **args) - -def VariableDecl(**args): - return Element(qname = (TEXTNS,'variable-decl'), **args) - -def VariableDecls(**args): - return Element(qname = (TEXTNS,'variable-decls'), **args) - -def VariableGet(**args): - return Element(qname = (TEXTNS,'variable-get'), **args) - -def VariableInput(**args): - return Element(qname = (TEXTNS,'variable-input'), **args) - -def VariableSet(**args): - return Element(qname = (TEXTNS,'variable-set'), **args) - -def WordCount(**args): - return Element(qname = (TEXTNS,'word-count'), **args) - diff --git a/tablib/packages/odf/thumbnail.py b/tablib/packages/odf/thumbnail.py deleted file mode 100644 index d6388ccb..00000000 --- a/tablib/packages/odf/thumbnail.py +++ /dev/null @@ -1,427 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# This contains a 128x128 px thumbnail in PNG format -# Taken from http://www.zwahlendesign.ch/en/node/20 -# openoffice_icons/openoffice_icons_linux/openoffice11.png -# License: Freeware -import base64 - -iconstr = """\ -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 -N38FAAAAAElFTkSuQmCC\ -""" - -def thumbnail(): - icon = base64.decodestring(iconstr) - return icon - -if __name__ == "__main__": - icon = thumbnail() - f = file("thumbnail.png","wb") - f.write(icon) - f.close() diff --git a/tablib/packages/odf/userfield.py b/tablib/packages/odf/userfield.py deleted file mode 100644 index 196bae17..00000000 --- a/tablib/packages/odf/userfield.py +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2009 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): Michael Howitz, gocept gmbh & co. kg -# -# $Id: userfield.py 447 2008-07-10 20:01:30Z roug $ - -"""Class to show and manipulate user fields in odf documents.""" - -import sys -import zipfile - -from odf.text import UserFieldDecl -from odf.namespaces import OFFICENS -from odf.opendocument import load - -OUTENCODING = "utf-8" - - -# OpenDocument v.1.0 section 6.7.1 -VALUE_TYPES = { - 'float': (OFFICENS, u'value'), - 'percentage': (OFFICENS, u'value'), - 'currency': (OFFICENS, u'value'), - 'date': (OFFICENS, u'date-value'), - 'time': (OFFICENS, u'time-value'), - 'boolean': (OFFICENS, u'boolean-value'), - 'string': (OFFICENS, u'string-value'), - } - - -class UserFields(object): - """List, view and manipulate user fields.""" - - # these attributes can be a filename or a file like object - src_file = None - dest_file = None - - def __init__(self, src=None, dest=None): - """Constructor - - src ... source document name, file like object or None for stdin - dest ... destination document name, file like object or None for stdout - - """ - self.src_file = src - self.dest_file = dest - self.document = None - - def loaddoc(self): - if isinstance(self.src_file, basestring): - # src_file is a filename, check if it is a zip-file - if not zipfile.is_zipfile(self.src_file): - raise TypeError("%s is no odt file." % self.src_file) - elif self.src_file is None: - # use stdin if no file given - self.src_file = sys.stdin - - self.document = load(self.src_file) - - def savedoc(self): - # write output - if self.dest_file is None: - # use stdout if no filename given - self.document.save('-') - else: - self.document.save(self.dest_file) - - def list_fields(self): - """List (extract) all known user-fields. - - Returns list of user-field names. - - """ - return [x[0] for x in self.list_fields_and_values()] - - def list_fields_and_values(self, field_names=None): - """List (extract) user-fields with type and value. - - field_names ... list of field names to show or None for all. - - Returns list of tuples (, , ). - - """ - self.loaddoc() - found_fields = [] - all_fields = self.document.getElementsByType(UserFieldDecl) - for f in all_fields: - value_type = f.getAttribute('valuetype') - if value_type == 'string': - value = f.getAttribute('stringvalue') - else: - value = f.getAttribute('value') - field_name = f.getAttribute('name') - - if field_names is None or field_name in field_names: - found_fields.append((field_name.encode(OUTENCODING), - value_type.encode(OUTENCODING), - value.encode(OUTENCODING))) - return found_fields - - def list_values(self, field_names): - """Extract the contents of given field names from the file. - - field_names ... list of field names - - Returns list of field values. - - """ - return [x[2] for x in self.list_fields_and_values(field_names)] - - def get(self, field_name): - """Extract the contents of this field from the file. - - Returns field value or None if field does not exist. - - """ - values = self.list_values([field_name]) - if not values: - return None - return values[0] - - def get_type_and_value(self, field_name): - """Extract the type and contents of this field from the file. - - Returns tuple (, ) or None if field does not exist. - - """ - fields = self.list_fields_and_values([field_name]) - if not fields: - return None - field_name, value_type, value = fields[0] - return value_type, value - - def update(self, data): - """Set the value of user fields. The field types will be the same. - - data ... dict, with field name as key, field value as value - - Returns None - - """ - self.loaddoc() - all_fields = self.document.getElementsByType(UserFieldDecl) - for f in all_fields: - field_name = f.getAttribute('name') - if data.has_key(field_name): - value_type = f.getAttribute('valuetype') - value = data.get(field_name) - if value_type == 'string': - f.setAttribute('stringvalue', value) - else: - f.setAttribute('value', value) - self.savedoc() - diff --git a/tablib/packages/odf/xforms.py b/tablib/packages/odf/xforms.py deleted file mode 100644 index f28b96e2..00000000 --- a/tablib/packages/odf/xforms.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- 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 XFORMSNS -from element import Element - -# ODF 1.0 section 11.2 -# XForms is designed to be embedded in another XML format. -# Autogenerated -def Model(**args): - return Element(qname = (XFORMSNS,'model'), **args) - -def Instance(**args): - return Element(qname = (XFORMSNS,'instance'), **args) - -def Bind(**args): - return Element(qname = (XFORMSNS,'bind'), **args) diff --git a/tablib/packages/odf3/__init__.py b/tablib/packages/odf3/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tablib/packages/odf3/anim.py b/tablib/packages/odf3/anim.py deleted file mode 100644 index 21a78521..00000000 --- a/tablib/packages/odf3/anim.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- 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/tablib/packages/odf3/attrconverters.py b/tablib/packages/odf3/attrconverters.py deleted file mode 100644 index c6cb8bf0..00000000 --- a/tablib/packages/odf3/attrconverters.py +++ /dev/null @@ -1,1484 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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 str(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): - """ A RGB color in conformance with §5.9.11 of [XSL], that is a RGB color in notation “#rrggbb”, where - rr, gg and bb are 8-bit hexadecimal digits. - """ - 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): - """ A dateOrDateTime value is either an [xmlschema-2] date value or an [xmlschema-2] dateTime - value. - """ - return str(arg) - -def cnv_dateTime(attribute, arg, element): - """ A dateOrDateTime value is either an [xmlschema-2] date value or an [xmlschema-2] dateTime - value. - """ - 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): - """ A style family """ - 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 __save_prefix(attribute, arg, element): - prefix = arg.split(':',1)[0] - if prefix == arg: - return str(arg) - namespace = element.get_knownns(prefix) - if namespace is None: - #raise ValueError, "'%s' is an unknown prefix" % str(prefix) - return str(arg) - p = element.get_nsprefix(namespace) - return str(arg) - -def cnv_formula(attribute, arg, element): - """ A string containing a formula. Formulas do not have a predefined syntax, but the string should - begin with a namespace prefix, followed by a “:” (COLON, U+003A) separator, followed by the text - of the formula. The namespace bound to the prefix determines the syntax and semantics of the - formula. - """ - return __save_prefix(attribute, arg, element) - -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): - """ A (positive or negative) physical length, consisting of magnitude and unit, in conformance with the - Units of Measure defined in §5.9.13 of [XSL]. - """ - 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 __save_prefix(attribute, arg, element) - -def cnv_NCName(attribute, arg, element): - """ NCName is defined in http://www.w3.org/TR/REC-xml-names/#NT-NCName - Essentially an XML name minus ':' - """ - if isinstance(arg, str): - 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 str: - 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_positiveInteger(attribute, arg, element): - return str(arg) - -def cnv_string(attribute, arg, element): - return str(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,'audio-level'), None): cnv_double, - ((ANIMNS,'color-interpolation'), None): cnv_string, - ((ANIMNS,'color-interpolation-direction'), None): cnv_string, - ((ANIMNS,'command'), None): cnv_string, - ((ANIMNS,'formula'), None): cnv_string, - ((ANIMNS,'id'), None): cnv_ID, - ((ANIMNS,'iterate-interval'), None): cnv_duration, - ((ANIMNS,'iterate-type'), None): cnv_string, - ((ANIMNS,'name'), None): cnv_string, - ((ANIMNS,'sub-item'), None): cnv_string, - ((ANIMNS,'value'), None): cnv_string, -# ((DBNS,u'type'), None): cnv_namespacedToken, - ((CHARTNS,'attached-axis'), None): cnv_string, - ((CHARTNS,'class'), (CHARTNS,'grid')): cnv_major_minor, - ((CHARTNS,'class'), None): cnv_namespacedToken, - ((CHARTNS,'column-mapping'), None): cnv_string, - ((CHARTNS,'connect-bars'), None): cnv_boolean, - ((CHARTNS,'data-label-number'), None): cnv_string, - ((CHARTNS,'data-label-symbol'), None): cnv_boolean, - ((CHARTNS,'data-label-text'), None): cnv_boolean, - ((CHARTNS,'data-source-has-labels'), None): cnv_data_source_has_labels, - ((CHARTNS,'deep'), None): cnv_boolean, - ((CHARTNS,'dimension'), None): cnv_string, - ((CHARTNS,'display-label'), None): cnv_boolean, - ((CHARTNS,'error-category'), None): cnv_string, - ((CHARTNS,'error-lower-indicator'), None): cnv_boolean, - ((CHARTNS,'error-lower-limit'), None): cnv_string, - ((CHARTNS,'error-margin'), None): cnv_string, - ((CHARTNS,'error-percentage'), None): cnv_string, - ((CHARTNS,'error-upper-indicator'), None): cnv_boolean, - ((CHARTNS,'error-upper-limit'), None): cnv_string, - ((CHARTNS,'gap-width'), None): cnv_string, - ((CHARTNS,'interpolation'), None): cnv_string, - ((CHARTNS,'interval-major'), None): cnv_string, - ((CHARTNS,'interval-minor-divisor'), None): cnv_string, - ((CHARTNS,'japanese-candle-stick'), None): cnv_boolean, - ((CHARTNS,'label-arrangement'), None): cnv_string, - ((CHARTNS,'label-cell-address'), None): cnv_string, - ((CHARTNS,'legend-align'), None): cnv_string, - ((CHARTNS,'legend-position'), None): cnv_legend_position, - ((CHARTNS,'lines'), None): cnv_boolean, - ((CHARTNS,'link-data-style-to-source'), None): cnv_boolean, - ((CHARTNS,'logarithmic'), None): cnv_boolean, - ((CHARTNS,'maximum'), None): cnv_string, - ((CHARTNS,'mean-value'), None): cnv_boolean, - ((CHARTNS,'minimum'), None): cnv_string, - ((CHARTNS,'name'), None): cnv_string, - ((CHARTNS,'origin'), None): cnv_string, - ((CHARTNS,'overlap'), None): cnv_string, - ((CHARTNS,'percentage'), None): cnv_boolean, - ((CHARTNS,'pie-offset'), None): cnv_string, - ((CHARTNS,'regression-type'), None): cnv_string, - ((CHARTNS,'repeated'), None): cnv_nonNegativeInteger, - ((CHARTNS,'row-mapping'), None): cnv_string, - ((CHARTNS,'scale-text'), None): cnv_boolean, - ((CHARTNS,'series-source'), None): cnv_string, - ((CHARTNS,'solid-type'), None): cnv_string, - ((CHARTNS,'spline-order'), None): cnv_string, - ((CHARTNS,'spline-resolution'), None): cnv_string, - ((CHARTNS,'stacked'), None): cnv_boolean, - ((CHARTNS,'style-name'), None): cnv_StyleNameRef, - ((CHARTNS,'symbol-height'), None): cnv_string, - ((CHARTNS,'symbol-name'), None): cnv_string, - ((CHARTNS,'symbol-type'), None): cnv_string, - ((CHARTNS,'symbol-width'), None): cnv_string, - ((CHARTNS,'text-overlap'), None): cnv_boolean, - ((CHARTNS,'three-dimensional'), None): cnv_boolean, - ((CHARTNS,'tick-marks-major-inner'), None): cnv_boolean, - ((CHARTNS,'tick-marks-major-outer'), None): cnv_boolean, - ((CHARTNS,'tick-marks-minor-inner'), None): cnv_boolean, - ((CHARTNS,'tick-marks-minor-outer'), None): cnv_boolean, - ((CHARTNS,'values-cell-range-address'), None): cnv_string, - ((CHARTNS,'vertical'), None): cnv_boolean, - ((CHARTNS,'visible'), None): cnv_boolean, - ((CONFIGNS,'name'), None): cnv_formula, - ((CONFIGNS,'type'), None): cnv_configtype, - ((DR3DNS,'ambient-color'), None): cnv_string, - ((DR3DNS,'back-scale'), None): cnv_string, - ((DR3DNS,'backface-culling'), None): cnv_string, - ((DR3DNS,'center'), None): cnv_string, - ((DR3DNS,'close-back'), None): cnv_boolean, - ((DR3DNS,'close-front'), None): cnv_boolean, - ((DR3DNS,'depth'), None): cnv_length, - ((DR3DNS,'diffuse-color'), None): cnv_string, - ((DR3DNS,'direction'), None): cnv_string, - ((DR3DNS,'distance'), None): cnv_length, - ((DR3DNS,'edge-rounding'), None): cnv_string, - ((DR3DNS,'edge-rounding-mode'), None): cnv_string, - ((DR3DNS,'emissive-color'), None): cnv_string, - ((DR3DNS,'enabled'), None): cnv_boolean, - ((DR3DNS,'end-angle'), None): cnv_string, - ((DR3DNS,'focal-length'), None): cnv_length, - ((DR3DNS,'horizontal-segments'), None): cnv_string, - ((DR3DNS,'lighting-mode'), None): cnv_boolean, - ((DR3DNS,'max-edge'), None): cnv_string, - ((DR3DNS,'min-edge'), None): cnv_string, - ((DR3DNS,'normals-direction'), None): cnv_string, - ((DR3DNS,'normals-kind'), None): cnv_string, - ((DR3DNS,'projection'), None): cnv_string, - ((DR3DNS,'shade-mode'), None): cnv_string, - ((DR3DNS,'shadow'), None): cnv_string, - ((DR3DNS,'shadow-slant'), None): cnv_nonNegativeInteger, - ((DR3DNS,'shininess'), None): cnv_string, - ((DR3DNS,'size'), None): cnv_string, - ((DR3DNS,'specular'), None): cnv_boolean, - ((DR3DNS,'specular-color'), None): cnv_string, - ((DR3DNS,'texture-filter'), None): cnv_string, - ((DR3DNS,'texture-generation-mode-x'), None): cnv_string, - ((DR3DNS,'texture-generation-mode-y'), None): cnv_string, - ((DR3DNS,'texture-kind'), None): cnv_string, - ((DR3DNS,'texture-mode'), None): cnv_string, - ((DR3DNS,'transform'), None): cnv_string, - ((DR3DNS,'vertical-segments'), None): cnv_string, - ((DR3DNS,'vpn'), None): cnv_string, - ((DR3DNS,'vrp'), None): cnv_string, - ((DR3DNS,'vup'), None): cnv_string, - ((DRAWNS,'align'), None): cnv_string, - ((DRAWNS,'angle'), None): cnv_integer, - ((DRAWNS,'archive'), None): cnv_string, - ((DRAWNS,'auto-grow-height'), None): cnv_boolean, - ((DRAWNS,'auto-grow-width'), None): cnv_boolean, - ((DRAWNS,'background-size'), None): cnv_string, - ((DRAWNS,'blue'), None): cnv_string, - ((DRAWNS,'border'), None): cnv_string, - ((DRAWNS,'caption-angle'), None): cnv_string, - ((DRAWNS,'caption-angle-type'), None): cnv_string, - ((DRAWNS,'caption-escape'), None): cnv_string, - ((DRAWNS,'caption-escape-direction'), None): cnv_string, - ((DRAWNS,'caption-fit-line-length'), None): cnv_boolean, - ((DRAWNS,'caption-gap'), None): cnv_string, - ((DRAWNS,'caption-line-length'), None): cnv_length, - ((DRAWNS,'caption-point-x'), None): cnv_string, - ((DRAWNS,'caption-point-y'), None): cnv_string, - ((DRAWNS,'caption-id'), None): cnv_IDREF, - ((DRAWNS,'caption-type'), None): cnv_string, - ((DRAWNS,'chain-next-name'), None): cnv_string, - ((DRAWNS,'class-id'), None): cnv_string, - ((DRAWNS,'class-names'), None): cnv_NCNames, - ((DRAWNS,'code'), None): cnv_string, - ((DRAWNS,'color'), None): cnv_string, - ((DRAWNS,'color-inversion'), None): cnv_boolean, - ((DRAWNS,'color-mode'), None): cnv_string, - ((DRAWNS,'concave'), None): cnv_string, - ((DRAWNS,'concentric-gradient-fill-allowed'), None): cnv_boolean, - ((DRAWNS,'contrast'), None): cnv_string, - ((DRAWNS,'control'), None): cnv_IDREF, - ((DRAWNS,'copy-of'), None): cnv_string, - ((DRAWNS,'corner-radius'), None): cnv_length, - ((DRAWNS,'corners'), None): cnv_positiveInteger, - ((DRAWNS,'cx'), None): cnv_string, - ((DRAWNS,'cy'), None): cnv_string, - ((DRAWNS,'data'), None): cnv_string, - ((DRAWNS,'decimal-places'), None): cnv_string, - ((DRAWNS,'display'), None): cnv_string, - ((DRAWNS,'display-name'), None): cnv_string, - ((DRAWNS,'distance'), None): cnv_lengthorpercent, - ((DRAWNS,'dots1'), None): cnv_integer, - ((DRAWNS,'dots1-length'), None): cnv_lengthorpercent, - ((DRAWNS,'dots2'), None): cnv_integer, - ((DRAWNS,'dots2-length'), None): cnv_lengthorpercent, - ((DRAWNS,'end-angle'), None): cnv_double, - ((DRAWNS,'end'), None): cnv_string, - ((DRAWNS,'end-color'), None): cnv_string, - ((DRAWNS,'end-glue-point'), None): cnv_nonNegativeInteger, - ((DRAWNS,'end-guide'), None): cnv_length, - ((DRAWNS,'end-intensity'), None): cnv_string, - ((DRAWNS,'end-line-spacing-horizontal'), None): cnv_string, - ((DRAWNS,'end-line-spacing-vertical'), None): cnv_string, - ((DRAWNS,'end-shape'), None): cnv_IDREF, - ((DRAWNS,'engine'), None): cnv_namespacedToken, - ((DRAWNS,'enhanced-path'), None): cnv_string, - ((DRAWNS,'escape-direction'), None): cnv_string, - ((DRAWNS,'extrusion-allowed'), None): cnv_boolean, - ((DRAWNS,'extrusion-brightness'), None): cnv_string, - ((DRAWNS,'extrusion'), None): cnv_boolean, - ((DRAWNS,'extrusion-color'), None): cnv_boolean, - ((DRAWNS,'extrusion-depth'), None): cnv_double, - ((DRAWNS,'extrusion-diffusion'), None): cnv_string, - ((DRAWNS,'extrusion-first-light-direction'), None): cnv_string, - ((DRAWNS,'extrusion-first-light-harsh'), None): cnv_boolean, - ((DRAWNS,'extrusion-first-light-level'), None): cnv_string, - ((DRAWNS,'extrusion-light-face'), None): cnv_boolean, - ((DRAWNS,'extrusion-metal'), None): cnv_boolean, - ((DRAWNS,'extrusion-number-of-line-segments'), None): cnv_integer, - ((DRAWNS,'extrusion-origin'), None): cnv_double, - ((DRAWNS,'extrusion-rotation-angle'), None): cnv_double, - ((DRAWNS,'extrusion-rotation-center'), None): cnv_string, - ((DRAWNS,'extrusion-second-light-direction'), None): cnv_string, - ((DRAWNS,'extrusion-second-light-harsh'), None): cnv_boolean, - ((DRAWNS,'extrusion-second-light-level'), None): cnv_string, - ((DRAWNS,'extrusion-shininess'), None): cnv_string, - ((DRAWNS,'extrusion-skew'), None): cnv_double, - ((DRAWNS,'extrusion-specularity'), None): cnv_string, - ((DRAWNS,'extrusion-viewpoint'), None): cnv_string, - ((DRAWNS,'fill'), None): cnv_string, - ((DRAWNS,'fill-color'), None): cnv_string, - ((DRAWNS,'fill-gradient-name'), None): cnv_string, - ((DRAWNS,'fill-hatch-name'), None): cnv_string, - ((DRAWNS,'fill-hatch-solid'), None): cnv_boolean, - ((DRAWNS,'fill-image-height'), None): cnv_lengthorpercent, - ((DRAWNS,'fill-image-name'), None): cnv_DrawNameRef, - ((DRAWNS,'fill-image-ref-point'), None): cnv_string, - ((DRAWNS,'fill-image-ref-point-x'), None): cnv_string, - ((DRAWNS,'fill-image-ref-point-y'), None): cnv_string, - ((DRAWNS,'fill-image-width'), None): cnv_lengthorpercent, - ((DRAWNS,'filter-name'), None): cnv_string, - ((DRAWNS,'fit-to-contour'), None): cnv_boolean, - ((DRAWNS,'fit-to-size'), None): cnv_boolean, - ((DRAWNS,'formula'), None): cnv_string, - ((DRAWNS,'frame-display-border'), None): cnv_boolean, - ((DRAWNS,'frame-display-scrollbar'), None): cnv_boolean, - ((DRAWNS,'frame-margin-horizontal'), None): cnv_string, - ((DRAWNS,'frame-margin-vertical'), None): cnv_string, - ((DRAWNS,'frame-name'), None): cnv_string, - ((DRAWNS,'gamma'), None): cnv_string, - ((DRAWNS,'glue-point-leaving-directions'), None): cnv_string, - ((DRAWNS,'glue-point-type'), None): cnv_string, - ((DRAWNS,'glue-points'), None): cnv_string, - ((DRAWNS,'gradient-step-count'), None): cnv_string, - ((DRAWNS,'green'), None): cnv_string, - ((DRAWNS,'guide-distance'), None): cnv_string, - ((DRAWNS,'guide-overhang'), None): cnv_length, - ((DRAWNS,'handle-mirror-horizontal'), None): cnv_boolean, - ((DRAWNS,'handle-mirror-vertical'), None): cnv_boolean, - ((DRAWNS,'handle-polar'), None): cnv_string, - ((DRAWNS,'handle-position'), None): cnv_string, - ((DRAWNS,'handle-radius-range-maximum'), None): cnv_string, - ((DRAWNS,'handle-radius-range-minimum'), None): cnv_string, - ((DRAWNS,'handle-range-x-maximum'), None): cnv_string, - ((DRAWNS,'handle-range-x-minimum'), None): cnv_string, - ((DRAWNS,'handle-range-y-maximum'), None): cnv_string, - ((DRAWNS,'handle-range-y-minimum'), None): cnv_string, - ((DRAWNS,'handle-switched'), None): cnv_boolean, -# ((DRAWNS,u'id'), None): cnv_ID, -# ((DRAWNS,u'id'), None): cnv_nonNegativeInteger, # ?? line 6581 in RNG - ((DRAWNS,'id'), None): cnv_string, - ((DRAWNS,'image-opacity'), None): cnv_string, - ((DRAWNS,'kind'), None): cnv_string, - ((DRAWNS,'layer'), None): cnv_string, - ((DRAWNS,'line-distance'), None): cnv_string, - ((DRAWNS,'line-skew'), None): cnv_string, - ((DRAWNS,'luminance'), None): cnv_string, - ((DRAWNS,'marker-end-center'), None): cnv_boolean, - ((DRAWNS,'marker-end'), None): cnv_string, - ((DRAWNS,'marker-end-width'), None): cnv_length, - ((DRAWNS,'marker-start-center'), None): cnv_boolean, - ((DRAWNS,'marker-start'), None): cnv_string, - ((DRAWNS,'marker-start-width'), None): cnv_length, - ((DRAWNS,'master-page-name'), None): cnv_StyleNameRef, - ((DRAWNS,'may-script'), None): cnv_boolean, - ((DRAWNS,'measure-align'), None): cnv_string, - ((DRAWNS,'measure-vertical-align'), None): cnv_string, - ((DRAWNS,'mime-type'), None): cnv_string, - ((DRAWNS,'mirror-horizontal'), None): cnv_boolean, - ((DRAWNS,'mirror-vertical'), None): cnv_boolean, - ((DRAWNS,'modifiers'), None): cnv_string, - ((DRAWNS,'name'), None): cnv_NCName, -# ((DRAWNS,u'name'), None): cnv_string, - ((DRAWNS,'nav-order'), None): cnv_IDREF, - ((DRAWNS,'nohref'), None): cnv_string, - ((DRAWNS,'notify-on-update-of-ranges'), None): cnv_string, - ((DRAWNS,'object'), None): cnv_string, - ((DRAWNS,'ole-draw-aspect'), None): cnv_string, - ((DRAWNS,'opacity'), None): cnv_string, - ((DRAWNS,'opacity-name'), None): cnv_string, - ((DRAWNS,'page-number'), None): cnv_positiveInteger, - ((DRAWNS,'parallel'), None): cnv_boolean, - ((DRAWNS,'path-stretchpoint-x'), None): cnv_double, - ((DRAWNS,'path-stretchpoint-y'), None): cnv_double, - ((DRAWNS,'placing'), None): cnv_string, - ((DRAWNS,'points'), None): cnv_points, - ((DRAWNS,'protected'), None): cnv_boolean, - ((DRAWNS,'recreate-on-edit'), None): cnv_boolean, - ((DRAWNS,'red'), None): cnv_string, - ((DRAWNS,'rotation'), None): cnv_integer, - ((DRAWNS,'secondary-fill-color'), None): cnv_string, - ((DRAWNS,'shadow'), None): cnv_string, - ((DRAWNS,'shadow-color'), None): cnv_string, - ((DRAWNS,'shadow-offset-x'), None): cnv_length, - ((DRAWNS,'shadow-offset-y'), None): cnv_length, - ((DRAWNS,'shadow-opacity'), None): cnv_string, - ((DRAWNS,'shape-id'), None): cnv_IDREF, - ((DRAWNS,'sharpness'), None): cnv_string, - ((DRAWNS,'show-unit'), None): cnv_boolean, - ((DRAWNS,'start-angle'), None): cnv_double, - ((DRAWNS,'start'), None): cnv_string, - ((DRAWNS,'start-color'), None): cnv_string, - ((DRAWNS,'start-glue-point'), None): cnv_nonNegativeInteger, - ((DRAWNS,'start-guide'), None): cnv_length, - ((DRAWNS,'start-intensity'), None): cnv_string, - ((DRAWNS,'start-line-spacing-horizontal'), None): cnv_string, - ((DRAWNS,'start-line-spacing-vertical'), None): cnv_string, - ((DRAWNS,'start-shape'), None): cnv_IDREF, - ((DRAWNS,'stroke'), None): cnv_string, - ((DRAWNS,'stroke-dash'), None): cnv_string, - ((DRAWNS,'stroke-dash-names'), None): cnv_string, - ((DRAWNS,'stroke-linejoin'), None): cnv_string, - ((DRAWNS,'style'), None): cnv_string, - ((DRAWNS,'style-name'), None): cnv_StyleNameRef, - ((DRAWNS,'symbol-color'), None): cnv_string, - ((DRAWNS,'text-areas'), None): cnv_string, - ((DRAWNS,'text-path-allowed'), None): cnv_boolean, - ((DRAWNS,'text-path'), None): cnv_boolean, - ((DRAWNS,'text-path-mode'), None): cnv_string, - ((DRAWNS,'text-path-same-letter-heights'), None): cnv_boolean, - ((DRAWNS,'text-path-scale'), None): cnv_string, - ((DRAWNS,'text-rotate-angle'), None): cnv_double, - ((DRAWNS,'text-style-name'), None): cnv_StyleNameRef, - ((DRAWNS,'textarea-horizontal-align'), None): cnv_string, - ((DRAWNS,'textarea-vertical-align'), None): cnv_string, - ((DRAWNS,'tile-repeat-offset'), None): cnv_string, - ((DRAWNS,'transform'), None): cnv_string, - ((DRAWNS,'type'), None): cnv_string, - ((DRAWNS,'unit'), None): cnv_string, - ((DRAWNS,'value'), None): cnv_string, - ((DRAWNS,'visible-area-height'), None): cnv_string, - ((DRAWNS,'visible-area-left'), None): cnv_string, - ((DRAWNS,'visible-area-top'), None): cnv_string, - ((DRAWNS,'visible-area-width'), None): cnv_string, - ((DRAWNS,'wrap-influence-on-position'), None): cnv_string, - ((DRAWNS,'z-index'), None): cnv_nonNegativeInteger, - ((FONS,'background-color'), None): cnv_string, - ((FONS,'border-bottom'), None): cnv_string, - ((FONS,'border'), None): cnv_string, - ((FONS,'border-left'), None): cnv_string, - ((FONS,'border-right'), None): cnv_string, - ((FONS,'border-top'), None): cnv_string, - ((FONS,'break-after'), None): cnv_string, - ((FONS,'break-before'), None): cnv_string, - ((FONS,'clip'), None): cnv_string, - ((FONS,'color'), None): cnv_string, - ((FONS,'column-count'), None): cnv_positiveInteger, - ((FONS,'column-gap'), None): cnv_length, - ((FONS,'country'), None): cnv_token, - ((FONS,'end-indent'), None): cnv_length, - ((FONS,'font-family'), None): cnv_string, - ((FONS,'font-size'), None): cnv_string, - ((FONS,'font-style'), None): cnv_string, - ((FONS,'font-variant'), None): cnv_string, - ((FONS,'font-weight'), None): cnv_string, - ((FONS,'height'), None): cnv_string, - ((FONS,'hyphenate'), None): cnv_boolean, - ((FONS,'hyphenation-keep'), None): cnv_string, - ((FONS,'hyphenation-ladder-count'), None): cnv_string, - ((FONS,'hyphenation-push-char-count'), None): cnv_string, - ((FONS,'hyphenation-remain-char-count'), None): cnv_string, - ((FONS,'keep-together'), None): cnv_string, - ((FONS,'keep-with-next'), None): cnv_string, - ((FONS,'language'), None): cnv_token, - ((FONS,'letter-spacing'), None): cnv_string, - ((FONS,'line-height'), None): cnv_string, - ((FONS,'margin-bottom'), None): cnv_string, - ((FONS,'margin'), None): cnv_string, - ((FONS,'margin-left'), None): cnv_string, - ((FONS,'margin-right'), None): cnv_string, - ((FONS,'margin-top'), None): cnv_string, - ((FONS,'max-height'), None): cnv_string, - ((FONS,'max-width'), None): cnv_string, - ((FONS,'min-height'), None): cnv_length, - ((FONS,'min-width'), None): cnv_string, - ((FONS,'orphans'), None): cnv_string, - ((FONS,'padding-bottom'), None): cnv_string, - ((FONS,'padding'), None): cnv_string, - ((FONS,'padding-left'), None): cnv_string, - ((FONS,'padding-right'), None): cnv_string, - ((FONS,'padding-top'), None): cnv_string, - ((FONS,'page-height'), None): cnv_length, - ((FONS,'page-width'), None): cnv_length, - ((FONS,'space-after'), None): cnv_length, - ((FONS,'space-before'), None): cnv_length, - ((FONS,'start-indent'), None): cnv_length, - ((FONS,'text-align'), None): cnv_string, - ((FONS,'text-align-last'), None): cnv_string, - ((FONS,'text-indent'), None): cnv_string, - ((FONS,'text-shadow'), None): cnv_string, - ((FONS,'text-transform'), None): cnv_string, - ((FONS,'widows'), None): cnv_string, - ((FONS,'width'), None): cnv_string, - ((FONS,'wrap-option'), None): cnv_string, - ((FORMNS,'allow-deletes'), None): cnv_boolean, - ((FORMNS,'allow-inserts'), None): cnv_boolean, - ((FORMNS,'allow-updates'), None): cnv_boolean, - ((FORMNS,'apply-design-mode'), None): cnv_boolean, - ((FORMNS,'apply-filter'), None): cnv_boolean, - ((FORMNS,'auto-complete'), None): cnv_boolean, - ((FORMNS,'automatic-focus'), None): cnv_boolean, - ((FORMNS,'bound-column'), None): cnv_string, - ((FORMNS,'button-type'), None): cnv_string, - ((FORMNS,'command'), None): cnv_string, - ((FORMNS,'command-type'), None): cnv_string, - ((FORMNS,'control-implementation'), None): cnv_namespacedToken, - ((FORMNS,'convert-empty-to-null'), None): cnv_boolean, - ((FORMNS,'current-selected'), None): cnv_boolean, - ((FORMNS,'current-state'), None): cnv_string, -# ((FORMNS,u'current-value'), None): cnv_date, -# ((FORMNS,u'current-value'), None): cnv_double, - ((FORMNS,'current-value'), None): cnv_string, -# ((FORMNS,u'current-value'), None): cnv_time, - ((FORMNS,'data-field'), None): cnv_string, - ((FORMNS,'datasource'), None): cnv_string, - ((FORMNS,'default-button'), None): cnv_boolean, - ((FORMNS,'delay-for-repeat'), None): cnv_duration, - ((FORMNS,'detail-fields'), None): cnv_string, - ((FORMNS,'disabled'), None): cnv_boolean, - ((FORMNS,'dropdown'), None): cnv_boolean, - ((FORMNS,'echo-char'), None): cnv_string, - ((FORMNS,'enctype'), None): cnv_string, - ((FORMNS,'escape-processing'), None): cnv_boolean, - ((FORMNS,'filter'), None): cnv_string, - ((FORMNS,'focus-on-click'), None): cnv_boolean, - ((FORMNS,'for'), None): cnv_string, - ((FORMNS,'id'), None): cnv_ID, - ((FORMNS,'ignore-result'), None): cnv_boolean, - ((FORMNS,'image-align'), None): cnv_string, - ((FORMNS,'image-data'), None): cnv_anyURI, - ((FORMNS,'image-position'), None): cnv_string, - ((FORMNS,'is-tristate'), None): cnv_boolean, - ((FORMNS,'label'), None): cnv_string, - ((FORMNS,'list-source'), None): cnv_string, - ((FORMNS,'list-source-type'), None): cnv_string, - ((FORMNS,'master-fields'), None): cnv_string, - ((FORMNS,'max-length'), None): cnv_nonNegativeInteger, -# ((FORMNS,u'max-value'), None): cnv_date, -# ((FORMNS,u'max-value'), None): cnv_double, - ((FORMNS,'max-value'), None): cnv_string, -# ((FORMNS,u'max-value'), None): cnv_time, - ((FORMNS,'method'), None): cnv_string, -# ((FORMNS,u'min-value'), None): cnv_date, -# ((FORMNS,u'min-value'), None): cnv_double, - ((FORMNS,'min-value'), None): cnv_string, -# ((FORMNS,u'min-value'), None): cnv_time, - ((FORMNS,'multi-line'), None): cnv_boolean, - ((FORMNS,'multiple'), None): cnv_boolean, - ((FORMNS,'name'), None): cnv_string, - ((FORMNS,'navigation-mode'), None): cnv_string, - ((FORMNS,'order'), None): cnv_string, - ((FORMNS,'orientation'), None): cnv_string, - ((FORMNS,'page-step-size'), None): cnv_positiveInteger, - ((FORMNS,'printable'), None): cnv_boolean, - ((FORMNS,'property-name'), None): cnv_string, - ((FORMNS,'readonly'), None): cnv_boolean, - ((FORMNS,'selected'), None): cnv_boolean, - ((FORMNS,'size'), None): cnv_nonNegativeInteger, - ((FORMNS,'state'), None): cnv_string, - ((FORMNS,'step-size'), None): cnv_positiveInteger, - ((FORMNS,'tab-cycle'), None): cnv_string, - ((FORMNS,'tab-index'), None): cnv_nonNegativeInteger, - ((FORMNS,'tab-stop'), None): cnv_boolean, - ((FORMNS,'text-style-name'), None): cnv_StyleNameRef, - ((FORMNS,'title'), None): cnv_string, - ((FORMNS,'toggle'), None): cnv_boolean, - ((FORMNS,'validation'), None): cnv_boolean, -# ((FORMNS,u'value'), None): cnv_date, -# ((FORMNS,u'value'), None): cnv_double, - ((FORMNS,'value'), None): cnv_string, -# ((FORMNS,u'value'), None): cnv_time, - ((FORMNS,'visual-effect'), None): cnv_string, - ((FORMNS,'xforms-list-source'), None): cnv_string, - ((FORMNS,'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,'media-type'), None): cnv_string, - ((MANIFESTNS,'salt'), None): cnv_string, - ((MANIFESTNS,'size'), None): cnv_nonNegativeInteger, - ((METANS,'cell-count'), None): cnv_nonNegativeInteger, - ((METANS,'character-count'), None): cnv_nonNegativeInteger, - ((METANS,'date'), None): cnv_dateTime, - ((METANS,'delay'), None): cnv_duration, - ((METANS,'draw-count'), None): cnv_nonNegativeInteger, - ((METANS,'frame-count'), None): cnv_nonNegativeInteger, - ((METANS,'image-count'), None): cnv_nonNegativeInteger, - ((METANS,'name'), None): cnv_string, - ((METANS,'non-whitespace-character-count'), None): cnv_nonNegativeInteger, - ((METANS,'object-count'), None): cnv_nonNegativeInteger, - ((METANS,'ole-object-count'), None): cnv_nonNegativeInteger, - ((METANS,'page-count'), None): cnv_nonNegativeInteger, - ((METANS,'paragraph-count'), None): cnv_nonNegativeInteger, - ((METANS,'row-count'), None): cnv_nonNegativeInteger, - ((METANS,'sentence-count'), None): cnv_nonNegativeInteger, - ((METANS,'syllable-count'), None): cnv_nonNegativeInteger, - ((METANS,'table-count'), None): cnv_nonNegativeInteger, - ((METANS,'value-type'), None): cnv_metavaluetype, - ((METANS,'word-count'), None): cnv_nonNegativeInteger, - ((NUMBERNS,'automatic-order'), None): cnv_boolean, - ((NUMBERNS,'calendar'), None): cnv_string, - ((NUMBERNS,'country'), None): cnv_token, - ((NUMBERNS,'decimal-places'), None): cnv_integer, - ((NUMBERNS,'decimal-replacement'), None): cnv_string, - ((NUMBERNS,'denominator-value'), None): cnv_integer, - ((NUMBERNS,'display-factor'), None): cnv_double, - ((NUMBERNS,'format-source'), None): cnv_string, - ((NUMBERNS,'grouping'), None): cnv_boolean, - ((NUMBERNS,'language'), None): cnv_token, - ((NUMBERNS,'min-denominator-digits'), None): cnv_integer, - ((NUMBERNS,'min-exponent-digits'), None): cnv_integer, - ((NUMBERNS,'min-integer-digits'), None): cnv_integer, - ((NUMBERNS,'min-numerator-digits'), None): cnv_integer, - ((NUMBERNS,'position'), None): cnv_integer, - ((NUMBERNS,'possessive-form'), None): cnv_boolean, - ((NUMBERNS,'style'), None): cnv_string, - ((NUMBERNS,'textual'), None): cnv_boolean, - ((NUMBERNS,'title'), None): cnv_string, - ((NUMBERNS,'transliteration-country'), None): cnv_token, - ((NUMBERNS,'transliteration-format'), None): cnv_string, - ((NUMBERNS,'transliteration-language'), None): cnv_token, - ((NUMBERNS,'transliteration-style'), None): cnv_string, - ((NUMBERNS,'truncate-on-overflow'), None): cnv_boolean, - ((OFFICENS,'automatic-update'), None): cnv_boolean, - ((OFFICENS,'boolean-value'), None): cnv_boolean, - ((OFFICENS,'conversion-mode'), None): cnv_string, - ((OFFICENS,'currency'), None): cnv_string, - ((OFFICENS,'date-value'), None): cnv_dateTime, - ((OFFICENS,'dde-application'), None): cnv_string, - ((OFFICENS,'dde-item'), None): cnv_string, - ((OFFICENS,'dde-topic'), None): cnv_string, - ((OFFICENS,'display'), None): cnv_boolean, - ((OFFICENS,'mimetype'), None): cnv_string, - ((OFFICENS,'name'), None): cnv_string, - ((OFFICENS,'process-content'), None): cnv_boolean, - ((OFFICENS,'server-map'), None): cnv_boolean, - ((OFFICENS,'string-value'), None): cnv_string, - ((OFFICENS,'target-frame'), None): cnv_string, - ((OFFICENS,'target-frame-name'), None): cnv_string, - ((OFFICENS,'time-value'), None): cnv_duration, - ((OFFICENS,'title'), None): cnv_string, - ((OFFICENS,'value'), None): cnv_double, - ((OFFICENS,'value-type'), None): cnv_string, - ((OFFICENS,'version'), None): cnv_string, - ((PRESENTATIONNS,'action'), None): cnv_string, - ((PRESENTATIONNS,'animations'), None): cnv_string, - ((PRESENTATIONNS,'background-objects-visible'), None): cnv_boolean, - ((PRESENTATIONNS,'background-visible'), None): cnv_boolean, - ((PRESENTATIONNS,'class'), None): cnv_string, - ((PRESENTATIONNS,'class-names'), None): cnv_NCNames, - ((PRESENTATIONNS,'delay'), None): cnv_duration, - ((PRESENTATIONNS,'direction'), None): cnv_string, - ((PRESENTATIONNS,'display-date-time'), None): cnv_boolean, - ((PRESENTATIONNS,'display-footer'), None): cnv_boolean, - ((PRESENTATIONNS,'display-header'), None): cnv_boolean, - ((PRESENTATIONNS,'display-page-number'), None): cnv_boolean, - ((PRESENTATIONNS,'duration'), None): cnv_string, - ((PRESENTATIONNS,'effect'), None): cnv_string, - ((PRESENTATIONNS,'endless'), None): cnv_boolean, - ((PRESENTATIONNS,'force-manual'), None): cnv_boolean, - ((PRESENTATIONNS,'full-screen'), None): cnv_boolean, - ((PRESENTATIONNS,'group-id'), None): cnv_string, - ((PRESENTATIONNS,'master-element'), None): cnv_IDREF, - ((PRESENTATIONNS,'mouse-as-pen'), None): cnv_boolean, - ((PRESENTATIONNS,'mouse-visible'), None): cnv_boolean, - ((PRESENTATIONNS,'name'), None): cnv_string, - ((PRESENTATIONNS,'node-type'), None): cnv_string, - ((PRESENTATIONNS,'object'), None): cnv_string, - ((PRESENTATIONNS,'pages'), None): cnv_string, - ((PRESENTATIONNS,'path-id'), None): cnv_string, - ((PRESENTATIONNS,'pause'), None): cnv_duration, - ((PRESENTATIONNS,'placeholder'), None): cnv_boolean, - ((PRESENTATIONNS,'play-full'), None): cnv_boolean, - ((PRESENTATIONNS,'presentation-page-layout-name'), None): cnv_StyleNameRef, - ((PRESENTATIONNS,'preset-class'), None): cnv_string, - ((PRESENTATIONNS,'preset-id'), None): cnv_string, - ((PRESENTATIONNS,'preset-sub-type'), None): cnv_string, - ((PRESENTATIONNS,'show'), None): cnv_string, - ((PRESENTATIONNS,'show-end-of-presentation-slide'), None): cnv_boolean, - ((PRESENTATIONNS,'show-logo'), None): cnv_boolean, - ((PRESENTATIONNS,'source'), None): cnv_string, - ((PRESENTATIONNS,'speed'), None): cnv_string, - ((PRESENTATIONNS,'start-page'), None): cnv_string, - ((PRESENTATIONNS,'start-scale'), None): cnv_string, - ((PRESENTATIONNS,'start-with-navigator'), None): cnv_boolean, - ((PRESENTATIONNS,'stay-on-top'), None): cnv_boolean, - ((PRESENTATIONNS,'style-name'), None): cnv_StyleNameRef, - ((PRESENTATIONNS,'transition-on-click'), None): cnv_string, - ((PRESENTATIONNS,'transition-speed'), None): cnv_string, - ((PRESENTATIONNS,'transition-style'), None): cnv_string, - ((PRESENTATIONNS,'transition-type'), None): cnv_string, - ((PRESENTATIONNS,'use-date-time-name'), None): cnv_string, - ((PRESENTATIONNS,'use-footer-name'), None): cnv_string, - ((PRESENTATIONNS,'use-header-name'), None): cnv_string, - ((PRESENTATIONNS,'user-transformed'), None): cnv_boolean, - ((PRESENTATIONNS,'verb'), None): cnv_nonNegativeInteger, - ((PRESENTATIONNS,'visibility'), None): cnv_string, - ((SCRIPTNS,'event-name'), None): cnv_formula, - ((SCRIPTNS,'language'), None): cnv_formula, - ((SCRIPTNS,'macro-name'), None): cnv_string, - ((SMILNS,'accelerate'), None): cnv_double, - ((SMILNS,'accumulate'), None): cnv_string, - ((SMILNS,'additive'), None): cnv_string, - ((SMILNS,'attributeName'), None): cnv_string, - ((SMILNS,'autoReverse'), None): cnv_boolean, - ((SMILNS,'begin'), None): cnv_string, - ((SMILNS,'by'), None): cnv_string, - ((SMILNS,'calcMode'), None): cnv_string, - ((SMILNS,'decelerate'), None): cnv_double, - ((SMILNS,'direction'), None): cnv_string, - ((SMILNS,'dur'), None): cnv_string, - ((SMILNS,'end'), None): cnv_string, - ((SMILNS,'endsync'), None): cnv_string, - ((SMILNS,'fadeColor'), None): cnv_string, - ((SMILNS,'fill'), None): cnv_string, - ((SMILNS,'fillDefault'), None): cnv_string, - ((SMILNS,'from'), None): cnv_string, - ((SMILNS,'keySplines'), None): cnv_string, - ((SMILNS,'keyTimes'), None): cnv_string, - ((SMILNS,'mode'), None): cnv_string, - ((SMILNS,'repeatCount'), None): cnv_nonNegativeInteger, - ((SMILNS,'repeatDur'), None): cnv_string, - ((SMILNS,'restart'), None): cnv_string, - ((SMILNS,'restartDefault'), None): cnv_string, - ((SMILNS,'subtype'), None): cnv_string, - ((SMILNS,'targetElement'), None): cnv_IDREF, - ((SMILNS,'to'), None): cnv_string, - ((SMILNS,'type'), None): cnv_string, - ((SMILNS,'values'), None): cnv_string, - ((STYLENS,'adjustment'), None): cnv_string, - ((STYLENS,'apply-style-name'), None): cnv_StyleNameRef, - ((STYLENS,'auto-text-indent'), None): cnv_boolean, - ((STYLENS,'auto-update'), None): cnv_boolean, - ((STYLENS,'background-transparency'), None): cnv_string, - ((STYLENS,'base-cell-address'), None): cnv_string, - ((STYLENS,'border-line-width-bottom'), None): cnv_string, - ((STYLENS,'border-line-width'), None): cnv_string, - ((STYLENS,'border-line-width-left'), None): cnv_string, - ((STYLENS,'border-line-width-right'), None): cnv_string, - ((STYLENS,'border-line-width-top'), None): cnv_string, - ((STYLENS,'cell-protect'), None): cnv_string, - ((STYLENS,'char'), None): cnv_string, - ((STYLENS,'class'), None): cnv_string, - ((STYLENS,'color'), None): cnv_string, - ((STYLENS,'column-width'), None): cnv_string, - ((STYLENS,'condition'), None): cnv_string, - ((STYLENS,'country-asian'), None): cnv_string, - ((STYLENS,'country-complex'), None): cnv_string, - ((STYLENS,'data-style-name'), None): cnv_StyleNameRef, - ((STYLENS,'decimal-places'), None): cnv_string, - ((STYLENS,'default-outline-level'), None): cnv_positiveInteger, - ((STYLENS,'diagonal-bl-tr'), None): cnv_string, - ((STYLENS,'diagonal-bl-tr-widths'), None): cnv_string, - ((STYLENS,'diagonal-tl-br'), None): cnv_string, - ((STYLENS,'diagonal-tl-br-widths'), None): cnv_string, - ((STYLENS,'direction'), None): cnv_string, - ((STYLENS,'display'), None): cnv_boolean, - ((STYLENS,'display-name'), None): cnv_string, - ((STYLENS,'distance-after-sep'), None): cnv_length, - ((STYLENS,'distance-before-sep'), None): cnv_length, - ((STYLENS,'distance'), None): cnv_length, - ((STYLENS,'dynamic-spacing'), None): cnv_boolean, - ((STYLENS,'editable'), None): cnv_boolean, - ((STYLENS,'family'), None): cnv_family, - ((STYLENS,'filter-name'), None): cnv_string, - ((STYLENS,'first-page-number'), None): cnv_string, - ((STYLENS,'flow-with-text'), None): cnv_boolean, - ((STYLENS,'font-adornments'), None): cnv_string, - ((STYLENS,'font-charset'), None): cnv_string, - ((STYLENS,'font-charset-asian'), None): cnv_string, - ((STYLENS,'font-charset-complex'), None): cnv_string, - ((STYLENS,'font-family-asian'), None): cnv_string, - ((STYLENS,'font-family-complex'), None): cnv_string, - ((STYLENS,'font-family-generic-asian'), None): cnv_string, - ((STYLENS,'font-family-generic'), None): cnv_string, - ((STYLENS,'font-family-generic-complex'), None): cnv_string, - ((STYLENS,'font-independent-line-spacing'), None): cnv_boolean, - ((STYLENS,'font-name-asian'), None): cnv_string, - ((STYLENS,'font-name'), None): cnv_string, - ((STYLENS,'font-name-complex'), None): cnv_string, - ((STYLENS,'font-pitch-asian'), None): cnv_string, - ((STYLENS,'font-pitch'), None): cnv_string, - ((STYLENS,'font-pitch-complex'), None): cnv_string, - ((STYLENS,'font-relief'), None): cnv_string, - ((STYLENS,'font-size-asian'), None): cnv_string, - ((STYLENS,'font-size-complex'), None): cnv_string, - ((STYLENS,'font-size-rel-asian'), None): cnv_length, - ((STYLENS,'font-size-rel'), None): cnv_length, - ((STYLENS,'font-size-rel-complex'), None): cnv_length, - ((STYLENS,'font-style-asian'), None): cnv_string, - ((STYLENS,'font-style-complex'), None): cnv_string, - ((STYLENS,'font-style-name-asian'), None): cnv_string, - ((STYLENS,'font-style-name'), None): cnv_string, - ((STYLENS,'font-style-name-complex'), None): cnv_string, - ((STYLENS,'font-weight-asian'), None): cnv_string, - ((STYLENS,'font-weight-complex'), None): cnv_string, - ((STYLENS,'footnote-max-height'), None): cnv_length, - ((STYLENS,'glyph-orientation-vertical'), None): cnv_string, - ((STYLENS,'height'), None): cnv_string, - ((STYLENS,'horizontal-pos'), None): cnv_string, - ((STYLENS,'horizontal-rel'), None): cnv_string, - ((STYLENS,'justify-single-word'), None): cnv_boolean, - ((STYLENS,'language-asian'), None): cnv_string, - ((STYLENS,'language-complex'), None): cnv_string, - ((STYLENS,'layout-grid-base-height'), None): cnv_length, - ((STYLENS,'layout-grid-color'), None): cnv_string, - ((STYLENS,'layout-grid-display'), None): cnv_boolean, - ((STYLENS,'layout-grid-lines'), None): cnv_string, - ((STYLENS,'layout-grid-mode'), None): cnv_string, - ((STYLENS,'layout-grid-print'), None): cnv_boolean, - ((STYLENS,'layout-grid-ruby-below'), None): cnv_boolean, - ((STYLENS,'layout-grid-ruby-height'), None): cnv_length, - ((STYLENS,'leader-char'), None): cnv_string, - ((STYLENS,'leader-color'), None): cnv_string, - ((STYLENS,'leader-style'), None): cnv_string, - ((STYLENS,'leader-text'), None): cnv_string, - ((STYLENS,'leader-text-style'), None): cnv_StyleNameRef, - ((STYLENS,'leader-type'), None): cnv_string, - ((STYLENS,'leader-width'), None): cnv_string, - ((STYLENS,'legend-expansion-aspect-ratio'), None): cnv_double, - ((STYLENS,'legend-expansion'), None): cnv_string, - ((STYLENS,'length'), None): cnv_positiveInteger, - ((STYLENS,'letter-kerning'), None): cnv_boolean, - ((STYLENS,'line-break'), None): cnv_string, - ((STYLENS,'line-height-at-least'), None): cnv_string, - ((STYLENS,'line-spacing'), None): cnv_length, - ((STYLENS,'line-style'), None): cnv_string, - ((STYLENS,'lines'), None): cnv_positiveInteger, - ((STYLENS,'list-style-name'), None): cnv_StyleNameRef, - ((STYLENS,'master-page-name'), None): cnv_StyleNameRef, - ((STYLENS,'may-break-between-rows'), None): cnv_boolean, - ((STYLENS,'min-row-height'), None): cnv_string, - ((STYLENS,'mirror'), None): cnv_string, - ((STYLENS,'name'), None): cnv_NCName, - ((STYLENS,'name'), (STYLENS,'font-face')): cnv_string, - ((STYLENS,'next-style-name'), None): cnv_StyleNameRef, - ((STYLENS,'num-format'), None): cnv_string, - ((STYLENS,'num-letter-sync'), None): cnv_boolean, - ((STYLENS,'num-prefix'), None): cnv_string, - ((STYLENS,'num-suffix'), None): cnv_string, - ((STYLENS,'number-wrapped-paragraphs'), None): cnv_string, - ((STYLENS,'overflow-behavior'), None): cnv_string, - ((STYLENS,'page-layout-name'), None): cnv_StyleNameRef, - ((STYLENS,'page-number'), None): cnv_string, - ((STYLENS,'page-usage'), None): cnv_string, - ((STYLENS,'paper-tray-name'), None): cnv_string, - ((STYLENS,'parent-style-name'), None): cnv_StyleNameRef, - ((STYLENS,'position'), (STYLENS,'tab-stop')): cnv_length, - ((STYLENS,'position'), None): cnv_string, - ((STYLENS,'print'), None): cnv_string, - ((STYLENS,'print-content'), None): cnv_boolean, - ((STYLENS,'print-orientation'), None): cnv_string, - ((STYLENS,'print-page-order'), None): cnv_string, - ((STYLENS,'protect'), None): cnv_boolean, - ((STYLENS,'punctuation-wrap'), None): cnv_string, - ((STYLENS,'register-true'), None): cnv_boolean, - ((STYLENS,'register-truth-ref-style-name'), None): cnv_string, - ((STYLENS,'rel-column-width'), None): cnv_string, - ((STYLENS,'rel-height'), None): cnv_string, - ((STYLENS,'rel-width'), None): cnv_string, - ((STYLENS,'repeat'), None): cnv_string, - ((STYLENS,'repeat-content'), None): cnv_boolean, - ((STYLENS,'rotation-align'), None): cnv_string, - ((STYLENS,'rotation-angle'), None): cnv_string, - ((STYLENS,'row-height'), None): cnv_string, - ((STYLENS,'ruby-align'), None): cnv_string, - ((STYLENS,'ruby-position'), None): cnv_string, - ((STYLENS,'run-through'), None): cnv_string, - ((STYLENS,'scale-to'), None): cnv_string, - ((STYLENS,'scale-to-pages'), None): cnv_string, - ((STYLENS,'script-type'), None): cnv_string, - ((STYLENS,'shadow'), None): cnv_string, - ((STYLENS,'shrink-to-fit'), None): cnv_boolean, - ((STYLENS,'snap-to-layout-grid'), None): cnv_boolean, - ((STYLENS,'style'), None): cnv_string, - ((STYLENS,'style-name'), None): cnv_StyleNameRef, - ((STYLENS,'tab-stop-distance'), None): cnv_string, - ((STYLENS,'table-centering'), None): cnv_string, - ((STYLENS,'text-align-source'), None): cnv_string, - ((STYLENS,'text-autospace'), None): cnv_string, - ((STYLENS,'text-blinking'), None): cnv_boolean, - ((STYLENS,'text-combine'), None): cnv_string, - ((STYLENS,'text-combine-end-char'), None): cnv_string, - ((STYLENS,'text-combine-start-char'), None): cnv_string, - ((STYLENS,'text-emphasize'), None): cnv_string, - ((STYLENS,'text-line-through-color'), None): cnv_string, - ((STYLENS,'text-line-through-mode'), None): cnv_string, - ((STYLENS,'text-line-through-style'), None): cnv_string, - ((STYLENS,'text-line-through-text'), None): cnv_string, - ((STYLENS,'text-line-through-text-style'), None): cnv_string, - ((STYLENS,'text-line-through-type'), None): cnv_string, - ((STYLENS,'text-line-through-width'), None): cnv_string, - ((STYLENS,'text-outline'), None): cnv_boolean, - ((STYLENS,'text-position'), None): cnv_string, - ((STYLENS,'text-rotation-angle'), None): cnv_string, - ((STYLENS,'text-rotation-scale'), None): cnv_string, - ((STYLENS,'text-scale'), None): cnv_string, - ((STYLENS,'text-underline-color'), None): cnv_string, - ((STYLENS,'text-underline-mode'), None): cnv_string, - ((STYLENS,'text-underline-style'), None): cnv_string, - ((STYLENS,'text-underline-type'), None): cnv_string, - ((STYLENS,'text-underline-width'), None): cnv_string, - ((STYLENS,'type'), None): cnv_string, - ((STYLENS,'use-optimal-column-width'), None): cnv_boolean, - ((STYLENS,'use-optimal-row-height'), None): cnv_boolean, - ((STYLENS,'use-window-font-color'), None): cnv_boolean, - ((STYLENS,'vertical-align'), None): cnv_string, - ((STYLENS,'vertical-pos'), None): cnv_string, - ((STYLENS,'vertical-rel'), None): cnv_string, - ((STYLENS,'volatile'), None): cnv_boolean, - ((STYLENS,'width'), None): cnv_string, - ((STYLENS,'wrap'), None): cnv_string, - ((STYLENS,'wrap-contour'), None): cnv_boolean, - ((STYLENS,'wrap-contour-mode'), None): cnv_string, - ((STYLENS,'wrap-dynamic-threshold'), None): cnv_length, - ((STYLENS,'writing-mode-automatic'), None): cnv_boolean, - ((STYLENS,'writing-mode'), None): cnv_string, - ((SVGNS,'accent-height'), None): cnv_integer, - ((SVGNS,'alphabetic'), None): cnv_integer, - ((SVGNS,'ascent'), None): cnv_integer, - ((SVGNS,'bbox'), None): cnv_string, - ((SVGNS,'cap-height'), None): cnv_integer, - ((SVGNS,'cx'), None): cnv_string, - ((SVGNS,'cy'), None): cnv_string, - ((SVGNS,'d'), None): cnv_string, - ((SVGNS,'descent'), None): cnv_integer, - ((SVGNS,'fill-rule'), None): cnv_string, - ((SVGNS,'font-family'), None): cnv_string, - ((SVGNS,'font-size'), None): cnv_string, - ((SVGNS,'font-stretch'), None): cnv_string, - ((SVGNS,'font-style'), None): cnv_string, - ((SVGNS,'font-variant'), None): cnv_string, - ((SVGNS,'font-weight'), None): cnv_string, - ((SVGNS,'fx'), None): cnv_string, - ((SVGNS,'fy'), None): cnv_string, - ((SVGNS,'gradientTransform'), None): cnv_string, - ((SVGNS,'gradientUnits'), None): cnv_string, - ((SVGNS,'hanging'), None): cnv_integer, - ((SVGNS,'height'), None): cnv_length, - ((SVGNS,'ideographic'), None): cnv_integer, - ((SVGNS,'mathematical'), None): cnv_integer, - ((SVGNS,'name'), None): cnv_string, - ((SVGNS,'offset'), None): cnv_string, - ((SVGNS,'origin'), None): cnv_string, - ((SVGNS,'overline-position'), None): cnv_integer, - ((SVGNS,'overline-thickness'), None): cnv_integer, - ((SVGNS,'panose-1'), None): cnv_string, - ((SVGNS,'path'), None): cnv_string, - ((SVGNS,'r'), None): cnv_length, - ((SVGNS,'rx'), None): cnv_length, - ((SVGNS,'ry'), None): cnv_length, - ((SVGNS,'slope'), None): cnv_integer, - ((SVGNS,'spreadMethod'), None): cnv_string, - ((SVGNS,'stemh'), None): cnv_integer, - ((SVGNS,'stemv'), None): cnv_integer, - ((SVGNS,'stop-color'), None): cnv_string, - ((SVGNS,'stop-opacity'), None): cnv_double, - ((SVGNS,'strikethrough-position'), None): cnv_integer, - ((SVGNS,'strikethrough-thickness'), None): cnv_integer, - ((SVGNS,'string'), None): cnv_string, - ((SVGNS,'stroke-color'), None): cnv_string, - ((SVGNS,'stroke-opacity'), None): cnv_string, - ((SVGNS,'stroke-width'), None): cnv_length, - ((SVGNS,'type'), None): cnv_string, - ((SVGNS,'underline-position'), None): cnv_integer, - ((SVGNS,'underline-thickness'), None): cnv_integer, - ((SVGNS,'unicode-range'), None): cnv_string, - ((SVGNS,'units-per-em'), None): cnv_integer, - ((SVGNS,'v-alphabetic'), None): cnv_integer, - ((SVGNS,'v-hanging'), None): cnv_integer, - ((SVGNS,'v-ideographic'), None): cnv_integer, - ((SVGNS,'v-mathematical'), None): cnv_integer, - ((SVGNS,'viewBox'), None): cnv_viewbox, - ((SVGNS,'width'), None): cnv_length, - ((SVGNS,'widths'), None): cnv_string, - ((SVGNS,'x'), None): cnv_length, - ((SVGNS,'x-height'), None): cnv_integer, - ((SVGNS,'x1'), None): cnv_lengthorpercent, - ((SVGNS,'x2'), None): cnv_lengthorpercent, - ((SVGNS,'y'), None): cnv_length, - ((SVGNS,'y1'), None): cnv_lengthorpercent, - ((SVGNS,'y2'), None): cnv_lengthorpercent, - ((TABLENS,'acceptance-state'), None): cnv_string, - ((TABLENS,'add-empty-lines'), None): cnv_boolean, - ((TABLENS,'algorithm'), None): cnv_formula, - ((TABLENS,'align'), None): cnv_string, - ((TABLENS,'allow-empty-cell'), None): cnv_boolean, - ((TABLENS,'application-data'), None): cnv_string, - ((TABLENS,'automatic-find-labels'), None): cnv_boolean, - ((TABLENS,'base-cell-address'), None): cnv_string, - ((TABLENS,'bind-styles-to-content'), None): cnv_boolean, - ((TABLENS,'border-color'), None): cnv_string, - ((TABLENS,'border-model'), None): cnv_string, - ((TABLENS,'buttons'), None): cnv_string, - ((TABLENS,'buttons'), None): cnv_string, - ((TABLENS,'case-sensitive'), None): cnv_boolean, - ((TABLENS,'case-sensitive'), None): cnv_string, - ((TABLENS,'cell-address'), None): cnv_string, - ((TABLENS,'cell-range-address'), None): cnv_string, - ((TABLENS,'cell-range-address'), None): cnv_string, - ((TABLENS,'cell-range'), None): cnv_string, - ((TABLENS,'column'), None): cnv_integer, - ((TABLENS,'comment'), None): cnv_string, - ((TABLENS,'condition'), None): cnv_formula, - ((TABLENS,'condition-source'), None): cnv_string, - ((TABLENS,'condition-source-range-address'), None): cnv_string, - ((TABLENS,'contains-error'), None): cnv_boolean, - ((TABLENS,'contains-header'), None): cnv_boolean, - ((TABLENS,'content-validation-name'), None): cnv_string, - ((TABLENS,'copy-back'), None): cnv_boolean, - ((TABLENS,'copy-formulas'), None): cnv_boolean, - ((TABLENS,'copy-styles'), None): cnv_boolean, - ((TABLENS,'count'), None): cnv_positiveInteger, - ((TABLENS,'country'), None): cnv_token, - ((TABLENS,'data-cell-range-address'), None): cnv_string, - ((TABLENS,'data-field'), None): cnv_string, - ((TABLENS,'data-type'), None): cnv_string, - ((TABLENS,'database-name'), None): cnv_string, - ((TABLENS,'database-table-name'), None): cnv_string, - ((TABLENS,'date-end'), None): cnv_string, - ((TABLENS,'date-start'), None): cnv_string, - ((TABLENS,'date-value'), None): cnv_date, - ((TABLENS,'default-cell-style-name'), None): cnv_StyleNameRef, - ((TABLENS,'direction'), None): cnv_string, - ((TABLENS,'display-border'), None): cnv_boolean, - ((TABLENS,'display'), None): cnv_boolean, - ((TABLENS,'display-duplicates'), None): cnv_boolean, - ((TABLENS,'display-filter-buttons'), None): cnv_boolean, - ((TABLENS,'display-list'), None): cnv_string, - ((TABLENS,'display-member-mode'), None): cnv_string, - ((TABLENS,'drill-down-on-double-click'), None): cnv_boolean, - ((TABLENS,'enabled'), None): cnv_boolean, - ((TABLENS,'end-cell-address'), None): cnv_string, - ((TABLENS,'end'), None): cnv_string, - ((TABLENS,'end-column'), None): cnv_integer, - ((TABLENS,'end-position'), None): cnv_integer, - ((TABLENS,'end-row'), None): cnv_integer, - ((TABLENS,'end-table'), None): cnv_integer, - ((TABLENS,'end-x'), None): cnv_length, - ((TABLENS,'end-y'), None): cnv_length, - ((TABLENS,'execute'), None): cnv_boolean, - ((TABLENS,'expression'), None): cnv_formula, - ((TABLENS,'field-name'), None): cnv_string, - ((TABLENS,'field-number'), None): cnv_nonNegativeInteger, - ((TABLENS,'field-number'), None): cnv_string, - ((TABLENS,'filter-name'), None): cnv_string, - ((TABLENS,'filter-options'), None): cnv_string, - ((TABLENS,'formula'), None): cnv_formula, - ((TABLENS,'function'), None): cnv_string, - ((TABLENS,'function'), None): cnv_string, - ((TABLENS,'grand-total'), None): cnv_string, - ((TABLENS,'group-by-field-number'), None): cnv_nonNegativeInteger, - ((TABLENS,'grouped-by'), None): cnv_string, - ((TABLENS,'has-persistent-data'), None): cnv_boolean, - ((TABLENS,'id'), None): cnv_string, - ((TABLENS,'identify-categories'), None): cnv_boolean, - ((TABLENS,'ignore-empty-rows'), None): cnv_boolean, - ((TABLENS,'index'), None): cnv_nonNegativeInteger, - ((TABLENS,'is-active'), None): cnv_boolean, - ((TABLENS,'is-data-layout-field'), None): cnv_string, - ((TABLENS,'is-selection'), None): cnv_boolean, - ((TABLENS,'is-sub-table'), None): cnv_boolean, - ((TABLENS,'label-cell-range-address'), None): cnv_string, - ((TABLENS,'language'), None): cnv_token, - ((TABLENS,'language'), None): cnv_token, - ((TABLENS,'last-column-spanned'), None): cnv_positiveInteger, - ((TABLENS,'last-row-spanned'), None): cnv_positiveInteger, - ((TABLENS,'layout-mode'), None): cnv_string, - ((TABLENS,'link-to-source-data'), None): cnv_boolean, - ((TABLENS,'marked-invalid'), None): cnv_boolean, - ((TABLENS,'matrix-covered'), None): cnv_boolean, - ((TABLENS,'maximum-difference'), None): cnv_double, - ((TABLENS,'member-count'), None): cnv_nonNegativeInteger, - ((TABLENS,'member-name'), None): cnv_string, - ((TABLENS,'member-type'), None): cnv_string, - ((TABLENS,'message-type'), None): cnv_string, - ((TABLENS,'mode'), None): cnv_string, - ((TABLENS,'multi-deletion-spanned'), None): cnv_integer, - ((TABLENS,'name'), None): cnv_string, - ((TABLENS,'name'), None): cnv_string, - ((TABLENS,'null-year'), None): cnv_positiveInteger, - ((TABLENS,'number-columns-repeated'), None): cnv_positiveInteger, - ((TABLENS,'number-columns-spanned'), None): cnv_positiveInteger, - ((TABLENS,'number-matrix-columns-spanned'), None): cnv_positiveInteger, - ((TABLENS,'number-matrix-rows-spanned'), None): cnv_positiveInteger, - ((TABLENS,'number-rows-repeated'), None): cnv_positiveInteger, - ((TABLENS,'number-rows-spanned'), None): cnv_positiveInteger, - ((TABLENS,'object-name'), None): cnv_string, - ((TABLENS,'on-update-keep-size'), None): cnv_boolean, - ((TABLENS,'on-update-keep-styles'), None): cnv_boolean, - ((TABLENS,'operator'), None): cnv_string, - ((TABLENS,'operator'), None): cnv_string, - ((TABLENS,'order'), None): cnv_string, - ((TABLENS,'orientation'), None): cnv_string, - ((TABLENS,'orientation'), None): cnv_string, - ((TABLENS,'page-breaks-on-group-change'), None): cnv_boolean, - ((TABLENS,'parse-sql-statement'), None): cnv_boolean, - ((TABLENS,'password'), None): cnv_string, - ((TABLENS,'position'), None): cnv_integer, - ((TABLENS,'precision-as-shown'), None): cnv_boolean, - ((TABLENS,'print'), None): cnv_boolean, - ((TABLENS,'print-ranges'), None): cnv_string, - ((TABLENS,'protect'), None): cnv_boolean, - ((TABLENS,'protected'), None): cnv_boolean, - ((TABLENS,'protection-key'), None): cnv_string, - ((TABLENS,'query-name'), None): cnv_string, - ((TABLENS,'range-usable-as'), None): cnv_string, - ((TABLENS,'refresh-delay'), None): cnv_boolean, - ((TABLENS,'refresh-delay'), None): cnv_duration, - ((TABLENS,'rejecting-change-id'), None): cnv_string, - ((TABLENS,'row'), None): cnv_integer, - ((TABLENS,'scenario-ranges'), None): cnv_string, - ((TABLENS,'search-criteria-must-apply-to-whole-cell'), None): cnv_boolean, - ((TABLENS,'selected-page'), None): cnv_string, - ((TABLENS,'show-details'), None): cnv_boolean, - ((TABLENS,'show-empty'), None): cnv_boolean, - ((TABLENS,'show-empty'), None): cnv_string, - ((TABLENS,'show-filter-button'), None): cnv_boolean, - ((TABLENS,'sort-mode'), None): cnv_string, - ((TABLENS,'source-cell-range-addresses'), None): cnv_string, - ((TABLENS,'source-cell-range-addresses'), None): cnv_string, - ((TABLENS,'source-field-name'), None): cnv_string, - ((TABLENS,'source-field-name'), None): cnv_string, - ((TABLENS,'source-name'), None): cnv_string, - ((TABLENS,'sql-statement'), None): cnv_string, - ((TABLENS,'start'), None): cnv_string, - ((TABLENS,'start-column'), None): cnv_integer, - ((TABLENS,'start-position'), None): cnv_integer, - ((TABLENS,'start-row'), None): cnv_integer, - ((TABLENS,'start-table'), None): cnv_integer, - ((TABLENS,'status'), None): cnv_string, - ((TABLENS,'step'), None): cnv_double, - ((TABLENS,'steps'), None): cnv_positiveInteger, - ((TABLENS,'structure-protected'), None): cnv_boolean, - ((TABLENS,'style-name'), None): cnv_StyleNameRef, - ((TABLENS,'table-background'), None): cnv_boolean, - ((TABLENS,'table'), None): cnv_integer, - ((TABLENS,'table-name'), None): cnv_string, - ((TABLENS,'target-cell-address'), None): cnv_string, - ((TABLENS,'target-cell-address'), None): cnv_string, - ((TABLENS,'target-range-address'), None): cnv_string, - ((TABLENS,'target-range-address'), None): cnv_string, - ((TABLENS,'title'), None): cnv_string, - ((TABLENS,'track-changes'), None): cnv_boolean, - ((TABLENS,'type'), None): cnv_string, - ((TABLENS,'use-labels'), None): cnv_string, - ((TABLENS,'use-regular-expressions'), None): cnv_boolean, - ((TABLENS,'used-hierarchy'), None): cnv_integer, - ((TABLENS,'user-name'), None): cnv_string, - ((TABLENS,'value'), None): cnv_string, - ((TABLENS,'value'), None): cnv_string, - ((TABLENS,'value-type'), None): cnv_string, - ((TABLENS,'visibility'), None): cnv_string, - ((TEXTNS,'active'), None): cnv_boolean, - ((TEXTNS,'address'), None): cnv_string, - ((TEXTNS,'alphabetical-separators'), None): cnv_boolean, - ((TEXTNS,'anchor-page-number'), None): cnv_positiveInteger, - ((TEXTNS,'anchor-type'), None): cnv_string, - ((TEXTNS,'animation'), None): cnv_string, - ((TEXTNS,'animation-delay'), None): cnv_string, - ((TEXTNS,'animation-direction'), None): cnv_string, - ((TEXTNS,'animation-repeat'), None): cnv_string, - ((TEXTNS,'animation-start-inside'), None): cnv_boolean, - ((TEXTNS,'animation-steps'), None): cnv_length, - ((TEXTNS,'animation-stop-inside'), None): cnv_boolean, - ((TEXTNS,'annote'), None): cnv_string, - ((TEXTNS,'author'), None): cnv_string, - ((TEXTNS,'bibliography-data-field'), None): cnv_string, - ((TEXTNS,'bibliography-type'), None): cnv_string, - ((TEXTNS,'booktitle'), None): cnv_string, - ((TEXTNS,'bullet-char'), None): cnv_string, - ((TEXTNS,'bullet-relative-size'), None): cnv_string, - ((TEXTNS,'c'), None): cnv_nonNegativeInteger, - ((TEXTNS,'capitalize-entries'), None): cnv_boolean, - ((TEXTNS,'caption-sequence-format'), None): cnv_string, - ((TEXTNS,'caption-sequence-name'), None): cnv_string, - ((TEXTNS,'change-id'), None): cnv_IDREF, - ((TEXTNS,'chapter'), None): cnv_string, - ((TEXTNS,'citation-body-style-name'), None): cnv_StyleNameRef, - ((TEXTNS,'citation-style-name'), None): cnv_StyleNameRef, - ((TEXTNS,'class-names'), None): cnv_NCNames, - ((TEXTNS,'column-name'), None): cnv_string, - ((TEXTNS,'combine-entries'), None): cnv_boolean, - ((TEXTNS,'combine-entries-with-dash'), None): cnv_boolean, - ((TEXTNS,'combine-entries-with-pp'), None): cnv_boolean, - ((TEXTNS,'comma-separated'), None): cnv_boolean, - ((TEXTNS,'cond-style-name'), None): cnv_StyleNameRef, - ((TEXTNS,'condition'), None): cnv_formula, - ((TEXTNS,'connection-name'), None): cnv_string, - ((TEXTNS,'consecutive-numbering'), None): cnv_boolean, - ((TEXTNS,'continue-numbering'), None): cnv_boolean, - ((TEXTNS,'copy-outline-levels'), None): cnv_boolean, - ((TEXTNS,'count-empty-lines'), None): cnv_boolean, - ((TEXTNS,'count-in-text-boxes'), None): cnv_boolean, - ((TEXTNS,'current-value'), None): cnv_boolean, - ((TEXTNS,'custom1'), None): cnv_string, - ((TEXTNS,'custom2'), None): cnv_string, - ((TEXTNS,'custom3'), None): cnv_string, - ((TEXTNS,'custom4'), None): cnv_string, - ((TEXTNS,'custom5'), None): cnv_string, - ((TEXTNS,'database-name'), None): cnv_string, - ((TEXTNS,'date-adjust'), None): cnv_duration, - ((TEXTNS,'date-value'), None): cnv_date, -# ((TEXTNS,u'date-value'), None): cnv_dateTime, - ((TEXTNS,'default-style-name'), None): cnv_StyleNameRef, - ((TEXTNS,'description'), None): cnv_string, - ((TEXTNS,'display'), None): cnv_string, - ((TEXTNS,'display-levels'), None): cnv_positiveInteger, - ((TEXTNS,'display-outline-level'), None): cnv_nonNegativeInteger, - ((TEXTNS,'dont-balance-text-columns'), None): cnv_boolean, - ((TEXTNS,'duration'), None): cnv_duration, - ((TEXTNS,'edition'), None): cnv_string, - ((TEXTNS,'editor'), None): cnv_string, - ((TEXTNS,'filter-name'), None): cnv_string, - ((TEXTNS,'first-row-end-column'), None): cnv_string, - ((TEXTNS,'first-row-start-column'), None): cnv_string, - ((TEXTNS,'fixed'), None): cnv_boolean, - ((TEXTNS,'footnotes-position'), None): cnv_string, - ((TEXTNS,'formula'), None): cnv_formula, - ((TEXTNS,'global'), None): cnv_boolean, - ((TEXTNS,'howpublished'), None): cnv_string, - ((TEXTNS,'id'), None): cnv_ID, -# ((TEXTNS,u'id'), None): cnv_string, - ((TEXTNS,'identifier'), None): cnv_string, - ((TEXTNS,'ignore-case'), None): cnv_boolean, - ((TEXTNS,'increment'), None): cnv_nonNegativeInteger, - ((TEXTNS,'index-name'), None): cnv_string, - ((TEXTNS,'index-scope'), None): cnv_string, - ((TEXTNS,'institution'), None): cnv_string, - ((TEXTNS,'is-hidden'), None): cnv_boolean, - ((TEXTNS,'is-list-header'), None): cnv_boolean, - ((TEXTNS,'isbn'), None): cnv_string, - ((TEXTNS,'issn'), None): cnv_string, - ((TEXTNS,'issn'), None): cnv_string, - ((TEXTNS,'journal'), None): cnv_string, - ((TEXTNS,'key'), None): cnv_string, - ((TEXTNS,'key1'), None): cnv_string, - ((TEXTNS,'key1-phonetic'), None): cnv_string, - ((TEXTNS,'key2'), None): cnv_string, - ((TEXTNS,'key2-phonetic'), None): cnv_string, - ((TEXTNS,'kind'), None): cnv_string, - ((TEXTNS,'label'), None): cnv_string, - ((TEXTNS,'last-row-end-column'), None): cnv_string, - ((TEXTNS,'last-row-start-column'), None): cnv_string, - ((TEXTNS,'level'), None): cnv_positiveInteger, - ((TEXTNS,'line-break'), None): cnv_boolean, - ((TEXTNS,'line-number'), None): cnv_string, - ((TEXTNS,'main-entry'), None): cnv_boolean, - ((TEXTNS,'main-entry-style-name'), None): cnv_StyleNameRef, - ((TEXTNS,'master-page-name'), None): cnv_StyleNameRef, - ((TEXTNS,'min-label-distance'), None): cnv_string, - ((TEXTNS,'min-label-width'), None): cnv_string, - ((TEXTNS,'month'), None): cnv_string, - ((TEXTNS,'name'), None): cnv_string, - ((TEXTNS,'note-class'), None): cnv_textnoteclass, - ((TEXTNS,'note'), None): cnv_string, - ((TEXTNS,'number'), None): cnv_string, - ((TEXTNS,'number-lines'), None): cnv_boolean, - ((TEXTNS,'number-position'), None): cnv_string, - ((TEXTNS,'numbered-entries'), None): cnv_boolean, - ((TEXTNS,'offset'), None): cnv_string, - ((TEXTNS,'organizations'), None): cnv_string, - ((TEXTNS,'outline-level'), None): cnv_string, - ((TEXTNS,'page-adjust'), None): cnv_integer, - ((TEXTNS,'pages'), None): cnv_string, - ((TEXTNS,'paragraph-style-name'), None): cnv_StyleNameRef, - ((TEXTNS,'placeholder-type'), None): cnv_string, - ((TEXTNS,'prefix'), None): cnv_string, - ((TEXTNS,'protected'), None): cnv_boolean, - ((TEXTNS,'protection-key'), None): cnv_string, - ((TEXTNS,'publisher'), None): cnv_string, - ((TEXTNS,'ref-name'), None): cnv_string, - ((TEXTNS,'reference-format'), None): cnv_string, - ((TEXTNS,'relative-tab-stop-position'), None): cnv_boolean, - ((TEXTNS,'report-type'), None): cnv_string, - ((TEXTNS,'restart-numbering'), None): cnv_boolean, - ((TEXTNS,'restart-on-page'), None): cnv_boolean, - ((TEXTNS,'row-number'), None): cnv_nonNegativeInteger, - ((TEXTNS,'school'), None): cnv_string, - ((TEXTNS,'section-name'), None): cnv_string, - ((TEXTNS,'select-page'), None): cnv_string, - ((TEXTNS,'separation-character'), None): cnv_string, - ((TEXTNS,'series'), None): cnv_string, - ((TEXTNS,'sort-algorithm'), None): cnv_string, - ((TEXTNS,'sort-ascending'), None): cnv_boolean, - ((TEXTNS,'sort-by-position'), None): cnv_boolean, - ((TEXTNS,'space-before'), None): cnv_string, - ((TEXTNS,'start-numbering-at'), None): cnv_string, - ((TEXTNS,'start-value'), None): cnv_nonNegativeInteger, - ((TEXTNS,'start-value'), None): cnv_positiveInteger, - ((TEXTNS,'string-value'), None): cnv_string, - ((TEXTNS,'string-value-if-false'), None): cnv_string, - ((TEXTNS,'string-value-if-true'), None): cnv_string, - ((TEXTNS,'string-value-phonetic'), None): cnv_string, - ((TEXTNS,'style-name'), None): cnv_StyleNameRef, - ((TEXTNS,'suffix'), None): cnv_string, - ((TEXTNS,'tab-ref'), None): cnv_nonNegativeInteger, - ((TEXTNS,'table-name'), None): cnv_string, - ((TEXTNS,'table-type'), None): cnv_string, - ((TEXTNS,'time-adjust'), None): cnv_duration, - ((TEXTNS,'time-value'), None): cnv_dateTime, - ((TEXTNS,'time-value'), None): cnv_time, - ((TEXTNS,'title'), None): cnv_string, - ((TEXTNS,'track-changes'), None): cnv_boolean, - ((TEXTNS,'url'), None): cnv_string, - ((TEXTNS,'use-caption'), None): cnv_boolean, - ((TEXTNS,'use-chart-objects'), None): cnv_boolean, - ((TEXTNS,'use-draw-objects'), None): cnv_boolean, - ((TEXTNS,'use-floating-frames'), None): cnv_boolean, - ((TEXTNS,'use-graphics'), None): cnv_boolean, - ((TEXTNS,'use-index-marks'), None): cnv_boolean, - ((TEXTNS,'use-index-source-styles'), None): cnv_boolean, - ((TEXTNS,'use-keys-as-entries'), None): cnv_boolean, - ((TEXTNS,'use-math-objects'), None): cnv_boolean, - ((TEXTNS,'use-objects'), None): cnv_boolean, - ((TEXTNS,'use-other-objects'), None): cnv_boolean, - ((TEXTNS,'use-outline-level'), None): cnv_boolean, - ((TEXTNS,'use-soft-page-breaks'), None): cnv_boolean, - ((TEXTNS,'use-spreadsheet-objects'), None): cnv_boolean, - ((TEXTNS,'use-tables'), None): cnv_boolean, - ((TEXTNS,'value'), None): cnv_nonNegativeInteger, - ((TEXTNS,'visited-style-name'), None): cnv_StyleNameRef, - ((TEXTNS,'volume'), None): cnv_string, - ((TEXTNS,'year'), None): cnv_string, - ((XFORMSNS,'bind'), None): cnv_string, - ((XLINKNS,'actuate'), None): cnv_string, - ((XLINKNS,'href'), None): cnv_anyURI, - ((XLINKNS,'show'), None): cnv_xlinkshow, - ((XLINKNS,'title'), None): cnv_string, - ((XLINKNS,'type'), None): cnv_string, -} - -class AttrConverters: - def convert(self, attribute, value, element): - """ Based on the element, figures out how to check/convert the attribute value - All values are converted to string - """ - conversion = attrconverters.get((attribute, element.qname), 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 str(value) - diff --git a/tablib/packages/odf3/chart.py b/tablib/packages/odf3/chart.py deleted file mode 100644 index a05e7e6d..00000000 --- a/tablib/packages/odf3/chart.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- 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/tablib/packages/odf3/config.py b/tablib/packages/odf3/config.py deleted file mode 100644 index d73c530f..00000000 --- a/tablib/packages/odf3/config.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- 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/tablib/packages/odf3/dc.py b/tablib/packages/odf3/dc.py deleted file mode 100644 index 387e6dbf..00000000 --- a/tablib/packages/odf3/dc.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- 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/tablib/packages/odf3/dr3d.py b/tablib/packages/odf3/dr3d.py deleted file mode 100644 index 003c7913..00000000 --- a/tablib/packages/odf3/dr3d.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- 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/tablib/packages/odf3/draw.py b/tablib/packages/odf3/draw.py deleted file mode 100644 index 6cc112e2..00000000 --- a/tablib/packages/odf3/draw.py +++ /dev/null @@ -1,182 +0,0 @@ -# -*- 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,'style-name')]= stylename - elif f == 'presentation': - qattrs[(PRESENTATIONNS,'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,'class-names')]= classnames - elif f == 'presentation': - qattrs[(PRESENTATIONNS,'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 'displayname' not in args: - 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/tablib/packages/odf3/easyliststyle.py b/tablib/packages/odf3/easyliststyle.py deleted file mode 100644 index d676588d..00000000 --- a/tablib/packages/odf3/easyliststyle.py +++ /dev/null @@ -1,103 +0,0 @@ -# -*- 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/tablib/packages/odf3/element.py b/tablib/packages/odf3/element.py deleted file mode 100644 index ed17278a..00000000 --- a/tablib/packages/odf3/element.py +++ /dev/null @@ -1,519 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright (C) 2007-2010 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 -from . 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. - """ - try: - data = data.decode('utf-8') - except (TypeError, AttributeError): - ## Make sure our stream is a string - ## If it comes through as bytes it fails - pass - data = data.replace("&", "&") - data = data.replace("<", "<") - data = data.replace(">", ">") - for chars, entity in list(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. - """ - entities['\n']=' ' - entities['\r']=' ' - 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(Exception): - """ Complains if you add an element to a parent where it is not allowed """ -class IllegalText(Exception): - """ 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): - """ Inserts the node newChild before the existing child node refChild. - If refChild is null, insert newChild at the end of the list of children. - """ - 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, newChild): - """ Adds the node newChild to the end of the list of children of this node. - If the newChild is already in the tree, it is first removed. - """ - if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE: - for c in tuple(newChild.childNodes): - self.appendChild(c) - ### The DOM does not clearly specify what to return in this case - return newChild - if newChild.nodeType not in self._child_node_types: - raise IllegalChild("<%s> is not allowed in %s" % ( newChild.tagName, self.tagName)) - if newChild.parentNode is not None: - newChild.parentNode.removeChild(newChild) - _append_child(self, newChild) - newChild.nextSibling = None - return newChild - - def removeChild(self, oldChild): - """ Removes the child node indicated by oldChild from the list of children, and returns it. - """ - #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 - - def __str__(self): - val = [] - for c in self.childNodes: - val.append(str(c)) - return ''.join(val) - - def __unicode__(self): - val = [] - for c in self.childNodes: - val.append(str(c)) - return ''.join(val) - -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(object): - """ 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): - """ Raises an error """ - raise xml.dom.HierarchyRequestErr( - self.tagName + " nodes cannot have children") - - def hasChildNodes(self): - return False - - def insertBefore(self, newChild, refChild): - """ Raises an error """ - raise xml.dom.HierarchyRequestErr( - self.tagName + " nodes do not have children") - - def removeChild(self, oldChild): - """ Raises an error """ - raise xml.dom.NotFoundErr( - self.tagName + " nodes do not have children") - - def replaceChild(self, newChild, oldChild): - """ Raises an error """ - 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.encode() - - def __unicode__(self): - return self.data - - def toXml(self,level,f): - """ Write XML in UTF-8 """ - if self.data: - f.write(_escape(str(self.data).encode('utf-8'))) - -class CDATASection(Text, Childless): - nodeType = Node.CDATA_SECTION_NODE - - def toXml(self,level,f): - """ Generate XML output of the node. If the text contains "]]>", then - escape it by going out of CDATA mode (]]>), then write the string - and then go into CDATA mode again. (' % self.data.replace(']]>',']]>]]>" % (r[1].lower().replace('-',''), self.tagName)) - - def get_knownns(self, prefix): - """ Odfpy maintains a list of known namespaces. In some cases a prefix is used, and - we need to know which namespace it resolves to. - """ - global nsdict - for ns,p in list(nsdict.items()): - if p == prefix: return ns - return None - - def get_nsprefix(self, namespace): - """ Odfpy maintains a list of known namespaces. In some cases we have a namespace URL, - and needs to look up or assign the prefix for it. - """ - if namespace is None: namespace = "" - prefix = _nsassign(namespace) - if namespace not in self.namespaces: - self.namespaces[namespace] = prefix - return prefix - - 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): - """ Adds text to an element - Setting check_grammar=False turns off grammar checking - """ - 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): - """ Adds CDATA to an element - Setting check_grammar=False turns off grammar checking - """ - 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 = self.get_nsprefix(namespace) -# 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[(namespace, localpart)] = c.convert((namespace, localpart), value, self) - - def getAttrNS(self, namespace, localpart): - prefix = self.get_nsprefix(namespace) - return self.attributes.get((namespace, localpart)) - - def removeAttrNS(self, namespace, localpart): - del self.attributes[(namespace, localpart)] - - def getAttribute(self, attr): - """ Get an attribute value. The method knows which namespace the attribute is in - """ - 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 list(self.namespaces.items()): - f.write(' xmlns:' + prefix + '="'+ _escape(str(namespace))+'"') - for qname in list(self.attributes.keys()): - prefix = self.get_nsprefix(qname[0]) - f.write(' '+_escape(str(prefix+':'+qname[1]))+'='+_quoteattr(str(self.attributes[qname]).encode('utf-8'))) - f.write('>') - - def write_close_tag(self, level, f): - f.write('') - - def toXml(self, level, f): - """ Generate XML stream out of the tree structure """ - f.write('<'+self.tagName) - if level == 0: - for namespace, prefix in list(self.namespaces.items()): - f.write(' xmlns:' + prefix + '="'+ _escape(str(namespace))+'"') - for qname in list(self.attributes.keys()): - prefix = self.get_nsprefix(qname[0]) - f.write(' '+_escape(str(prefix+':'+qname[1]))+'='+_quoteattr(str(self.attributes[qname]).encode('utf-8'))) - if self.childNodes: - f.write('>') - for element in self.childNodes: - element.toXml(level+1,f) - f.write('') - 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): - """ Gets elements based on the type, which is function from text.py, draw.py etc. """ - obj = element(check_grammar=False) - return self._getElementsByObj(obj,[]) - - def isInstanceOf(self, element): - """ This is a check to see if the object is an instance of a type """ - obj = element(check_grammar=False) - return self.qname == obj.qname - - diff --git a/tablib/packages/odf3/elementtypes.py b/tablib/packages/odf3/elementtypes.py deleted file mode 100644 index b9aa5e4b..00000000 --- a/tablib/packages/odf3/elementtypes.py +++ /dev/null @@ -1,325 +0,0 @@ -#!/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,'a'), - (TEXTNS,'author-initials'), - (TEXTNS,'author-name'), - (TEXTNS,'bibliography-mark'), - (TEXTNS,'bookmark-ref'), - (TEXTNS,'chapter'), - (TEXTNS,'character-count'), - (TEXTNS,'conditional-text'), - (TEXTNS,'creation-date'), - (TEXTNS,'creation-time'), - (TEXTNS,'creator'), - (TEXTNS,'database-display'), - (TEXTNS,'database-name'), - (TEXTNS,'database-next'), - (TEXTNS,'database-row-number'), - (TEXTNS,'database-row-select'), - (TEXTNS,'date'), - (TEXTNS,'dde-connection'), - (TEXTNS,'description'), - (TEXTNS,'editing-cycles'), - (TEXTNS,'editing-duration'), - (TEXTNS,'execute-macro'), - (TEXTNS,'expression'), - (TEXTNS,'file-name'), - (TEXTNS,'hidden-paragraph'), - (TEXTNS,'hidden-text'), - (TEXTNS,'image-count'), - (TEXTNS,'initial-creator'), - (TEXTNS,'keywords'), - (TEXTNS,'measure'), - (TEXTNS,'modification-date'), - (TEXTNS,'modification-time'), - (TEXTNS,'note-ref'), - (TEXTNS,'object-count'), - (TEXTNS,'page-continuation'), - (TEXTNS,'page-count'), - (TEXTNS,'page-number'), - (TEXTNS,'page-variable-get'), - (TEXTNS,'page-variable-set'), - (TEXTNS,'paragraph-count'), - (TEXTNS,'placeholder'), - (TEXTNS,'print-date'), - (TEXTNS,'printed-by'), - (TEXTNS,'print-time'), - (TEXTNS,'reference-ref'), - (TEXTNS,'ruby'), - (TEXTNS,'ruby-base'), - (TEXTNS,'ruby-text'), - (TEXTNS,'script'), - (TEXTNS,'sender-city'), - (TEXTNS,'sender-company'), - (TEXTNS,'sender-country'), - (TEXTNS,'sender-email'), - (TEXTNS,'sender-fax'), - (TEXTNS,'sender-firstname'), - (TEXTNS,'sender-initials'), - (TEXTNS,'sender-lastname'), - (TEXTNS,'sender-phone-private'), - (TEXTNS,'sender-phone-work'), - (TEXTNS,'sender-position'), - (TEXTNS,'sender-postal-code'), - (TEXTNS,'sender-state-or-province'), - (TEXTNS,'sender-street'), - (TEXTNS,'sender-title'), - (TEXTNS,'sequence'), - (TEXTNS,'sequence-ref'), - (TEXTNS,'sheet-name'), - (TEXTNS,'span'), - (TEXTNS,'subject'), - (TEXTNS,'table-count'), - (TEXTNS,'table-formula'), - (TEXTNS,'template-name'), - (TEXTNS,'text-input'), - (TEXTNS,'time'), - (TEXTNS,'title'), - (TEXTNS,'user-defined'), - (TEXTNS,'user-field-get'), - (TEXTNS,'user-field-input'), - (TEXTNS,'variable-get'), - (TEXTNS,'variable-input'), - (TEXTNS,'variable-set'), - (TEXTNS,'word-count'), -) - - -# It is almost impossible to determine what elements are block elements. -# There are so many that don't fit the form -block_elements = ( - (TEXTNS,'h'), - (TEXTNS,'p'), - (TEXTNS,'list'), - (TEXTNS,'list-item'), - (TEXTNS,'section'), -) - -declarative_elements = ( - (OFFICENS,'font-face-decls'), - (PRESENTATIONNS,'date-time-decl'), - (PRESENTATIONNS,'footer-decl'), - (PRESENTATIONNS,'header-decl'), - (TABLENS,'table-template'), - (TEXTNS,'alphabetical-index-entry-template'), - (TEXTNS,'alphabetical-index-source'), - (TEXTNS,'bibliography-entry-template'), - (TEXTNS,'bibliography-source'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'illustration-index-entry-template'), - (TEXTNS,'illustration-index-source'), - (TEXTNS,'index-source-styles'), - (TEXTNS,'index-title-template'), - (TEXTNS,'note-continuation-notice-backward'), - (TEXTNS,'note-continuation-notice-forward'), - (TEXTNS,'notes-configuration'), - (TEXTNS,'object-index-entry-template'), - (TEXTNS,'object-index-source'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'table-index-entry-template'), - (TEXTNS,'table-index-source'), - (TEXTNS,'table-of-content-entry-template'), - (TEXTNS,'table-of-content-source'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'user-index-entry-template'), - (TEXTNS,'user-index-source'), - (TEXTNS,'variable-decls'), -) - -empty_elements = ( - (ANIMNS,'animate'), - (ANIMNS,'animateColor'), - (ANIMNS,'animateMotion'), - (ANIMNS,'animateTransform'), - (ANIMNS,'audio'), - (ANIMNS,'param'), - (ANIMNS,'set'), - (ANIMNS,'transitionFilter'), - (CHARTNS,'categories'), - (CHARTNS,'data-point'), - (CHARTNS,'domain'), - (CHARTNS,'error-indicator'), - (CHARTNS,'floor'), - (CHARTNS,'grid'), - (CHARTNS,'legend'), - (CHARTNS,'mean-value'), - (CHARTNS,'regression-curve'), - (CHARTNS,'stock-gain-marker'), - (CHARTNS,'stock-loss-marker'), - (CHARTNS,'stock-range-line'), - (CHARTNS,'symbol-image'), - (CHARTNS,'wall'), - (DR3DNS,'cube'), - (DR3DNS,'extrude'), - (DR3DNS,'light'), - (DR3DNS,'rotate'), - (DR3DNS,'sphere'), - (DRAWNS,'contour-path'), - (DRAWNS,'contour-polygon'), - (DRAWNS,'equation'), - (DRAWNS,'fill-image'), - (DRAWNS,'floating-frame'), - (DRAWNS,'glue-point'), - (DRAWNS,'gradient'), - (DRAWNS,'handle'), - (DRAWNS,'hatch'), - (DRAWNS,'layer'), - (DRAWNS,'marker'), - (DRAWNS,'opacity'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'param'), - (DRAWNS,'stroke-dash'), - (FORMNS,'connection-resource'), - (FORMNS,'list-value'), - (FORMNS,'property'), - (MANIFESTNS,'algorithm'), - (MANIFESTNS,'key-derivation'), - (METANS,'auto-reload'), - (METANS,'document-statistic'), - (METANS,'hyperlink-behaviour'), - (METANS,'template'), - (NUMBERNS,'am-pm'), - (NUMBERNS,'boolean'), - (NUMBERNS,'day'), - (NUMBERNS,'day-of-week'), - (NUMBERNS,'era'), - (NUMBERNS,'fraction'), - (NUMBERNS,'hours'), - (NUMBERNS,'minutes'), - (NUMBERNS,'month'), - (NUMBERNS,'quarter'), - (NUMBERNS,'scientific-number'), - (NUMBERNS,'seconds'), - (NUMBERNS,'text-content'), - (NUMBERNS,'week-of-year'), - (NUMBERNS,'year'), - (OFFICENS,'dde-source'), - (PRESENTATIONNS,'date-time'), - (PRESENTATIONNS,'footer'), - (PRESENTATIONNS,'header'), - (PRESENTATIONNS,'placeholder'), - (PRESENTATIONNS,'play'), - (PRESENTATIONNS,'show'), - (PRESENTATIONNS,'sound'), - (SCRIPTNS,'event-listener'), - (STYLENS,'column'), - (STYLENS,'column-sep'), - (STYLENS,'drop-cap'), - (STYLENS,'footnote-sep'), - (STYLENS,'list-level-properties'), - (STYLENS,'map'), - (STYLENS,'ruby-properties'), - (STYLENS,'table-column-properties'), - (STYLENS,'tab-stop'), - (STYLENS,'text-properties'), - (SVGNS,'definition-src'), - (SVGNS,'font-face-format'), - (SVGNS,'font-face-name'), - (SVGNS,'stop'), - (TABLENS,'body'), - (TABLENS,'cell-address'), - (TABLENS,'cell-range-source'), - (TABLENS,'change-deletion'), - (TABLENS,'consolidation'), - (TABLENS,'database-source-query'), - (TABLENS,'database-source-sql'), - (TABLENS,'database-source-table'), - (TABLENS,'data-pilot-display-info'), - (TABLENS,'data-pilot-field-reference'), - (TABLENS,'data-pilot-group-member'), - (TABLENS,'data-pilot-layout-info'), - (TABLENS,'data-pilot-member'), - (TABLENS,'data-pilot-sort-info'), - (TABLENS,'data-pilot-subtotal'), - (TABLENS,'dependency'), - (TABLENS,'error-macro'), - (TABLENS,'even-columns'), - (TABLENS,'even-rows'), - (TABLENS,'filter-condition'), - (TABLENS,'first-column'), - (TABLENS,'first-row'), - (TABLENS,'highlighted-range'), - (TABLENS,'insertion-cut-off'), - (TABLENS,'iteration'), - (TABLENS,'label-range'), - (TABLENS,'last-column'), - (TABLENS,'last-row'), - (TABLENS,'movement-cut-off'), - (TABLENS,'named-expression'), - (TABLENS,'named-range'), - (TABLENS,'null-date'), - (TABLENS,'odd-columns'), - (TABLENS,'odd-rows'), - (TABLENS,'operation'), - (TABLENS,'scenario'), - (TABLENS,'sort-by'), - (TABLENS,'sort-groups'), - (TABLENS,'source-range-address'), - (TABLENS,'source-service'), - (TABLENS,'subtotal-field'), - (TABLENS,'table-column'), - (TABLENS,'table-source'), - (TABLENS,'target-range-address'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'alphabetical-index-mark'), - (TEXTNS,'alphabetical-index-mark-end'), - (TEXTNS,'alphabetical-index-mark-start'), - (TEXTNS,'bookmark'), - (TEXTNS,'bookmark-end'), - (TEXTNS,'bookmark-start'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'dde-connection-decl'), - (TEXTNS,'index-entry-bibliography'), - (TEXTNS,'index-entry-chapter'), - (TEXTNS,'index-entry-link-end'), - (TEXTNS,'index-entry-link-start'), - (TEXTNS,'index-entry-page-number'), - (TEXTNS,'index-entry-tab-stop'), - (TEXTNS,'index-entry-text'), - (TEXTNS,'index-source-style'), - (TEXTNS,'line-break'), - (TEXTNS,'page'), - (TEXTNS,'reference-mark'), - (TEXTNS,'reference-mark-end'), - (TEXTNS,'reference-mark-start'), - (TEXTNS,'s'), - (TEXTNS,'section-source'), - (TEXTNS,'sequence-decl'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'sort-key'), - (TEXTNS,'tab'), - (TEXTNS,'toc-mark'), - (TEXTNS,'toc-mark-end'), - (TEXTNS,'toc-mark-start'), - (TEXTNS,'user-field-decl'), - (TEXTNS,'user-index-mark'), - (TEXTNS,'user-index-mark-end'), - (TEXTNS,'user-index-mark-start'), - (TEXTNS,'variable-decl') -) diff --git a/tablib/packages/odf3/form.py b/tablib/packages/odf3/form.py deleted file mode 100644 index 8b5a3591..00000000 --- a/tablib/packages/odf3/form.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- 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/tablib/packages/odf3/grammar.py b/tablib/packages/odf3/grammar.py deleted file mode 100644 index 04b57ffe..00000000 --- a/tablib/packages/odf3/grammar.py +++ /dev/null @@ -1,8426 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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.1 -# OASIS Standard, 1 Feb 2007 -# Relax-NG Schema - -# $Id$ - -# © 2002-2007 OASIS Open -# © 1999-2007 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,'creator') : ( - ), - (DCNS,'date') : ( - ), - (DCNS,'description') : ( - ), - (DCNS,'language') : ( - ), - (DCNS,'subject') : ( - ), - (DCNS,'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,'math') : None, - - (XFORMSNS,'model') : None, - - (ANIMNS,'animate') : ( - ), - (ANIMNS,'animateColor') : ( - ), - (ANIMNS,'animateMotion') : ( - ), - (ANIMNS,'animateTransform') : ( - ), - (ANIMNS,'audio') : ( - ), - (ANIMNS,'command') : ( - (ANIMNS,'param'), - ), -# allowed_children - (ANIMNS,'iterate') : ( - (ANIMNS,'animate'), - (ANIMNS,'animateColor'), - (ANIMNS,'animateMotion'), - (ANIMNS,'animateTransform'), - (ANIMNS,'audio'), - (ANIMNS,'command'), - (ANIMNS,'iterate'), - (ANIMNS,'par'), - (ANIMNS,'seq'), - (ANIMNS,'set'), - (ANIMNS,'transitionFilter'), - ), - (ANIMNS,'par') : ( - (ANIMNS,'animate'), - (ANIMNS,'animateColor'), - (ANIMNS,'animateMotion'), - (ANIMNS,'animateTransform'), - (ANIMNS,'audio'), - (ANIMNS,'command'), - (ANIMNS,'iterate'), - (ANIMNS,'par'), - (ANIMNS,'seq'), - (ANIMNS,'set'), - (ANIMNS,'transitionFilter'), - ), -# allowed_children - (ANIMNS,'param') : ( - ), - (ANIMNS,'seq') : ( - (ANIMNS,'animate'), - (ANIMNS,'animateColor'), - (ANIMNS,'animateMotion'), - (ANIMNS,'animateTransform'), - (ANIMNS,'audio'), - (ANIMNS,'command'), - (ANIMNS,'iterate'), - (ANIMNS,'par'), - (ANIMNS,'seq'), - (ANIMNS,'set'), - (ANIMNS,'transitionFilter'), - ), - (ANIMNS,'set') : ( - ), - (ANIMNS,'transitionFilter') : ( - ), - (CHARTNS,'axis') : ( - (CHARTNS,'categories'), - (CHARTNS,'grid'), - (CHARTNS,'title'), - ), -# allowed_children - (CHARTNS,'categories') : ( - ), - (CHARTNS,'chart') : ( - (CHARTNS,'footer'), - (CHARTNS,'legend'), - (CHARTNS,'plot-area'), - (CHARTNS,'subtitle'), - (CHARTNS,'title'), - (TABLENS,'table'), - ), - (CHARTNS,'data-point') : ( - ), - (CHARTNS,'domain') : ( - ), - (CHARTNS,'error-indicator') : ( - ), - (CHARTNS,'floor') : ( - ), - (CHARTNS,'footer') : ( - (TEXTNS,'p'), - ), - (CHARTNS,'grid') : ( - ), - (CHARTNS,'legend') : ( - ), -# allowed_children - (CHARTNS,'mean-value') : ( - ), - (CHARTNS,'plot-area') : ( - (CHARTNS,'axis'), - (CHARTNS,'floor'), - (CHARTNS,'series'), - (CHARTNS,'stock-gain-marker'), - (CHARTNS,'stock-loss-marker'), - (CHARTNS,'stock-range-line'), - (CHARTNS,'wall'), - (DR3DNS,'light'), - ), - (CHARTNS,'regression-curve') : ( - ), - (CHARTNS,'series') : ( - (CHARTNS,'data-point'), - (CHARTNS,'domain'), - (CHARTNS,'error-indicator'), - (CHARTNS,'mean-value'), - (CHARTNS,'regression-curve'), - ), - (CHARTNS,'stock-gain-marker') : ( - ), - (CHARTNS,'stock-loss-marker') : ( - ), -# allowed_children - (CHARTNS,'stock-range-line') : ( - ), - (CHARTNS,'subtitle') : ( - (TEXTNS,'p'), - ), - (CHARTNS,'symbol-image') : ( - ), - (CHARTNS,'title') : ( - (TEXTNS,'p'), - ), - (CHARTNS,'wall') : ( - ), - (CONFIGNS,'config-item') : ( - ), - (CONFIGNS,'config-item-map-entry') : ( - (CONFIGNS,'config-item'), - (CONFIGNS,'config-item-map-indexed'), - (CONFIGNS,'config-item-map-named'), - (CONFIGNS,'config-item-set'), - ), - (CONFIGNS,'config-item-map-indexed') : ( - (CONFIGNS,'config-item-map-entry'), - ), - (CONFIGNS,'config-item-map-named') : ( - (CONFIGNS,'config-item-map-entry'), - ), -# allowed_children - (CONFIGNS,'config-item-set') : ( - (CONFIGNS,'config-item'), - (CONFIGNS,'config-item-map-indexed'), - (CONFIGNS,'config-item-map-named'), - (CONFIGNS,'config-item-set'), - ), - (MANIFESTNS,'algorithm') : ( - ), - (MANIFESTNS,'encryption-data') : ( - (MANIFESTNS,'algorithm'), - (MANIFESTNS,'key-derivation'), - ), - (MANIFESTNS,'file-entry') : ( - (MANIFESTNS,'encryption-data'), - ), - (MANIFESTNS,'key-derivation') : ( - ), - (MANIFESTNS,'manifest') : ( - (MANIFESTNS,'file-entry'), - ), - (NUMBERNS,'am-pm') : ( - ), - (NUMBERNS,'boolean') : ( - ), -# allowed_children - (NUMBERNS,'boolean-style') : ( - (NUMBERNS,'boolean'), - (NUMBERNS,'text'), - (STYLENS,'map'), - (STYLENS,'text-properties'), - ), - (NUMBERNS,'currency-style') : ( - (NUMBERNS,'currency-symbol'), - (NUMBERNS,'number'), - (NUMBERNS,'text'), - (STYLENS,'map'), - (STYLENS,'text-properties'), - ), - (NUMBERNS,'currency-symbol') : ( - ), - (NUMBERNS,'date-style') : ( - (NUMBERNS,'am-pm'), - (NUMBERNS,'day'), - (NUMBERNS,'day-of-week'), - (NUMBERNS,'era'), - (NUMBERNS,'hours'), - (NUMBERNS,'minutes'), - (NUMBERNS,'month'), - (NUMBERNS,'quarter'), - (NUMBERNS,'seconds'), - (NUMBERNS,'text'), - (NUMBERNS,'week-of-year'), - (NUMBERNS,'year'), - (STYLENS,'map'), - (STYLENS,'text-properties'), - ), -# allowed_children - (NUMBERNS,'day') : ( - ), - (NUMBERNS,'day-of-week') : ( - ), - (NUMBERNS,'embedded-text') : ( - ), - (NUMBERNS,'era') : ( - ), - (NUMBERNS,'fraction') : ( - ), - (NUMBERNS,'hours') : ( - ), - (NUMBERNS,'minutes') : ( - ), - (NUMBERNS,'month') : ( - ), - (NUMBERNS,'number') : ( - (NUMBERNS,'embedded-text'), - ), - (NUMBERNS,'number-style') : ( - (NUMBERNS,'fraction'), - (NUMBERNS,'number'), - (NUMBERNS,'scientific-number'), - (NUMBERNS,'text'), - (STYLENS,'map'), - (STYLENS,'text-properties'), - ), -# allowed_children - (NUMBERNS,'percentage-style') : ( - (NUMBERNS,'number'), - (NUMBERNS,'text'), - (STYLENS,'map'), - (STYLENS,'text-properties'), - ), - (NUMBERNS,'quarter') : ( - ), - (NUMBERNS,'scientific-number') : ( - ), - (NUMBERNS,'seconds') : ( - ), - (NUMBERNS,'text') : ( - ), - (NUMBERNS,'text-content') : ( - ), - (NUMBERNS,'text-style') : ( - (NUMBERNS,'text'), - (NUMBERNS,'text-content'), - (STYLENS,'map'), - (STYLENS,'text-properties'), - ), -# allowed_children - (NUMBERNS,'time-style') : ( - (NUMBERNS,'am-pm'), - (NUMBERNS,'hours'), - (NUMBERNS,'minutes'), - (NUMBERNS,'seconds'), - (NUMBERNS,'text'), - (STYLENS,'map'), - (STYLENS,'text-properties'), - ), -# allowed_children - (NUMBERNS,'week-of-year') : ( - ), - (NUMBERNS,'year') : ( - ), - (DR3DNS,'cube') : ( - ), - (DR3DNS,'extrude') : ( - ), - (DR3DNS,'light') : ( - ), - (DR3DNS,'rotate') : ( - ), - (DR3DNS,'scene') : ( - (DR3DNS,'cube'), - (DR3DNS,'extrude'), - (DR3DNS,'light'), - (DR3DNS,'rotate'), - (DR3DNS,'scene'), - (DR3DNS,'sphere'), - (SVGNS,'title'), - (SVGNS,'desc'), - ), - (DR3DNS,'sphere') : ( - ), - (DRAWNS,'a') : ( - (DRAWNS,'frame'), - ), -# allowed_children - (DRAWNS,'applet') : ( - (DRAWNS,'param'), - ), - (DRAWNS,'area-circle') : ( - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - ), - (DRAWNS,'area-polygon') : ( - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - ), - (DRAWNS,'area-rectangle') : ( - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - ), - (DRAWNS,'caption') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'circle') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), -# allowed_children - (DRAWNS,'connector') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'contour-path') : ( - ), - (DRAWNS,'contour-polygon') : ( - ), - (DRAWNS,'control') : ( - (DRAWNS,'glue-point'), - (SVGNS,'desc'), - (SVGNS,'title'), - ), - (DRAWNS,'custom-shape') : ( - (DRAWNS,'enhanced-geometry'), - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), -# allowed_children - (DRAWNS,'ellipse') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'enhanced-geometry') : ( - (DRAWNS,'equation'), - (DRAWNS,'handle'), - ), - (DRAWNS,'equation') : ( - ), -# allowed_children - (DRAWNS,'fill-image') : ( - ), - (DRAWNS,'floating-frame') : ( - ), - (DRAWNS,'frame') : ( - (DRAWNS,'applet'), - (DRAWNS,'contour-path'), - (DRAWNS,'contour-polygon'), - (DRAWNS,'floating-frame'), - (DRAWNS,'glue-point'), - (DRAWNS,'image'), - (DRAWNS,'image-map'), - (DRAWNS,'object'), - (DRAWNS,'object-ole'), - (DRAWNS,'plugin'), - (DRAWNS,'text-box'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - ), -# allowed_children - (DRAWNS,'g') : ( - (DR3DNS,'scene'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'glue-point'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (SVGNS,'desc'), - (SVGNS,'title'), - (OFFICENS,'event-listeners'), - ), - (DRAWNS,'glue-point') : ( - ), - (DRAWNS,'gradient') : ( - ), - (DRAWNS,'handle') : ( - ), - (DRAWNS,'hatch') : ( - ), -# allowed_children - (DRAWNS,'image') : ( - (OFFICENS,'binary-data'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'image-map') : ( - (DRAWNS,'area-circle'), - (DRAWNS,'area-polygon'), - (DRAWNS,'area-rectangle'), - ), - (DRAWNS,'layer') : ( - (SVGNS,'desc'), - (SVGNS,'title'), - ), - (DRAWNS,'layer-set') : ( - (DRAWNS,'layer'), - ), - (DRAWNS,'line') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'marker') : ( - ), - (DRAWNS,'measure') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (TEXTNS,'list'), - (TEXTNS,'p'), - (SVGNS,'title'), - (SVGNS,'desc'), - ), - (DRAWNS,'object') : ( - (MATHNS,'math'), - (OFFICENS,'document'), - ), -# allowed_children - (DRAWNS,'object-ole') : ( - (OFFICENS,'binary-data'), - ), - (DRAWNS,'opacity') : ( - ), - (DRAWNS,'page') : ( - (ANIMNS,'animate'), - (ANIMNS,'animateColor'), - (ANIMNS,'animateMotion'), - (ANIMNS,'animateTransform'), - (ANIMNS,'audio'), - (ANIMNS,'command'), - (ANIMNS,'iterate'), - (ANIMNS,'par'), - (ANIMNS,'seq'), - (ANIMNS,'set'), - (ANIMNS,'transitionFilter'), - (DR3DNS,'scene'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'forms'), - (PRESENTATIONNS,'animations'), - (PRESENTATIONNS,'notes'), - ), -# allowed_children - (DRAWNS,'page-thumbnail') : ( - (SVGNS,'desc'), - (SVGNS,'title'), - ), - (DRAWNS,'param') : ( - ), - (DRAWNS,'path') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'plugin') : ( - (DRAWNS,'param'), - ), - (DRAWNS,'polygon') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'title'), - (SVGNS,'desc'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'polyline') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), -# allowed_children - (DRAWNS,'rect') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'regular-polygon') : ( - (DRAWNS,'glue-point'), - (OFFICENS,'event-listeners'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (DRAWNS,'stroke-dash') : ( - ), - (DRAWNS,'text-box') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'user-index'), - ), -# allowed_children - (FORMNS,'button') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'checkbox') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'column') : ( - (FORMNS,'checkbox'), - (FORMNS,'combobox'), - (FORMNS,'date'), - (FORMNS,'formatted-text'), - (FORMNS,'listbox'), - (FORMNS,'number'), - (FORMNS,'text'), - (FORMNS,'textarea'), - ), - (FORMNS,'combobox') : ( - (FORMNS,'item'), - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'connection-resource') : ( - ), - (FORMNS,'date') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'file') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'fixed-text') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), -# allowed_children - (FORMNS,'form') : ( - (FORMNS,'button'), - (FORMNS,'checkbox'), - (FORMNS,'combobox'), - (FORMNS,'connection-resource'), - (FORMNS,'date'), - (FORMNS,'file'), - (FORMNS,'fixed-text'), - (FORMNS,'form'), - (FORMNS,'formatted-text'), - (FORMNS,'frame'), - (FORMNS,'generic-control'), - (FORMNS,'grid'), - (FORMNS,'hidden'), - (FORMNS,'image'), - (FORMNS,'image-frame'), - (FORMNS,'listbox'), - (FORMNS,'number'), - (FORMNS,'password'), - (FORMNS,'properties'), - (FORMNS,'radio'), - (FORMNS,'text'), - (FORMNS,'textarea'), - (FORMNS,'time'), - (FORMNS,'value-range'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'formatted-text') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'frame') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'generic-control') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'grid') : ( - (FORMNS,'column'), - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'hidden') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'image') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), -# allowed_children - (FORMNS,'image-frame') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'item') : ( - ), - (FORMNS,'list-property') : ( - (FORMNS,'list-value'), - (FORMNS,'list-value'), - (FORMNS,'list-value'), - (FORMNS,'list-value'), - (FORMNS,'list-value'), - (FORMNS,'list-value'), - (FORMNS,'list-value'), - ), - (FORMNS,'list-value') : ( - ), - (FORMNS,'listbox') : ( - (FORMNS,'option'), - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'number') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'option') : ( - ), - (FORMNS,'password') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'properties') : ( - (FORMNS,'list-property'), - (FORMNS,'property'), - ), - (FORMNS,'property') : ( - ), - (FORMNS,'radio') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'text') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'textarea') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - (TEXTNS,'p'), - ), - (FORMNS,'time') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (FORMNS,'value-range') : ( - (FORMNS,'properties'), - (OFFICENS,'event-listeners'), - ), - (METANS,'auto-reload') : ( - ), - (METANS,'creation-date') : ( - ), - (METANS,'date-string') : ( - ), - (METANS,'document-statistic') : ( - ), - (METANS,'editing-cycles') : ( - ), - (METANS,'editing-duration') : ( - ), - (METANS,'generator') : ( - ), - (METANS,'hyperlink-behaviour') : ( - ), - (METANS,'initial-creator') : ( - ), - (METANS,'keyword') : ( - ), - (METANS,'print-date') : ( - ), - (METANS,'printed-by') : ( - ), - (METANS,'template') : ( - ), - (METANS,'user-defined') : ( - ), -# allowed_children - (OFFICENS,'annotation') : ( - (DCNS,'creator'), - (DCNS,'date'), - (METANS,'date-string'), - (TEXTNS,'list'), - (TEXTNS,'p'), - ), - (OFFICENS,'automatic-styles') : ( - (NUMBERNS,'boolean-style'), - (NUMBERNS,'currency-style'), - (NUMBERNS,'date-style'), - (NUMBERNS,'number-style'), - (NUMBERNS,'percentage-style'), - (NUMBERNS,'text-style'), - (NUMBERNS,'time-style'), - (STYLENS,'page-layout'), - (STYLENS,'style'), - (TEXTNS,'list-style'), - ), - (OFFICENS,'binary-data') : ( - ), - (OFFICENS,'body') : ( - (OFFICENS,'chart'), - (OFFICENS,'drawing'), - (OFFICENS,'image'), - (OFFICENS,'presentation'), - (OFFICENS,'spreadsheet'), - (OFFICENS,'text'), - ), - (OFFICENS,'change-info') : ( - (DCNS,'creator'), - (DCNS,'date'), - (TEXTNS,'p'), - ), - (OFFICENS,'chart') : ( - (CHARTNS,'chart'), - (TABLENS,'calculation-settings'), - (TABLENS,'consolidation'), - (TABLENS,'content-validations'), - (TABLENS,'data-pilot-tables'), - (TABLENS,'database-ranges'), - (TABLENS,'dde-links'), - (TABLENS,'label-ranges'), - (TABLENS,'named-expressions'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'variable-decls'), - ), - (OFFICENS,'dde-source') : ( - ), - (OFFICENS,'document') : ( - (OFFICENS,'automatic-styles'), - (OFFICENS,'body'), - (OFFICENS,'font-face-decls'), - (OFFICENS,'master-styles'), - (OFFICENS,'meta'), - (OFFICENS,'scripts'), - (OFFICENS,'settings'), - (OFFICENS,'styles'), - ), - (OFFICENS,'document-content') : ( - (OFFICENS,'automatic-styles'), - (OFFICENS,'body'), - (OFFICENS,'font-face-decls'), - (OFFICENS,'scripts'), - ), - (OFFICENS,'document-meta') : ( - (OFFICENS,'meta'), - ), - (OFFICENS,'document-settings') : ( - (OFFICENS,'settings'), - ), - (OFFICENS,'document-styles') : ( - (OFFICENS,'automatic-styles'), - (OFFICENS,'font-face-decls'), - (OFFICENS,'master-styles'), - (OFFICENS,'styles'), - ), - (OFFICENS,'drawing') : ( - (DRAWNS,'page'), - (TABLENS,'calculation-settings'), - (TABLENS,'consolidation'), - (TABLENS,'content-validations'), - (TABLENS,'data-pilot-tables'), - (TABLENS,'database-ranges'), - (TABLENS,'dde-links'), - (TABLENS,'label-ranges'), - (TABLENS,'named-expressions'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'variable-decls'), - ), - (OFFICENS,'event-listeners') : ( - (PRESENTATIONNS,'event-listener'), - (SCRIPTNS,'event-listener'), - ), - (OFFICENS,'font-face-decls') : ( - (STYLENS,'font-face'), - ), -# allowed_children - (OFFICENS,'forms') : ( - (XFORMSNS,'model'), - (FORMNS,'form'), - ), - (OFFICENS,'image') : ( - (DRAWNS,'frame'), - ), - (OFFICENS,'master-styles') : ( - (DRAWNS,'layer-set'), - (STYLENS,'handout-master'), - (STYLENS,'master-page'), - (TABLENS,'table-template'), - ), - (OFFICENS,'meta') : ( - (DCNS,'creator'), - (DCNS,'date'), - (DCNS,'description'), - (DCNS,'language'), - (DCNS,'subject'), - (DCNS,'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,'auto-reload'), - (METANS,'creation-date'), - (METANS,'document-statistic'), - (METANS,'editing-cycles'), - (METANS,'editing-duration'), - (METANS,'generator'), - (METANS,'hyperlink-behaviour'), - (METANS,'initial-creator'), - (METANS,'keyword'), - (METANS,'print-date'), - (METANS,'printed-by'), - (METANS,'template'), - (METANS,'user-defined'), - ), - (OFFICENS,'presentation') : ( - (DRAWNS,'page'), - (PRESENTATIONNS,'date-time-decl'), - (PRESENTATIONNS,'footer-decl'), - (PRESENTATIONNS,'header-decl'), - (PRESENTATIONNS,'settings'), - (TABLENS,'calculation-settings'), - (TABLENS,'consolidation'), - (TABLENS,'content-validations'), - (TABLENS,'data-pilot-tables'), - (TABLENS,'database-ranges'), - (TABLENS,'dde-links'), - (TABLENS,'label-ranges'), - (TABLENS,'named-expressions'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'variable-decls'), - ), -# allowed_children - (OFFICENS,'script') : None, - - (OFFICENS,'scripts') : ( - (OFFICENS,'event-listeners'), - (OFFICENS,'script'), - ), - (OFFICENS,'settings') : ( - (CONFIGNS,'config-item-set'), - ), - (OFFICENS,'spreadsheet') : ( - (TABLENS,'calculation-settings'), - (TABLENS,'consolidation'), - (TABLENS,'content-validations'), - (TABLENS,'data-pilot-tables'), - (TABLENS,'database-ranges'), - (TABLENS,'dde-links'), - (TABLENS,'label-ranges'), - (TABLENS,'named-expressions'), - (TABLENS,'table'), - (TABLENS,'tracked-changes'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'variable-decls'), - ), - (OFFICENS,'styles') : ( - (NUMBERNS,'boolean-style'), - (NUMBERNS,'currency-style'), - (NUMBERNS,'date-style'), - (NUMBERNS,'number-style'), - (NUMBERNS,'percentage-style'), - (NUMBERNS,'text-style'), - (NUMBERNS,'time-style'), - (DRAWNS,'fill-image'), - (DRAWNS,'gradient'), - (DRAWNS,'hatch'), - (DRAWNS,'marker'), - (DRAWNS,'opacity'), - (DRAWNS,'stroke-dash'), - (STYLENS,'default-style'), - (STYLENS,'presentation-page-layout'), - (STYLENS,'style'), - (SVGNS,'linearGradient'), - (SVGNS,'radialGradient'), - (TEXTNS,'bibliography-configuration'), - (TEXTNS,'linenumbering-configuration'), - (TEXTNS,'list-style'), - (TEXTNS,'notes-configuration'), - (TEXTNS,'outline-style'), - ), - (OFFICENS,'text') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'forms'), - (TABLENS,'calculation-settings'), - (TABLENS,'consolidation'), - (TABLENS,'content-validations'), - (TABLENS,'data-pilot-tables'), - (TABLENS,'database-ranges'), - (TABLENS,'dde-links'), - (TABLENS,'label-ranges'), - (TABLENS,'named-expressions'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'page-sequence'), - (TEXTNS,'section'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'tracked-changes'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'user-index'), - (TEXTNS,'variable-decls'), - ), - (PRESENTATIONNS,'animation-group') : ( - (PRESENTATIONNS,'dim'), - (PRESENTATIONNS,'hide-shape'), - (PRESENTATIONNS,'hide-text'), - (PRESENTATIONNS,'play'), - (PRESENTATIONNS,'show-shape'), - (PRESENTATIONNS,'show-text'), - ), - (PRESENTATIONNS,'animations') : ( - (PRESENTATIONNS,'animation-group'), - (PRESENTATIONNS,'dim'), - (PRESENTATIONNS,'hide-shape'), - (PRESENTATIONNS,'hide-text'), - (PRESENTATIONNS,'play'), - (PRESENTATIONNS,'show-shape'), - (PRESENTATIONNS,'show-text'), - ), - (PRESENTATIONNS,'date-time') : ( - ), - (PRESENTATIONNS,'date-time-decl') : ( - ), - (PRESENTATIONNS,'dim') : ( - (PRESENTATIONNS,'sound'), - ), - (PRESENTATIONNS,'event-listener') : ( - (PRESENTATIONNS,'sound'), - ), - (PRESENTATIONNS,'footer') : ( - ), - (PRESENTATIONNS,'footer-decl') : ( - ), - (PRESENTATIONNS,'header') : ( - ), - (PRESENTATIONNS,'header-decl') : ( - ), - (PRESENTATIONNS,'hide-shape') : ( - (PRESENTATIONNS,'sound'), - ), - (PRESENTATIONNS,'hide-text') : ( - (PRESENTATIONNS,'sound'), - ), -# allowed_children - (PRESENTATIONNS,'notes') : ( - (DR3DNS,'scene'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'forms'), - ), - (PRESENTATIONNS,'placeholder') : ( - ), - (PRESENTATIONNS,'play') : ( - ), - (PRESENTATIONNS,'settings') : ( - (PRESENTATIONNS,'show'), - ), - (PRESENTATIONNS,'show') : ( - ), - (PRESENTATIONNS,'show-shape') : ( - (PRESENTATIONNS,'sound'), - ), - (PRESENTATIONNS,'show-text') : ( - (PRESENTATIONNS,'sound'), - ), - (PRESENTATIONNS,'sound') : ( - ), - (SCRIPTNS,'event-listener') : ( - ), - (STYLENS,'background-image') : ( - (OFFICENS,'binary-data'), - ), - (STYLENS,'chart-properties') : ( - (CHARTNS,'symbol-image'), - ), - (STYLENS,'column') : ( - ), - (STYLENS,'column-sep') : ( - ), - (STYLENS,'columns') : ( - (STYLENS,'column'), - (STYLENS,'column-sep'), - ), - (STYLENS,'default-style') : ( - (STYLENS,'chart-properties'), - (STYLENS,'drawing-page-properties'), - (STYLENS,'graphic-properties'), - (STYLENS,'paragraph-properties'), - (STYLENS,'ruby-properties'), - (STYLENS,'section-properties'), - (STYLENS,'table-cell-properties'), - (STYLENS,'table-column-properties'), - (STYLENS,'table-properties'), - (STYLENS,'table-row-properties'), - (STYLENS,'text-properties'), - ), - (STYLENS,'drawing-page-properties') : ( - (PRESENTATIONNS,'sound'), - ), - (STYLENS,'drop-cap') : ( - ), - (STYLENS,'font-face') : ( - (SVGNS,'definition-src'), - (SVGNS,'font-face-src'), - ), - (STYLENS,'footer') : ( - (STYLENS,'region-center'), - (STYLENS,'region-left'), - (STYLENS,'region-right'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'index-title'), - (TEXTNS,'list'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'tracked-changes'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'user-index'), - (TEXTNS,'variable-decls'), - ), -# allowed_children - (STYLENS,'footer-left') : ( - (STYLENS,'region-center'), - (STYLENS,'region-left'), - (STYLENS,'region-right'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'index-title'), - (TEXTNS,'list'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'tracked-changes'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'user-index'), - (TEXTNS,'variable-decls'), - ), - (STYLENS,'footer-style') : ( - (STYLENS,'header-footer-properties'), - ), - (STYLENS,'footnote-sep') : ( - ), - (STYLENS,'graphic-properties') : ( - (STYLENS,'background-image'), - (STYLENS,'columns'), - (TEXTNS,'list-style'), - ), -# allowed_children - (STYLENS,'handout-master') : ( - (DR3DNS,'scene'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - ), - (STYLENS,'header') : ( - (STYLENS,'region-center'), - (STYLENS,'region-left'), - (STYLENS,'region-right'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'index-title'), - (TEXTNS,'list'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'tracked-changes'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'user-index'), - (TEXTNS,'variable-decls'), - ), -# allowed_children - (STYLENS,'header-footer-properties') : ( - (STYLENS,'background-image'), - ), - (STYLENS,'header-left') : ( - (STYLENS,'region-center'), - (STYLENS,'region-left'), - (STYLENS,'region-right'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'alphabetical-index-auto-mark-file'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'dde-connection-decls'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'index-title'), - (TEXTNS,'list'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'sequence-decls'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'tracked-changes'), - (TEXTNS,'user-field-decls'), - (TEXTNS,'user-index'), - (TEXTNS,'variable-decls'), - ), - (STYLENS,'header-style') : ( - (STYLENS,'header-footer-properties'), - ), - (STYLENS,'list-level-properties') : ( - ), - (STYLENS,'map') : ( - ), - (STYLENS,'master-page') : ( - (DR3DNS,'scene'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'forms'), - (PRESENTATIONNS,'notes'), - (STYLENS,'footer'), - (STYLENS,'footer-left'), - (STYLENS,'header'), - (STYLENS,'header-left'), - (STYLENS,'style'), - ), - (STYLENS,'page-layout') : ( - (STYLENS,'footer-style'), - (STYLENS,'header-style'), - (STYLENS,'page-layout-properties'), - ), - (STYLENS,'page-layout-properties') : ( - (STYLENS,'background-image'), - (STYLENS,'columns'), - (STYLENS,'footnote-sep'), - ), -# allowed_children - (STYLENS,'paragraph-properties') : ( - (STYLENS,'background-image'), - (STYLENS,'drop-cap'), - (STYLENS,'tab-stops'), - ), - (STYLENS,'presentation-page-layout') : ( - (PRESENTATIONNS,'placeholder'), - ), - (STYLENS,'region-center') : ( - (TEXTNS,'p'), - ), - (STYLENS,'region-left') : ( - (TEXTNS,'p'), - ), - (STYLENS,'region-right') : ( - (TEXTNS,'p'), - ), - (STYLENS,'ruby-properties') : ( - ), - (STYLENS,'section-properties') : ( - (STYLENS,'background-image'), - (STYLENS,'columns'), - (TEXTNS,'notes-configuration'), - ), - (STYLENS,'style') : ( - (STYLENS,'chart-properties'), - (STYLENS,'drawing-page-properties'), - (STYLENS,'graphic-properties'), - (STYLENS,'map'), - (STYLENS,'paragraph-properties'), - (STYLENS,'ruby-properties'), - (STYLENS,'section-properties'), - (STYLENS,'table-cell-properties'), - (STYLENS,'table-column-properties'), - (STYLENS,'table-properties'), - (STYLENS,'table-row-properties'), - (STYLENS,'text-properties'), - ), - (STYLENS,'tab-stop') : ( - ), - (STYLENS,'tab-stops') : ( - (STYLENS,'tab-stop'), - ), -# allowed_children - (STYLENS,'table-cell-properties') : ( - (STYLENS,'background-image'), - ), - (STYLENS,'table-column-properties') : ( - ), - (STYLENS,'table-properties') : ( - (STYLENS,'background-image'), - ), - (STYLENS,'table-row-properties') : ( - (STYLENS,'background-image'), - ), - (STYLENS,'text-properties') : ( - ), - (SVGNS,'definition-src') : ( - ), - (SVGNS,'desc') : ( - ), - (SVGNS,'font-face-format') : ( - ), - (SVGNS,'font-face-name') : ( - ), - (SVGNS,'font-face-src') : ( - (SVGNS,'font-face-name'), - (SVGNS,'font-face-uri'), - ), - (SVGNS,'font-face-uri') : ( - (SVGNS,'font-face-format'), - ), - (SVGNS,'linearGradient') : ( - (SVGNS,'stop'), - ), - (SVGNS,'radialGradient') : ( - (SVGNS,'stop'), - ), - (SVGNS,'stop') : ( - ), - (SVGNS,'title') : ( - ), - (TABLENS,'body') : ( - ), - (TABLENS,'calculation-settings') : ( - (TABLENS,'iteration'), - (TABLENS,'null-date'), - ), -# allowed_children - (TABLENS,'cell-address') : ( - ), - (TABLENS,'cell-content-change') : ( - (OFFICENS,'change-info'), - (TABLENS,'cell-address'), - (TABLENS,'deletions'), - (TABLENS,'dependencies'), - (TABLENS,'previous'), - ), - (TABLENS,'cell-content-deletion') : ( - (TABLENS,'cell-address'), - (TABLENS,'change-track-table-cell'), - ), - (TABLENS,'cell-range-source') : ( - ), - (TABLENS,'change-deletion') : ( - ), - (TABLENS,'change-track-table-cell') : ( - (TEXTNS,'p'), - ), - (TABLENS,'consolidation') : ( - ), - (TABLENS,'content-validation') : ( - (OFFICENS,'event-listeners'), - (TABLENS,'error-macro'), - (TABLENS,'error-message'), - (TABLENS,'help-message'), - ), -# allowed_children - (TABLENS,'content-validations') : ( - (TABLENS,'content-validation'), - ), - (TABLENS,'covered-table-cell') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'annotation'), - (TABLENS,'cell-range-source'), - (TABLENS,'detective'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'user-index'), - ), -# allowed_children - (TABLENS,'cut-offs') : ( - (TABLENS,'insertion-cut-off'), - (TABLENS,'movement-cut-off'), - ), - (TABLENS,'data-pilot-display-info') : ( - ), - (TABLENS,'data-pilot-field') : ( - (TABLENS,'data-pilot-field-reference'), - (TABLENS,'data-pilot-groups'), - (TABLENS,'data-pilot-level'), - ), - (TABLENS,'data-pilot-field-reference') : ( - ), - (TABLENS,'data-pilot-group') : ( - (TABLENS,'data-pilot-group-member'), - ), - (TABLENS,'data-pilot-group-member') : ( - ), - (TABLENS,'data-pilot-groups') : ( - (TABLENS,'data-pilot-group'), - ), - (TABLENS,'data-pilot-layout-info') : ( - ), - (TABLENS,'data-pilot-level') : ( - (TABLENS,'data-pilot-display-info'), - (TABLENS,'data-pilot-layout-info'), - (TABLENS,'data-pilot-members'), - (TABLENS,'data-pilot-sort-info'), - (TABLENS,'data-pilot-subtotals'), - ), - (TABLENS,'data-pilot-member') : ( - ), - (TABLENS,'data-pilot-members') : ( - (TABLENS,'data-pilot-member'), - ), - (TABLENS,'data-pilot-sort-info') : ( - ), - (TABLENS,'data-pilot-subtotal') : ( - ), - (TABLENS,'data-pilot-subtotals') : ( - (TABLENS,'data-pilot-subtotal'), - ), -# allowed_children - (TABLENS,'data-pilot-table') : ( - (TABLENS,'data-pilot-field'), - (TABLENS,'database-source-query'), - (TABLENS,'database-source-sql'), - (TABLENS,'database-source-table'), - (TABLENS,'source-cell-range'), - (TABLENS,'source-service'), - ), - (TABLENS,'data-pilot-tables') : ( - (TABLENS,'data-pilot-table'), - ), - (TABLENS,'database-range') : ( - (TABLENS,'database-source-query'), - (TABLENS,'database-source-sql'), - (TABLENS,'database-source-table'), - (TABLENS,'filter'), - (TABLENS,'sort'), - (TABLENS,'subtotal-rules'), - ), - (TABLENS,'database-ranges') : ( - (TABLENS,'database-range'), - ), - (TABLENS,'database-source-query') : ( - ), - (TABLENS,'database-source-sql') : ( - ), - (TABLENS,'database-source-table') : ( - ), -# allowed_children - (TABLENS,'dde-link') : ( - (OFFICENS,'dde-source'), - (TABLENS,'table'), - ), - (TABLENS,'dde-links') : ( - (TABLENS,'dde-link'), - ), - (TABLENS,'deletion') : ( - (OFFICENS,'change-info'), - (TABLENS,'cut-offs'), - (TABLENS,'deletions'), - (TABLENS,'dependencies'), - ), - (TABLENS,'deletions') : ( - (TABLENS,'cell-content-deletion'), - (TABLENS,'change-deletion'), - ), - (TABLENS,'dependencies') : ( - (TABLENS,'dependency'), - ), - (TABLENS,'dependency') : ( - ), - (TABLENS,'detective') : ( - (TABLENS,'highlighted-range'), - (TABLENS,'operation'), - ), -# allowed_children - (TABLENS,'error-macro') : ( - ), - (TABLENS,'error-message') : ( - (TEXTNS,'p'), - ), - (TABLENS,'even-columns') : ( - ), - (TABLENS,'even-rows') : ( - ), - (TABLENS,'filter') : ( - (TABLENS,'filter-and'), - (TABLENS,'filter-condition'), - (TABLENS,'filter-or'), - ), - (TABLENS,'filter-and') : ( - (TABLENS,'filter-condition'), - (TABLENS,'filter-or'), - ), - (TABLENS,'filter-condition') : ( - ), - (TABLENS,'filter-or') : ( - (TABLENS,'filter-and'), - (TABLENS,'filter-condition'), - ), -# allowed_children - (TABLENS,'first-column') : ( - ), - (TABLENS,'first-row') : ( - ), - (TABLENS,'help-message') : ( - (TEXTNS,'p'), - ), - (TABLENS,'highlighted-range') : ( - ), - (TABLENS,'insertion') : ( - (OFFICENS,'change-info'), - (TABLENS,'deletions'), - (TABLENS,'dependencies'), - ), - (TABLENS,'insertion-cut-off') : ( - ), - (TABLENS,'iteration') : ( - ), - (TABLENS,'label-range') : ( - ), - (TABLENS,'label-ranges') : ( - (TABLENS,'label-range'), - ), - (TABLENS,'last-column') : ( - ), - (TABLENS,'last-row') : ( - ), - (TABLENS,'movement') : ( - (OFFICENS,'change-info'), - (TABLENS,'deletions'), - (TABLENS,'dependencies'), - (TABLENS,'source-range-address'), - (TABLENS,'target-range-address'), - ), - (TABLENS,'movement-cut-off') : ( - ), - (TABLENS,'named-expression') : ( - ), - (TABLENS,'named-expressions') : ( - (TABLENS,'named-expression'), - (TABLENS,'named-range'), - ), -# allowed_children - (TABLENS,'named-range') : ( - ), - (TABLENS,'null-date') : ( - ), - (TABLENS,'odd-columns') : ( - ), - (TABLENS,'odd-rows') : ( - ), - (TABLENS,'operation') : ( - ), - (TABLENS,'previous') : ( - (TABLENS,'change-track-table-cell'), - ), - (TABLENS,'scenario') : ( - ), - (TABLENS,'shapes') : ( - (DR3DNS,'scene'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - ), -# allowed_children - (TABLENS,'sort') : ( - (TABLENS,'sort-by'), - ), - (TABLENS,'sort-by') : ( - ), - (TABLENS,'sort-groups') : ( - ), - (TABLENS,'source-cell-range') : ( - (TABLENS,'filter'), - ), - (TABLENS,'source-range-address') : ( - ), - (TABLENS,'source-service') : ( - ), - (TABLENS,'subtotal-field') : ( - ), - (TABLENS,'subtotal-rule') : ( - (TABLENS,'subtotal-field'), - ), - (TABLENS,'subtotal-rules') : ( - (TABLENS,'sort-groups'), - (TABLENS,'subtotal-rule'), - ), -# allowed_children - (TABLENS,'table') : ( - (OFFICENS,'dde-source'), - (OFFICENS,'forms'), - (TEXTNS,'soft-page-break'), - (TABLENS,'scenario'), - (TABLENS,'shapes'), - (TABLENS,'table-column'), - (TABLENS,'table-column-group'), - (TABLENS,'table-columns'), - (TABLENS,'table-header-columns'), - (TABLENS,'table-header-rows'), - (TABLENS,'table-row'), - (TABLENS,'table-row-group'), - (TABLENS,'table-rows'), - (TABLENS,'table-source'), - ), - (TABLENS,'table-cell') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'annotation'), - (TABLENS,'cell-range-source'), - (TABLENS,'detective'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'user-index'), - ), -# allowed_children - (TABLENS,'table-column') : ( - ), - (TABLENS,'table-column-group') : ( - (TABLENS,'table-column'), - (TABLENS,'table-column-group'), - (TABLENS,'table-columns'), - (TABLENS,'table-header-columns'), - ), - (TABLENS,'table-columns') : ( - (TABLENS,'table-column'), - ), - (TABLENS,'table-header-columns') : ( - (TABLENS,'table-column'), - ), - (TABLENS,'table-header-rows') : ( - (TABLENS,'table-row'), - (TEXTNS,'soft-page-break'), - ), - (TABLENS,'table-row') : ( - (TABLENS,'covered-table-cell'), - (TABLENS,'table-cell'), - ), - (TABLENS,'table-row-group') : ( - (TABLENS,'table-header-rows'), - (TABLENS,'table-row'), - (TABLENS,'table-row-group'), - (TABLENS,'table-rows'), - (TEXTNS,'soft-page-break'), - ), - (TABLENS,'table-rows') : ( - (TABLENS,'table-row'), - (TEXTNS,'soft-page-break'), - ), -# allowed_children - (TABLENS,'table-source') : ( - ), - (TABLENS,'table-template') : ( - (TABLENS,'body'), - (TABLENS,'even-columns'), - (TABLENS,'even-rows'), - (TABLENS,'first-column'), - (TABLENS,'first-row'), - (TABLENS,'last-column'), - (TABLENS,'last-row'), - (TABLENS,'odd-columns'), - (TABLENS,'odd-rows'), - ), - (TABLENS,'target-range-address') : ( - ), - (TABLENS,'tracked-changes') : ( - (TABLENS,'cell-content-change'), - (TABLENS,'deletion'), - (TABLENS,'insertion'), - (TABLENS,'movement'), - ), -# allowed_children - (TEXTNS,'a') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'annotation'), - (OFFICENS,'event-listeners'), - (PRESENTATIONNS,'date-time'), - (PRESENTATIONNS,'footer'), - (PRESENTATIONNS,'header'), - (TEXTNS,'a'), - (TEXTNS,'alphabetical-index-mark'), - (TEXTNS,'alphabetical-index-mark-end'), - (TEXTNS,'alphabetical-index-mark-start'), - (TEXTNS,'author-initials'), - (TEXTNS,'author-name'), - (TEXTNS,'bibliography-mark'), - (TEXTNS,'bookmark'), - (TEXTNS,'bookmark-end'), - (TEXTNS,'bookmark-ref'), - (TEXTNS,'bookmark-start'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'chapter'), - (TEXTNS,'conditional-text'), - (TEXTNS,'creation-date'), - (TEXTNS,'creation-time'), - (TEXTNS,'creator'), - (TEXTNS,'database-display'), - (TEXTNS,'database-name'), - (TEXTNS,'database-next'), - (TEXTNS,'database-row-number'), - (TEXTNS,'database-row-select'), - (TEXTNS,'date'), - (TEXTNS,'dde-connection'), - (TEXTNS,'description'), - (TEXTNS,'editing-cycles'), - (TEXTNS,'editing-duration'), - (TEXTNS,'execute-macro'), - (TEXTNS,'expression'), - (TEXTNS,'file-name'), - (TEXTNS,'hidden-paragraph'), - (TEXTNS,'hidden-text'), - (TEXTNS,'initial-creator'), - (TEXTNS,'keywords'), - (TEXTNS,'line-break'), - (TEXTNS,'measure'), - (TEXTNS,'modification-date'), - (TEXTNS,'modification-time'), - (TEXTNS,'note'), - (TEXTNS,'note-ref'), - (TEXTNS,'page-count'), - (TEXTNS,'paragraph-count'), - (TEXTNS,'word-count'), - (TEXTNS,'character-count'), - (TEXTNS,'table-count'), - (TEXTNS,'image-count'), - (TEXTNS,'object-count'), - (TEXTNS,'page-continuation'), - (TEXTNS,'page-number'), - (TEXTNS,'page-variable-get'), - (TEXTNS,'page-variable-set'), - (TEXTNS,'placeholder'), - (TEXTNS,'print-date'), - (TEXTNS,'print-time'), - (TEXTNS,'printed-by'), - (TEXTNS,'reference-mark'), - (TEXTNS,'reference-mark-end'), - (TEXTNS,'reference-mark-start'), - (TEXTNS,'reference-ref'), - (TEXTNS,'ruby'), - (TEXTNS,'s'), - (TEXTNS,'script'), - (TEXTNS,'sender-city'), - (TEXTNS,'sender-company'), - (TEXTNS,'sender-country'), - (TEXTNS,'sender-email'), - (TEXTNS,'sender-fax'), - (TEXTNS,'sender-firstname'), - (TEXTNS,'sender-initials'), - (TEXTNS,'sender-lastname'), - (TEXTNS,'sender-phone-private'), - (TEXTNS,'sender-phone-work'), - (TEXTNS,'sender-position'), - (TEXTNS,'sender-postal-code'), - (TEXTNS,'sender-state-or-province'), - (TEXTNS,'sender-street'), - (TEXTNS,'sender-title'), - (TEXTNS,'sequence'), - (TEXTNS,'sequence-ref'), - (TEXTNS,'sheet-name'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'span'), - (TEXTNS,'subject'), - (TEXTNS,'tab'), - (TEXTNS,'table-formula'), - (TEXTNS,'template-name'), - (TEXTNS,'text-input'), - (TEXTNS,'time'), - (TEXTNS,'title'), - (TEXTNS,'toc-mark'), - (TEXTNS,'toc-mark-end'), - (TEXTNS,'toc-mark-start'), - (TEXTNS,'user-defined'), - (TEXTNS,'user-field-get'), - (TEXTNS,'user-field-input'), - (TEXTNS,'user-index-mark'), - (TEXTNS,'user-index-mark-end'), - (TEXTNS,'user-index-mark-start'), - (TEXTNS,'variable-get'), - (TEXTNS,'variable-input'), - (TEXTNS,'variable-set'), - ), -# allowed_children - (TEXTNS,'alphabetical-index') : ( - (TEXTNS,'alphabetical-index-source'), - (TEXTNS,'index-body'), - ), - (TEXTNS,'alphabetical-index-auto-mark-file') : ( - ), - (TEXTNS,'alphabetical-index-entry-template') : ( - (TEXTNS,'index-entry-chapter'), - (TEXTNS,'index-entry-page-number'), - (TEXTNS,'index-entry-span'), - (TEXTNS,'index-entry-tab-stop'), - (TEXTNS,'index-entry-text'), - ), - (TEXTNS,'alphabetical-index-mark') : ( - ), - (TEXTNS,'alphabetical-index-mark-end') : ( - ), - (TEXTNS,'alphabetical-index-mark-start') : ( - ), - (TEXTNS,'alphabetical-index-source') : ( - (TEXTNS,'alphabetical-index-entry-template'), - (TEXTNS,'index-title-template'), - ), - (TEXTNS,'author-initials') : ( - ), - (TEXTNS,'author-name') : ( - ), - (TEXTNS,'bibliography') : ( - (TEXTNS,'bibliography-source'), - (TEXTNS,'index-body'), - ), - (TEXTNS,'bibliography-configuration') : ( - (TEXTNS,'sort-key'), - ), - (TEXTNS,'bibliography-entry-template') : ( - (TEXTNS,'index-entry-bibliography'), - (TEXTNS,'index-entry-span'), - (TEXTNS,'index-entry-tab-stop'), - ), -# allowed_children - (TEXTNS,'bibliography-mark') : ( - ), - (TEXTNS,'bibliography-source') : ( - (TEXTNS,'bibliography-entry-template'), - (TEXTNS,'index-title-template'), - ), - (TEXTNS,'bookmark') : ( - ), - (TEXTNS,'bookmark-end') : ( - ), - (TEXTNS,'bookmark-ref') : ( - ), - (TEXTNS,'bookmark-start') : ( - ), - (TEXTNS,'change') : ( - ), - (TEXTNS,'change-end') : ( - ), - (TEXTNS,'change-start') : ( - ), - (TEXTNS,'changed-region') : ( - (TEXTNS,'deletion'), - (TEXTNS,'format-change'), - (TEXTNS,'insertion'), - ), - (TEXTNS,'chapter') : ( - ), - (TEXTNS,'character-count') : ( - ), - (TEXTNS,'conditional-text') : ( - ), - (TEXTNS,'creation-date') : ( - ), - (TEXTNS,'creation-time') : ( - ), - (TEXTNS,'creator') : ( - ), - (TEXTNS,'database-display') : ( - (FORMNS,'connection-resource'), - ), - (TEXTNS,'database-name') : ( - (FORMNS,'connection-resource'), - ), - (TEXTNS,'database-next') : ( - (FORMNS,'connection-resource'), - ), - (TEXTNS,'database-row-number') : ( - (FORMNS,'connection-resource'), - ), - (TEXTNS,'database-row-select') : ( - (FORMNS,'connection-resource'), - ), - (TEXTNS,'date') : ( - ), - (TEXTNS,'dde-connection') : ( - ), - (TEXTNS,'dde-connection-decl') : ( - ), - (TEXTNS,'dde-connection-decls') : ( - (TEXTNS,'dde-connection-decl'), - ), -# allowed_children - (TEXTNS,'deletion') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'change-info'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'user-index'), - ), - (TEXTNS,'description') : ( - ), - (TEXTNS,'editing-cycles') : ( - ), - (TEXTNS,'editing-duration') : ( - ), - (TEXTNS,'execute-macro') : ( - (OFFICENS,'event-listeners'), - ), - (TEXTNS,'expression') : ( - ), - (TEXTNS,'file-name') : ( - ), - (TEXTNS,'format-change') : ( - (OFFICENS,'change-info'), - ), -# allowed_children - (TEXTNS,'h') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'annotation'), - (PRESENTATIONNS,'date-time'), - (PRESENTATIONNS,'footer'), - (PRESENTATIONNS,'header'), - (TEXTNS,'a'), - (TEXTNS,'alphabetical-index-mark'), - (TEXTNS,'alphabetical-index-mark-end'), - (TEXTNS,'alphabetical-index-mark-start'), - (TEXTNS,'author-initials'), - (TEXTNS,'author-name'), - (TEXTNS,'bibliography-mark'), - (TEXTNS,'bookmark'), - (TEXTNS,'bookmark-end'), - (TEXTNS,'bookmark-ref'), - (TEXTNS,'bookmark-start'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'chapter'), - (TEXTNS,'conditional-text'), - (TEXTNS,'creation-date'), - (TEXTNS,'creation-time'), - (TEXTNS,'creator'), - (TEXTNS,'database-display'), - (TEXTNS,'database-name'), - (TEXTNS,'database-next'), - (TEXTNS,'database-row-number'), - (TEXTNS,'database-row-select'), - (TEXTNS,'date'), - (TEXTNS,'dde-connection'), - (TEXTNS,'description'), - (TEXTNS,'editing-cycles'), - (TEXTNS,'editing-duration'), - (TEXTNS,'execute-macro'), - (TEXTNS,'expression'), - (TEXTNS,'file-name'), - (TEXTNS,'hidden-paragraph'), - (TEXTNS,'hidden-text'), - (TEXTNS,'initial-creator'), - (TEXTNS,'keywords'), - (TEXTNS,'line-break'), - (TEXTNS,'measure'), - (TEXTNS,'modification-date'), - (TEXTNS,'modification-time'), - (TEXTNS,'note'), - (TEXTNS,'note-ref'), - (TEXTNS,'number'), - (TEXTNS,'page-count'), - (TEXTNS,'paragraph-count'), - (TEXTNS,'word-count'), - (TEXTNS,'character-count'), - (TEXTNS,'table-count'), - (TEXTNS,'image-count'), - (TEXTNS,'object-count'), - (TEXTNS,'page-continuation'), - (TEXTNS,'page-number'), - (TEXTNS,'page-variable-get'), - (TEXTNS,'page-variable-set'), - (TEXTNS,'placeholder'), - (TEXTNS,'print-date'), - (TEXTNS,'print-time'), - (TEXTNS,'printed-by'), - (TEXTNS,'reference-mark'), - (TEXTNS,'reference-mark-end'), - (TEXTNS,'reference-mark-start'), - (TEXTNS,'reference-ref'), - (TEXTNS,'ruby'), - (TEXTNS,'s'), - (TEXTNS,'script'), - (TEXTNS,'sender-city'), - (TEXTNS,'sender-company'), - (TEXTNS,'sender-country'), - (TEXTNS,'sender-email'), - (TEXTNS,'sender-fax'), - (TEXTNS,'sender-firstname'), - (TEXTNS,'sender-initials'), - (TEXTNS,'sender-lastname'), - (TEXTNS,'sender-phone-private'), - (TEXTNS,'sender-phone-work'), - (TEXTNS,'sender-position'), - (TEXTNS,'sender-postal-code'), - (TEXTNS,'sender-state-or-province'), - (TEXTNS,'sender-street'), - (TEXTNS,'sender-title'), - (TEXTNS,'sequence'), - (TEXTNS,'sequence-ref'), - (TEXTNS,'sheet-name'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'span'), - (TEXTNS,'subject'), - (TEXTNS,'tab'), - (TEXTNS,'table-formula'), - (TEXTNS,'template-name'), - (TEXTNS,'text-input'), - (TEXTNS,'time'), - (TEXTNS,'title'), - (TEXTNS,'toc-mark'), - (TEXTNS,'toc-mark-end'), - (TEXTNS,'toc-mark-start'), - (TEXTNS,'user-defined'), - (TEXTNS,'user-field-get'), - (TEXTNS,'user-field-input'), - (TEXTNS,'user-index-mark'), - (TEXTNS,'user-index-mark-end'), - (TEXTNS,'user-index-mark-start'), - (TEXTNS,'variable-get'), - (TEXTNS,'variable-input'), - (TEXTNS,'variable-set'), - ), -# allowed_children - (TEXTNS,'hidden-paragraph') : ( - ), - (TEXTNS,'hidden-text') : ( - ), - (TEXTNS,'illustration-index') : ( - (TEXTNS,'illustration-index-source'), - (TEXTNS,'index-body'), - ), - (TEXTNS,'illustration-index-entry-template') : ( - (TEXTNS,'index-entry-page-number'), - (TEXTNS,'index-entry-span'), - (TEXTNS,'index-entry-tab-stop'), - (TEXTNS,'index-entry-text'), - ), - (TEXTNS,'illustration-index-source') : ( - (TEXTNS,'illustration-index-entry-template'), - (TEXTNS,'index-title-template'), - ), - (TEXTNS,'image-count') : ( - ), -# allowed_children - (TEXTNS,'index-body') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'index-title'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'user-index'), - ), - (TEXTNS,'index-entry-bibliography') : ( - ), - (TEXTNS,'index-entry-chapter') : ( - ), - (TEXTNS,'index-entry-link-end') : ( - ), - (TEXTNS,'index-entry-link-start') : ( - ), - (TEXTNS,'index-entry-page-number') : ( - ), - (TEXTNS,'index-entry-span') : ( - ), - (TEXTNS,'index-entry-tab-stop') : ( - ), - (TEXTNS,'index-entry-text') : ( - ), - (TEXTNS,'index-source-style') : ( - ), - (TEXTNS,'index-source-styles') : ( - (TEXTNS,'index-source-style'), - ), -# allowed_children - (TEXTNS,'index-title') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'index-title'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'user-index'), - ), - (TEXTNS,'index-title-template') : ( - ), - (TEXTNS,'initial-creator') : ( - ), - (TEXTNS,'insertion') : ( - (OFFICENS,'change-info'), - ), - (TEXTNS,'keywords') : ( - ), - (TEXTNS,'line-break') : ( - ), - (TEXTNS,'linenumbering-configuration') : ( - (TEXTNS,'linenumbering-separator'), - ), - (TEXTNS,'linenumbering-separator') : ( - ), - (TEXTNS,'list') : ( - (TEXTNS,'list-header'), - (TEXTNS,'list-item'), - ), - (TEXTNS,'list-header') : ( - (TEXTNS,'h'), - (TEXTNS,'list'), - (TEXTNS,'number'), - (TEXTNS,'p'), - (TEXTNS,'soft-page-break'), - ), - (TEXTNS,'list-item') : ( - (TEXTNS,'h'), - (TEXTNS,'list'), - (TEXTNS,'number'), - (TEXTNS,'p'), - (TEXTNS,'soft-page-break'), - ), - (TEXTNS,'list-level-style-bullet') : ( - (STYLENS,'list-level-properties'), - (STYLENS,'text-properties'), - ), - (TEXTNS,'list-level-style-image') : ( - (OFFICENS,'binary-data'), - (STYLENS,'list-level-properties'), - ), - (TEXTNS,'list-level-style-number') : ( - (STYLENS,'list-level-properties'), - (STYLENS,'text-properties'), - ), - (TEXTNS,'list-style') : ( - (TEXTNS,'list-level-style-bullet'), - (TEXTNS,'list-level-style-image'), - (TEXTNS,'list-level-style-number'), - ), - (TEXTNS,'measure') : ( - ), - (TEXTNS,'modification-date') : ( - ), - (TEXTNS,'modification-time') : ( - ), - (TEXTNS,'note') : ( - (TEXTNS,'note-body'), - (TEXTNS,'note-citation'), - ), -# allowed_children - (TEXTNS,'note-body') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'user-index'), - ), - (TEXTNS,'note-citation') : ( - ), - (TEXTNS,'note-continuation-notice-backward') : ( - ), - (TEXTNS,'note-continuation-notice-forward') : ( - ), - (TEXTNS,'note-ref') : ( - ), - (TEXTNS,'notes-configuration') : ( - (TEXTNS,'note-continuation-notice-backward'), - (TEXTNS,'note-continuation-notice-forward'), - ), - (TEXTNS,'number') : ( - ), - (TEXTNS,'numbered-paragraph') : ( - (TEXTNS,'h'), - (TEXTNS,'number'), - (TEXTNS,'p'), - ), - (TEXTNS,'object-count') : ( - ), - (TEXTNS,'object-index') : ( - (TEXTNS,'index-body'), - (TEXTNS,'object-index-source'), - ), - (TEXTNS,'object-index-entry-template') : ( - (TEXTNS,'index-entry-page-number'), - (TEXTNS,'index-entry-span'), - (TEXTNS,'index-entry-tab-stop'), - (TEXTNS,'index-entry-text'), - ), - (TEXTNS,'object-index-source') : ( - (TEXTNS,'index-title-template'), - (TEXTNS,'object-index-entry-template'), - ), - (TEXTNS,'outline-level-style') : ( - (STYLENS,'list-level-properties'), - (STYLENS,'text-properties'), - ), - (TEXTNS,'outline-style') : ( - (TEXTNS,'outline-level-style'), - ), -# allowed_children - (TEXTNS,'p') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'annotation'), - (PRESENTATIONNS,'date-time'), - (PRESENTATIONNS,'footer'), - (PRESENTATIONNS,'header'), - (TEXTNS,'a'), - (TEXTNS,'alphabetical-index-mark'), - (TEXTNS,'alphabetical-index-mark-end'), - (TEXTNS,'alphabetical-index-mark-start'), - (TEXTNS,'author-initials'), - (TEXTNS,'author-name'), - (TEXTNS,'bibliography-mark'), - (TEXTNS,'bookmark'), - (TEXTNS,'bookmark-end'), - (TEXTNS,'bookmark-ref'), - (TEXTNS,'bookmark-start'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'chapter'), - (TEXTNS,'character-count'), - (TEXTNS,'conditional-text'), - (TEXTNS,'creation-date'), - (TEXTNS,'creation-time'), - (TEXTNS,'creator'), - (TEXTNS,'database-display'), - (TEXTNS,'database-name'), - (TEXTNS,'database-next'), - (TEXTNS,'database-row-number'), - (TEXTNS,'database-row-select'), - (TEXTNS,'date'), - (TEXTNS,'dde-connection'), - (TEXTNS,'description'), - (TEXTNS,'editing-cycles'), - (TEXTNS,'editing-duration'), - (TEXTNS,'execute-macro'), - (TEXTNS,'expression'), - (TEXTNS,'file-name'), - (TEXTNS,'hidden-paragraph'), - (TEXTNS,'hidden-text'), - (TEXTNS,'image-count'), - (TEXTNS,'initial-creator'), - (TEXTNS,'keywords'), - (TEXTNS,'line-break'), - (TEXTNS,'measure'), - (TEXTNS,'modification-date'), - (TEXTNS,'modification-time'), - (TEXTNS,'note'), - (TEXTNS,'note-ref'), - (TEXTNS,'object-count'), - (TEXTNS,'page-continuation'), - (TEXTNS,'page-count'), - (TEXTNS,'page-number'), - (TEXTNS,'page-variable-get'), - (TEXTNS,'page-variable-set'), - (TEXTNS,'paragraph-count'), - (TEXTNS,'placeholder'), - (TEXTNS,'print-date'), - (TEXTNS,'printed-by'), - (TEXTNS,'print-time'), - (TEXTNS,'reference-mark'), - (TEXTNS,'reference-mark-end'), - (TEXTNS,'reference-mark-start'), - (TEXTNS,'reference-ref'), - (TEXTNS,'ruby'), - (TEXTNS,'s'), - (TEXTNS,'script'), - (TEXTNS,'sender-city'), - (TEXTNS,'sender-company'), - (TEXTNS,'sender-country'), - (TEXTNS,'sender-email'), - (TEXTNS,'sender-fax'), - (TEXTNS,'sender-firstname'), - (TEXTNS,'sender-initials'), - (TEXTNS,'sender-lastname'), - (TEXTNS,'sender-phone-private'), - (TEXTNS,'sender-phone-work'), - (TEXTNS,'sender-position'), - (TEXTNS,'sender-postal-code'), - (TEXTNS,'sender-state-or-province'), - (TEXTNS,'sender-street'), - (TEXTNS,'sender-title'), - (TEXTNS,'sequence'), - (TEXTNS,'sequence-ref'), - (TEXTNS,'sheet-name'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'span'), - (TEXTNS,'subject'), - (TEXTNS,'tab'), - (TEXTNS,'table-count'), - (TEXTNS,'table-formula'), - (TEXTNS,'template-name'), - (TEXTNS,'text-input'), - (TEXTNS,'time'), - (TEXTNS,'title'), - (TEXTNS,'toc-mark'), - (TEXTNS,'toc-mark-end'), - (TEXTNS,'toc-mark-start'), - (TEXTNS,'user-defined'), - (TEXTNS,'user-field-get'), - (TEXTNS,'user-field-input'), - (TEXTNS,'user-index-mark'), - (TEXTNS,'user-index-mark-end'), - (TEXTNS,'user-index-mark-start'), - (TEXTNS,'variable-get'), - (TEXTNS,'variable-input'), - (TEXTNS,'variable-set'), - (TEXTNS,'word-count'), - ), - (TEXTNS,'page') : ( - ), - (TEXTNS,'page-count') : ( - ), - (TEXTNS,'page-continuation') : ( - ), - (TEXTNS,'page-number') : ( - ), - (TEXTNS,'page-sequence') : ( - (TEXTNS,'page'), - ), - (TEXTNS,'page-variable-get') : ( - ), - (TEXTNS,'page-variable-set') : ( - ), - (TEXTNS,'paragraph-count') : ( - ), - (TEXTNS,'placeholder') : ( - ), - (TEXTNS,'print-date') : ( - ), - (TEXTNS,'print-time') : ( - ), - (TEXTNS,'printed-by') : ( - ), - (TEXTNS,'reference-mark') : ( - ), - (TEXTNS,'reference-mark-end') : ( - ), -# allowed_children - (TEXTNS,'reference-mark-start') : ( - ), - (TEXTNS,'reference-ref') : ( - ), - (TEXTNS,'ruby') : ( - (TEXTNS,'ruby-base'), - (TEXTNS,'ruby-text'), - ), - (TEXTNS,'ruby-base') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'annotation'), - (PRESENTATIONNS,'date-time'), - (PRESENTATIONNS,'footer'), - (PRESENTATIONNS,'header'), - (TEXTNS,'a'), - (TEXTNS,'alphabetical-index-mark'), - (TEXTNS,'alphabetical-index-mark-end'), - (TEXTNS,'alphabetical-index-mark-start'), - (TEXTNS,'author-initials'), - (TEXTNS,'author-name'), - (TEXTNS,'bibliography-mark'), - (TEXTNS,'bookmark'), - (TEXTNS,'bookmark-end'), - (TEXTNS,'bookmark-ref'), - (TEXTNS,'bookmark-start'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'chapter'), - (TEXTNS,'conditional-text'), - (TEXTNS,'creation-date'), - (TEXTNS,'creation-time'), - (TEXTNS,'creator'), - (TEXTNS,'database-display'), - (TEXTNS,'database-name'), - (TEXTNS,'database-next'), - (TEXTNS,'database-row-number'), - (TEXTNS,'database-row-select'), - (TEXTNS,'date'), - (TEXTNS,'dde-connection'), - (TEXTNS,'description'), - (TEXTNS,'editing-cycles'), - (TEXTNS,'editing-duration'), - (TEXTNS,'execute-macro'), - (TEXTNS,'expression'), - (TEXTNS,'file-name'), - (TEXTNS,'hidden-paragraph'), - (TEXTNS,'hidden-text'), - (TEXTNS,'initial-creator'), - (TEXTNS,'keywords'), - (TEXTNS,'line-break'), - (TEXTNS,'measure'), - (TEXTNS,'modification-date'), - (TEXTNS,'modification-time'), - (TEXTNS,'note'), - (TEXTNS,'note-ref'), - (TEXTNS,'page-count'), - (TEXTNS,'paragraph-count'), - (TEXTNS,'word-count'), - (TEXTNS,'character-count'), - (TEXTNS,'table-count'), - (TEXTNS,'image-count'), - (TEXTNS,'object-count'), - (TEXTNS,'page-continuation'), - (TEXTNS,'page-number'), - (TEXTNS,'page-variable-get'), - (TEXTNS,'page-variable-set'), - (TEXTNS,'placeholder'), - (TEXTNS,'print-date'), - (TEXTNS,'print-time'), - (TEXTNS,'printed-by'), - (TEXTNS,'reference-mark'), - (TEXTNS,'reference-mark-end'), - (TEXTNS,'reference-mark-start'), - (TEXTNS,'reference-ref'), - (TEXTNS,'ruby'), - (TEXTNS,'s'), - (TEXTNS,'script'), - (TEXTNS,'sender-city'), - (TEXTNS,'sender-company'), - (TEXTNS,'sender-country'), - (TEXTNS,'sender-email'), - (TEXTNS,'sender-fax'), - (TEXTNS,'sender-firstname'), - (TEXTNS,'sender-initials'), - (TEXTNS,'sender-lastname'), - (TEXTNS,'sender-phone-private'), - (TEXTNS,'sender-phone-work'), - (TEXTNS,'sender-position'), - (TEXTNS,'sender-postal-code'), - (TEXTNS,'sender-state-or-province'), - (TEXTNS,'sender-street'), - (TEXTNS,'sender-title'), - (TEXTNS,'sequence'), - (TEXTNS,'sequence-ref'), - (TEXTNS,'sheet-name'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'span'), - (TEXTNS,'subject'), - (TEXTNS,'tab'), - (TEXTNS,'table-formula'), - (TEXTNS,'template-name'), - (TEXTNS,'text-input'), - (TEXTNS,'time'), - (TEXTNS,'title'), - (TEXTNS,'toc-mark'), - (TEXTNS,'toc-mark-end'), - (TEXTNS,'toc-mark-start'), - (TEXTNS,'user-defined'), - (TEXTNS,'user-field-get'), - (TEXTNS,'user-field-input'), - (TEXTNS,'user-index-mark'), - (TEXTNS,'user-index-mark-end'), - (TEXTNS,'user-index-mark-start'), - (TEXTNS,'variable-get'), - (TEXTNS,'variable-input'), - (TEXTNS,'variable-set'), - ), -# allowed_children - (TEXTNS,'ruby-text') : ( - ), - (TEXTNS,'s') : ( - ), - (TEXTNS,'script') : ( - ), - (TEXTNS,'section') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'dde-source'), - (TABLENS,'table'), - (TEXTNS,'alphabetical-index'), - (TEXTNS,'bibliography'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'h'), - (TEXTNS,'illustration-index'), - (TEXTNS,'list'), - (TEXTNS,'numbered-paragraph'), - (TEXTNS,'object-index'), - (TEXTNS,'p'), - (TEXTNS,'section'), - (TEXTNS,'section-source'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'table-index'), - (TEXTNS,'table-of-content'), - (TEXTNS,'user-index'), - ), - (TEXTNS,'section-source') : ( - ), - (TEXTNS,'sender-city') : ( - ), - (TEXTNS,'sender-company') : ( - ), - (TEXTNS,'sender-country') : ( - ), -# allowed_children - (TEXTNS,'sender-email') : ( - ), - (TEXTNS,'sender-fax') : ( - ), - (TEXTNS,'sender-firstname') : ( - ), - (TEXTNS,'sender-initials') : ( - ), - (TEXTNS,'sender-lastname') : ( - ), - (TEXTNS,'sender-phone-private') : ( - ), - (TEXTNS,'sender-phone-work') : ( - ), - (TEXTNS,'sender-position') : ( - ), - (TEXTNS,'sender-postal-code') : ( - ), - (TEXTNS,'sender-state-or-province') : ( - ), - (TEXTNS,'sender-street') : ( - ), - (TEXTNS,'sender-title') : ( - ), - (TEXTNS,'sequence') : ( - ), - (TEXTNS,'sequence-decl') : ( - ), - (TEXTNS,'sequence-decls') : ( - (TEXTNS,'sequence-decl'), - ), - (TEXTNS,'sequence-ref') : ( - ), - (TEXTNS,'sheet-name') : ( - ), - (TEXTNS,'soft-page-break') : ( - ), - (TEXTNS,'sort-key') : ( - ), -# allowed_children - (TEXTNS,'span') : ( - (DR3DNS,'scene'), - (DRAWNS,'a'), - (DRAWNS,'caption'), - (DRAWNS,'circle'), - (DRAWNS,'connector'), - (DRAWNS,'control'), - (DRAWNS,'custom-shape'), - (DRAWNS,'ellipse'), - (DRAWNS,'frame'), - (DRAWNS,'g'), - (DRAWNS,'line'), - (DRAWNS,'measure'), - (DRAWNS,'page-thumbnail'), - (DRAWNS,'path'), - (DRAWNS,'polygon'), - (DRAWNS,'polyline'), - (DRAWNS,'rect'), - (DRAWNS,'regular-polygon'), - (OFFICENS,'annotation'), - (PRESENTATIONNS,'date-time'), - (PRESENTATIONNS,'footer'), - (PRESENTATIONNS,'header'), - (TEXTNS,'a'), - (TEXTNS,'alphabetical-index-mark'), - (TEXTNS,'alphabetical-index-mark-end'), - (TEXTNS,'alphabetical-index-mark-start'), - (TEXTNS,'author-initials'), - (TEXTNS,'author-name'), - (TEXTNS,'bibliography-mark'), - (TEXTNS,'bookmark'), - (TEXTNS,'bookmark-end'), - (TEXTNS,'bookmark-ref'), - (TEXTNS,'bookmark-start'), - (TEXTNS,'change'), - (TEXTNS,'change-end'), - (TEXTNS,'change-start'), - (TEXTNS,'chapter'), - (TEXTNS,'conditional-text'), - (TEXTNS,'creation-date'), - (TEXTNS,'creation-time'), - (TEXTNS,'creator'), - (TEXTNS,'database-display'), - (TEXTNS,'database-name'), - (TEXTNS,'database-next'), - (TEXTNS,'database-row-number'), - (TEXTNS,'database-row-select'), - (TEXTNS,'date'), - (TEXTNS,'dde-connection'), - (TEXTNS,'description'), - (TEXTNS,'editing-cycles'), - (TEXTNS,'editing-duration'), - (TEXTNS,'execute-macro'), - (TEXTNS,'expression'), - (TEXTNS,'file-name'), - (TEXTNS,'hidden-paragraph'), - (TEXTNS,'hidden-text'), - (TEXTNS,'initial-creator'), - (TEXTNS,'keywords'), - (TEXTNS,'line-break'), - (TEXTNS,'measure'), - (TEXTNS,'modification-date'), - (TEXTNS,'modification-time'), - (TEXTNS,'note'), - (TEXTNS,'note-ref'), - (TEXTNS,'page-count'), - (TEXTNS,'paragraph-count'), - (TEXTNS,'word-count'), - (TEXTNS,'character-count'), - (TEXTNS,'table-count'), - (TEXTNS,'image-count'), - (TEXTNS,'object-count'), - (TEXTNS,'page-continuation'), - (TEXTNS,'page-number'), - (TEXTNS,'page-variable-get'), - (TEXTNS,'page-variable-set'), - (TEXTNS,'placeholder'), - (TEXTNS,'print-date'), - (TEXTNS,'print-time'), - (TEXTNS,'printed-by'), - (TEXTNS,'reference-mark'), - (TEXTNS,'reference-mark-end'), - (TEXTNS,'reference-mark-start'), - (TEXTNS,'reference-ref'), - (TEXTNS,'ruby'), - (TEXTNS,'s'), - (TEXTNS,'script'), - (TEXTNS,'sender-city'), - (TEXTNS,'sender-company'), - (TEXTNS,'sender-country'), - (TEXTNS,'sender-email'), - (TEXTNS,'sender-fax'), - (TEXTNS,'sender-firstname'), - (TEXTNS,'sender-initials'), - (TEXTNS,'sender-lastname'), - (TEXTNS,'sender-phone-private'), - (TEXTNS,'sender-phone-work'), - (TEXTNS,'sender-position'), - (TEXTNS,'sender-postal-code'), - (TEXTNS,'sender-state-or-province'), - (TEXTNS,'sender-street'), - (TEXTNS,'sender-title'), - (TEXTNS,'sequence'), - (TEXTNS,'sequence-ref'), - (TEXTNS,'sheet-name'), - (TEXTNS,'soft-page-break'), - (TEXTNS,'span'), - (TEXTNS,'subject'), - (TEXTNS,'tab'), - (TEXTNS,'table-formula'), - (TEXTNS,'template-name'), - (TEXTNS,'text-input'), - (TEXTNS,'time'), - (TEXTNS,'title'), - (TEXTNS,'toc-mark'), - (TEXTNS,'toc-mark-end'), - (TEXTNS,'toc-mark-start'), - (TEXTNS,'user-defined'), - (TEXTNS,'user-field-get'), - (TEXTNS,'user-field-input'), - (TEXTNS,'user-index-mark'), - (TEXTNS,'user-index-mark-end'), - (TEXTNS,'user-index-mark-start'), - (TEXTNS,'variable-get'), - (TEXTNS,'variable-input'), - (TEXTNS,'variable-set'), - ), -# allowed_children - (TEXTNS,'subject') : ( - ), - (TEXTNS,'tab') : ( - ), - (TEXTNS,'table-count') : ( - ), - (TEXTNS,'table-formula') : ( - ), - (TEXTNS,'table-index') : ( - (TEXTNS,'index-body'), - (TEXTNS,'table-index-source'), - ), - (TEXTNS,'table-index-entry-template') : ( - (TEXTNS,'index-entry-page-number'), - (TEXTNS,'index-entry-span'), - (TEXTNS,'index-entry-tab-stop'), - (TEXTNS,'index-entry-text'), - ), - (TEXTNS,'table-index-source') : ( - (TEXTNS,'index-title-template'), - (TEXTNS,'table-index-entry-template'), - ), - (TEXTNS,'table-of-content') : ( - (TEXTNS,'index-body'), - (TEXTNS,'table-of-content-source'), - ), - (TEXTNS,'table-of-content-entry-template') : ( - (TEXTNS,'index-entry-chapter'), - (TEXTNS,'index-entry-link-end'), - (TEXTNS,'index-entry-link-start'), - (TEXTNS,'index-entry-page-number'), - (TEXTNS,'index-entry-span'), - (TEXTNS,'index-entry-tab-stop'), - (TEXTNS,'index-entry-text'), - ), - (TEXTNS,'table-of-content-source') : ( - (TEXTNS,'index-source-styles'), - (TEXTNS,'index-title-template'), - (TEXTNS,'table-of-content-entry-template'), - ), - (TEXTNS,'template-name') : ( - ), - (TEXTNS,'text-input') : ( - ), - (TEXTNS,'time') : ( - ), - (TEXTNS,'title') : ( - ), - (TEXTNS,'toc-mark') : ( - ), - (TEXTNS,'toc-mark-end') : ( - ), - (TEXTNS,'toc-mark-start') : ( - ), -# allowed_children - (TEXTNS,'tracked-changes') : ( - (TEXTNS,'changed-region'), - ), - (TEXTNS,'user-defined') : ( - ), - (TEXTNS,'user-field-decl') : ( - ), - (TEXTNS,'user-field-decls') : ( - (TEXTNS,'user-field-decl'), - ), - (TEXTNS,'user-field-get') : ( - ), - (TEXTNS,'user-field-input') : ( - ), - (TEXTNS,'user-index') : ( - (TEXTNS,'index-body'), - (TEXTNS,'user-index-source'), - ), - (TEXTNS,'user-index-entry-template') : ( - (TEXTNS,'index-entry-chapter'), - (TEXTNS,'index-entry-page-number'), - (TEXTNS,'index-entry-span'), - (TEXTNS,'index-entry-tab-stop'), - (TEXTNS,'index-entry-text'), - ), -# allowed_children - (TEXTNS,'user-index-mark') : ( - ), - (TEXTNS,'user-index-mark-end') : ( - ), - (TEXTNS,'user-index-mark-start') : ( - ), - (TEXTNS,'user-index-source') : ( - (TEXTNS,'index-source-styles'), - (TEXTNS,'index-title-template'), - (TEXTNS,'user-index-entry-template'), - ), - (TEXTNS,'variable-decl') : ( - ), - (TEXTNS,'variable-decls') : ( - (TEXTNS,'variable-decl'), - ), - (TEXTNS,'variable-get') : ( - ), - (TEXTNS,'variable-input') : ( - ), - (TEXTNS,'variable-set') : ( - ), - (TEXTNS,'word-count') : ( - ), -} - -# -# List of elements that allows text nodes -# -allows_text = ( - (CONFIGNS,'config-item'), - (DCNS,'creator'), - (DCNS,'date'), - (DCNS,'description'), - (DCNS,'language'), - (DCNS,'subject'), - (DCNS,'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,'item'), - (FORMNS,'option'), - (MATHNS,'math'), - (METANS,'creation-date'), - (METANS,'date-string'), - (METANS,'editing-cycles'), - (METANS,'editing-duration'), -# allows_text - (METANS,'generator'), - (METANS,'initial-creator'), - (METANS,'keyword'), - (METANS,'print-date'), - (METANS,'printed-by'), - (METANS,'user-defined'), - (NUMBERNS,'currency-symbol'), - (NUMBERNS,'embedded-text'), - (NUMBERNS,'text'), - (OFFICENS,'binary-data'), - (OFFICENS,'script'), - (PRESENTATIONNS,'date-time-decl'), - (PRESENTATIONNS,'footer-decl'), - (PRESENTATIONNS,'header-decl'), - (SVGNS,'desc'), - (SVGNS,'title'), - (TEXTNS,'a'), - (TEXTNS,'author-initials'), - (TEXTNS,'author-name'), - (TEXTNS,'bibliography-mark'), - (TEXTNS,'bookmark-ref'), - (TEXTNS,'chapter'), - (TEXTNS,'character-count'), - (TEXTNS,'conditional-text'), - (TEXTNS,'creation-date'), - (TEXTNS,'creation-time'), - (TEXTNS,'creator'), - (TEXTNS,'database-display'), - (TEXTNS,'database-name'), - (TEXTNS,'database-row-number'), - (TEXTNS,'date'), - (TEXTNS,'dde-connection'), - (TEXTNS,'description'), - (TEXTNS,'editing-cycles'), - (TEXTNS,'editing-duration'), - (TEXTNS,'execute-macro'), - (TEXTNS,'expression'), - (TEXTNS,'file-name'), - (TEXTNS,'h'), - (TEXTNS,'hidden-paragraph'), - (TEXTNS,'hidden-text'), - (TEXTNS,'image-count'), -# allowed_children - (TEXTNS,'index-entry-span'), - (TEXTNS,'index-title-template'), - (TEXTNS,'initial-creator'), - (TEXTNS,'keywords'), - (TEXTNS,'linenumbering-separator'), - (TEXTNS,'measure'), - (TEXTNS,'modification-date'), - (TEXTNS,'modification-time'), - (TEXTNS,'note-citation'), - (TEXTNS,'note-continuation-notice-backward'), - (TEXTNS,'note-continuation-notice-forward'), - (TEXTNS,'note-ref'), - (TEXTNS,'number'), - (TEXTNS,'object-count'), - (TEXTNS,'p'), - (TEXTNS,'page-continuation'), - (TEXTNS,'page-count'), - (TEXTNS,'page-number'), - (TEXTNS,'page-variable-get'), - (TEXTNS,'page-variable-set'), - (TEXTNS,'paragraph-count'), - (TEXTNS,'placeholder'), - (TEXTNS,'print-date'), - (TEXTNS,'print-time'), - (TEXTNS,'printed-by'), - (TEXTNS,'reference-ref'), - (TEXTNS,'ruby-base'), - (TEXTNS,'ruby-text'), - (TEXTNS,'script'), - (TEXTNS,'sender-city'), - (TEXTNS,'sender-company'), - (TEXTNS,'sender-country'), - (TEXTNS,'sender-email'), - (TEXTNS,'sender-fax'), - (TEXTNS,'sender-firstname'), - (TEXTNS,'sender-initials'), - (TEXTNS,'sender-lastname'), - (TEXTNS,'sender-phone-private'), - (TEXTNS,'sender-phone-work'), - (TEXTNS,'sender-position'), - (TEXTNS,'sender-postal-code'), - (TEXTNS,'sender-state-or-province'), - (TEXTNS,'sender-street'), - (TEXTNS,'sender-title'), - (TEXTNS,'sequence'), - (TEXTNS,'sequence-ref'), - (TEXTNS,'sheet-name'), -# allowed_children - (TEXTNS,'span'), - (TEXTNS,'subject'), - (TEXTNS,'table-count'), - (TEXTNS,'table-formula'), - (TEXTNS,'template-name'), - (TEXTNS,'text-input'), - (TEXTNS,'time'), - (TEXTNS,'title'), - (TEXTNS,'user-defined'), - (TEXTNS,'user-field-get'), - (TEXTNS,'user-field-input'), - (TEXTNS,'variable-get'), - (TEXTNS,'variable-input'), - (TEXTNS,'variable-set'), - (TEXTNS,'word-count'), -) - -# Only the elements with at least one required attribute is listed - -required_attributes = { - (ANIMNS,'animate'): ( - (SMILNS,'attributeName'), - ), - (ANIMNS,'animateColor'): ( - (SMILNS,'attributeName'), - ), - (ANIMNS,'animateMotion'): ( - (SMILNS,'attributeName'), - ), - (ANIMNS,'animateTransform'): ( - (SVGNS,'type'), - (SMILNS,'attributeName'), - ), - (ANIMNS,'command'): ( - (ANIMNS,'command'), - ), - (ANIMNS,'param'): ( - (ANIMNS,'name'), - (ANIMNS,'value'), - ), - (ANIMNS,'set'): ( - (SMILNS,'attributeName'), - ), -# required_attributes - (ANIMNS,'transitionFilter'): ( - (SMILNS,'type'), - ), - (CHARTNS,'axis'): ( - (CHARTNS,'dimension'), - ), - (CHARTNS,'chart'): ( - (CHARTNS,'class'), - ), - (CHARTNS,'symbol-image'): ( - (XLINKNS,'href'), - ), - (CONFIGNS,'config-item'): ( - (CONFIGNS,'type'), - (CONFIGNS,'name'), - ), - (CONFIGNS,'config-item-map-indexed'): ( - (CONFIGNS,'name'), - ), - (CONFIGNS,'config-item-map-named'): ( - (CONFIGNS,'name'), - ), - (CONFIGNS,'config-item-set'): ( - (CONFIGNS,'name'), - ), -# required_attributes - (NUMBERNS,'boolean-style'): ( - (STYLENS,'name'), - ), - (NUMBERNS,'currency-style'): ( - (STYLENS,'name'), - ), - (NUMBERNS,'date-style'): ( - (STYLENS,'name'), - ), - (NUMBERNS,'embedded-text'): ( - (NUMBERNS,'position'), - ), - (NUMBERNS,'number-style'): ( - (STYLENS,'name'), - ), - (NUMBERNS,'percentage-style'): ( - (STYLENS,'name'), - ), - (NUMBERNS,'text-style'): ( - (STYLENS,'name'), - ), - (NUMBERNS,'time-style'): ( - (STYLENS,'name'), - ), - (DR3DNS,'extrude'): ( - (SVGNS,'d'), - (SVGNS,'viewBox'), - ), - (DR3DNS,'light'): ( - (DR3DNS,'direction'), - ), - (DR3DNS,'rotate'): ( - (SVGNS,'viewBox'), - (SVGNS,'d'), - ), -# required_attributes - (DRAWNS,'a'): ( - (XLINKNS,'href'), - ), - (DRAWNS,'area-circle'): ( - (SVGNS,'cy'), - (SVGNS,'cx'), - (SVGNS,'r'), - ), - (DRAWNS,'area-polygon'): ( - (SVGNS,'height'), - (SVGNS,'width'), - (DRAWNS,'points'), - (SVGNS,'y'), - (SVGNS,'x'), - (SVGNS,'viewBox'), - ), - (DRAWNS,'area-rectangle'): ( - (SVGNS,'y'), - (SVGNS,'x'), - (SVGNS,'height'), - (SVGNS,'width'), - ), - (DRAWNS,'contour-path'): ( - (DRAWNS,'recreate-on-edit'), - (SVGNS,'viewBox'), - (SVGNS,'d'), - ), - (DRAWNS,'contour-polygon'): ( - (DRAWNS,'points'), - (DRAWNS,'recreate-on-edit'), - (SVGNS,'viewBox'), - ), - (DRAWNS,'control'): ( - (DRAWNS,'control'), - ), - (DRAWNS,'fill-image'): ( - (XLINKNS,'href'), - (DRAWNS,'name'), - ), - (DRAWNS,'floating-frame'): ( - (XLINKNS,'href'), - ), - (DRAWNS,'glue-point'): ( - (SVGNS,'y'), - (SVGNS,'x'), - (DRAWNS,'id'), - (DRAWNS,'escape-direction'), - ), -# required_attributes - (DRAWNS,'gradient'): ( - (DRAWNS,'style'), - ), - (DRAWNS,'handle'): ( - (DRAWNS,'handle-position'), - ), - (DRAWNS,'hatch'): ( - (DRAWNS,'style'), - (DRAWNS,'name'), - ), - (DRAWNS,'layer'): ( - (DRAWNS,'name'), - ), - (DRAWNS,'line'): ( - (SVGNS,'y1'), - (SVGNS,'x2'), - (SVGNS,'x1'), - (SVGNS,'y2'), - ), - (DRAWNS,'marker'): ( - (SVGNS,'d'), - (DRAWNS,'name'), - (SVGNS,'viewBox'), - ), - (DRAWNS,'measure'): ( - (SVGNS,'y1'), - (SVGNS,'x2'), - (SVGNS,'x1'), - (SVGNS,'y2'), - ), - (DRAWNS,'opacity'): ( - (DRAWNS,'style'), - ), - (DRAWNS,'page'): ( - (DRAWNS,'master-page-name'), - ), - (DRAWNS,'path'): ( - (SVGNS,'d'), - (SVGNS,'viewBox'), - ), - (DRAWNS,'plugin'): ( - (XLINKNS,'href'), - ), - (DRAWNS,'polygon'): ( - (DRAWNS,'points'), - (SVGNS,'viewBox'), - ), -# required_attributes - (DRAWNS,'polyline'): ( - (DRAWNS,'points'), - (SVGNS,'viewBox'), - ), - (DRAWNS,'regular-polygon'): ( - (DRAWNS,'corners'), - ), - (DRAWNS,'stroke-dash'): ( - (DRAWNS,'name'), - ), - (FORMNS,'button'): ( - (FORMNS,'id'), - ), - (FORMNS,'checkbox'): ( - (FORMNS,'id'), - ), - (FORMNS,'combobox'): ( - (FORMNS,'id'), - ), - (FORMNS,'connection-resource'): ( - (XLINKNS,'href'), - ), - (FORMNS,'date'): ( - (FORMNS,'id'), - ), - (FORMNS,'file'): ( - (FORMNS,'id'), - ), - (FORMNS,'fixed-text'): ( - (FORMNS,'id'), - ), - (FORMNS,'formatted-text'): ( - (FORMNS,'id'), - ), - (FORMNS,'frame'): ( - (FORMNS,'id'), - ), - (FORMNS,'generic-control'): ( - (FORMNS,'id'), - ), - (FORMNS,'grid'): ( - (FORMNS,'id'), - ), - (FORMNS,'hidden'): ( - (FORMNS,'id'), - ), -# required_attributes - (FORMNS,'image'): ( - (FORMNS,'id'), - ), - (FORMNS,'image-frame'): ( - (FORMNS,'id'), - ), - (FORMNS,'list-property'): ( - (FORMNS,'property-name'), - ), - (FORMNS,'list-value'): ( - (OFFICENS,'string-value'), - ), - (FORMNS,'listbox'): ( - (FORMNS,'id'), - ), - (FORMNS,'number'): ( - (FORMNS,'id'), - ), - (FORMNS,'password'): ( - (FORMNS,'id'), - ), - (FORMNS,'property'): ( - (FORMNS,'property-name'), - ), - (FORMNS,'radio'): ( - (FORMNS,'id'), - ), - (FORMNS,'text'): ( - (FORMNS,'id'), - ), - (FORMNS,'textarea'): ( - (FORMNS,'id'), - ), - (FORMNS,'time'): ( - (FORMNS,'id'), - ), - (FORMNS,'value-range'): ( - (FORMNS,'id'), - ), - (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,'key-derivation') : ( - (MANIFESTNS,'key-derivation-name'), - (MANIFESTNS,'salt'), - (MANIFESTNS,'iteration-count'), - ), -# required_attributes - (METANS,'template'): ( - (XLINKNS,'href'), - ), - (METANS,'user-defined'): ( - (METANS,'name'), - ), - (OFFICENS,'dde-source'): ( - (OFFICENS,'dde-topic'), - (OFFICENS,'dde-application'), - (OFFICENS,'dde-item'), - ), - (OFFICENS,'document'): ( - (OFFICENS,'mimetype'), - ), - (OFFICENS,'script'): ( - (SCRIPTNS,'language'), - ), - (PRESENTATIONNS,'date-time-decl'): ( - (PRESENTATIONNS,'source'), - (PRESENTATIONNS,'name'), - ), - (PRESENTATIONNS,'dim'): ( - (DRAWNS,'color'), - (DRAWNS,'shape-id'), - ), -# required_attributes - (PRESENTATIONNS,'event-listener'): ( - (PRESENTATIONNS,'action'), - (SCRIPTNS,'event-name'), - ), - (PRESENTATIONNS,'footer-decl'): ( - (PRESENTATIONNS,'name'), - ), - (PRESENTATIONNS,'header-decl'): ( - (PRESENTATIONNS,'name'), - ), - (PRESENTATIONNS,'hide-shape'): ( - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'hide-text'): ( - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'placeholder'): ( - (SVGNS,'y'), - (SVGNS,'x'), - (SVGNS,'height'), - (PRESENTATIONNS,'object'), - (SVGNS,'width'), - ), - (PRESENTATIONNS,'play'): ( - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'show'): ( - (PRESENTATIONNS,'name'), - (PRESENTATIONNS,'pages'), - ), - (PRESENTATIONNS,'show-shape'): ( - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'show-text'): ( - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'sound'): ( - (XLINKNS,'href'), - ), - (SCRIPTNS,'event-listener'): ( - (SCRIPTNS,'language'), - (SCRIPTNS,'event-name'), - ), - (STYLENS,'column'): ( - (STYLENS,'rel-width'), - ), -# required_attributes - (STYLENS,'column-sep'): ( - (STYLENS,'width'), - ), - (STYLENS,'columns'): ( - (FONS,'column-count'), - ), - (STYLENS,'font-face'): ( - (STYLENS,'name'), - ), - (STYLENS,'handout-master'): ( - (STYLENS,'page-layout-name'), - ), - (STYLENS,'map'): ( - (STYLENS,'apply-style-name'), - (STYLENS,'condition'), - ), - (STYLENS,'master-page'): ( - (STYLENS,'page-layout-name'), - (STYLENS,'name'), - ), - (STYLENS,'page-layout'): ( - (STYLENS,'name'), - ), - (STYLENS,'presentation-page-layout'): ( - (STYLENS,'name'), - ), - (STYLENS,'style'): ( - (STYLENS,'name'), - ), - (STYLENS,'tab-stop'): ( - (STYLENS,'position'), - ), - (SVGNS,'definition-src'): ( - (XLINKNS,'href'), - ), - (SVGNS,'font-face-uri'): ( - (XLINKNS,'href'), - ), - (SVGNS,'linearGradient'): ( - (DRAWNS,'name'), - ), - (SVGNS,'radialGradient'): ( - (DRAWNS,'name'), - ), - (SVGNS,'stop'): ( - (SVGNS,'offset'), - ), -# required_attributes - (TABLENS,'body'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'cell-address'): ( - (TABLENS,'column'), - (TABLENS,'table'), - (TABLENS,'row'), - ), - (TABLENS,'cell-content-change'): ( - (TABLENS,'id'), - ), - (TABLENS,'cell-range-source'): ( - (TABLENS,'last-row-spanned'), - (TABLENS,'last-column-spanned'), - (XLINKNS,'href'), - (TABLENS,'name'), - ), - (TABLENS,'consolidation'): ( - (TABLENS,'function'), - (TABLENS,'source-cell-range-addresses'), - (TABLENS,'target-cell-address'), - ), - (TABLENS,'content-validation'): ( - (TABLENS,'name'), - ), - (TABLENS,'data-pilot-display-info'): ( - (TABLENS,'member-count'), - (TABLENS,'data-field'), - (TABLENS,'enabled'), - (TABLENS,'display-member-mode'), - ), -# required_attributes - (TABLENS,'data-pilot-field'): ( - (TABLENS,'source-field-name'), - ), - (TABLENS,'data-pilot-field-reference'): ( - (TABLENS,'field-name'), - (TABLENS,'type'), - ), - (TABLENS,'data-pilot-group'): ( - (TABLENS,'name'), - ), - (TABLENS,'data-pilot-group-member'): ( - (TABLENS,'name'), - ), - (TABLENS,'data-pilot-groups'): ( - (TABLENS,'source-field-name'), - (TABLENS,'step'), - (TABLENS,'grouped-by'), - ), - (TABLENS,'data-pilot-layout-info'): ( - (TABLENS,'add-empty-lines'), - (TABLENS,'layout-mode'), - ), - (TABLENS,'data-pilot-member'): ( - (TABLENS,'name'), - ), - (TABLENS,'data-pilot-sort-info'): ( - (TABLENS,'order'), - ), - (TABLENS,'data-pilot-subtotal'): ( - (TABLENS,'function'), - ), - (TABLENS,'data-pilot-table'): ( - (TABLENS,'target-range-address'), - (TABLENS,'name'), - ), - (TABLENS,'database-range'): ( - (TABLENS,'target-range-address'), - ), -# required_attributes - (TABLENS,'database-source-query'): ( - (TABLENS,'query-name'), - (TABLENS,'database-name'), - ), - (TABLENS,'database-source-sql'): ( - (TABLENS,'database-name'), - (TABLENS,'sql-statement'), - ), - (TABLENS,'database-source-table'): ( - (TABLENS,'database-table-name'), - (TABLENS,'database-name'), - ), - (TABLENS,'deletion'): ( - (TABLENS,'position'), - (TABLENS,'type'), - (TABLENS,'id'), - ), - (TABLENS,'dependency'): ( - (TABLENS,'id'), - ), - (TABLENS,'even-columns'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'even-rows'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'filter-condition'): ( - (TABLENS,'operator'), - (TABLENS,'field-number'), - (TABLENS,'value'), - ), - (TABLENS,'first-column'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'first-row'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'insertion'): ( - (TABLENS,'position'), - (TABLENS,'type'), - (TABLENS,'id'), - ), - (TABLENS,'insertion-cut-off'): ( - (TABLENS,'position'), - (TABLENS,'id'), - ), -# required_attributes - (TABLENS,'label-range'): ( - (TABLENS,'label-cell-range-address'), - (TABLENS,'data-cell-range-address'), - (TABLENS,'orientation'), - ), - (TABLENS,'last-column'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'last-row'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'movement'): ( - (TABLENS,'id'), - ), - (TABLENS,'named-expression'): ( - (TABLENS,'expression'), - (TABLENS,'name'), - ), - (TABLENS,'named-range'): ( - (TABLENS,'name'), - (TABLENS,'cell-range-address'), - ), - (TABLENS,'odd-columns'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'odd-rows'): ( - (TEXTNS,'style-name'), - ), - (TABLENS,'operation'): ( - (TABLENS,'index'), - (TABLENS,'name'), - ), -# required_attributes - (TABLENS,'scenario'): ( - (TABLENS,'is-active'), - (TABLENS,'scenario-ranges'), - ), - (TABLENS,'sort-by'): ( - (TABLENS,'field-number'), - ), - (TABLENS,'source-cell-range'): ( - (TABLENS,'cell-range-address'), - ), - (TABLENS,'source-service'): ( - (TABLENS,'source-name'), - (TABLENS,'object-name'), - (TABLENS,'name'), - ), - (TABLENS,'subtotal-field'): ( - (TABLENS,'function'), - (TABLENS,'field-number'), - ), - (TABLENS,'subtotal-rule'): ( - (TABLENS,'group-by-field-number'), - ), - (TABLENS,'table-source'): ( - (XLINKNS,'href'), - ), - (TABLENS,'table-template'): ( - (TEXTNS,'last-row-end-column'), - (TEXTNS,'first-row-end-column'), - (TEXTNS,'name'), - (TEXTNS,'last-row-start-column'), - (TEXTNS,'first-row-start-column'), - ), - (TEXTNS,'a'): ( - (XLINKNS,'href'), - ), -# required_attributes - (TEXTNS,'alphabetical-index'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'alphabetical-index-auto-mark-file'): ( - (XLINKNS,'href'), - ), - (TEXTNS,'alphabetical-index-entry-template'): ( - (TEXTNS,'style-name'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'alphabetical-index-mark'): ( - (TEXTNS,'string-value'), - ), - (TEXTNS,'alphabetical-index-mark-end'): ( - (TEXTNS,'id'), - ), - (TEXTNS,'alphabetical-index-mark-start'): ( - (TEXTNS,'id'), - ), - (TEXTNS,'bibliography'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'bibliography-entry-template'): ( - (TEXTNS,'style-name'), - (TEXTNS,'bibliography-type'), - ), - (TEXTNS,'bibliography-mark'): ( - (TEXTNS,'bibliography-type'), - ), - (TEXTNS,'bookmark'): ( - (TEXTNS,'name'), - ), -# required_attributes - (TEXTNS,'bookmark-end'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'bookmark-start'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'change'): ( - (TEXTNS,'change-id'), - ), - (TEXTNS,'change-end'): ( - (TEXTNS,'change-id'), - ), - (TEXTNS,'change-start'): ( - (TEXTNS,'change-id'), - ), - (TEXTNS,'changed-region'): ( - (TEXTNS,'id'), - ), - (TEXTNS,'chapter'): ( - (TEXTNS,'display'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'conditional-text'): ( - (TEXTNS,'string-value-if-true'), - (TEXTNS,'string-value-if-false'), - (TEXTNS,'condition'), - ), - (TEXTNS,'database-display'): ( - (TEXTNS,'column-name'), - (TEXTNS,'table-name'), - ), - (TEXTNS,'database-name'): ( - (TEXTNS,'table-name'), - ), - (TEXTNS,'database-next'): ( - (TEXTNS,'table-name'), - ), - (TEXTNS,'database-row-number'): ( - (TEXTNS,'table-name'), - ), - (TEXTNS,'database-row-select'): ( - (TEXTNS,'table-name'), - ), - (TEXTNS,'dde-connection'): ( - (TEXTNS,'connection-name'), - ), -# required_attributes - (TEXTNS,'dde-connection-decl'): ( - (OFFICENS,'dde-topic'), - (OFFICENS,'dde-application'), - (OFFICENS,'name'), - (OFFICENS,'dde-item'), - ), - (TEXTNS,'h'): ( - (TEXTNS,'outline-level'), - ), - (TEXTNS,'hidden-paragraph'): ( - (TEXTNS,'condition'), - ), - (TEXTNS,'hidden-text'): ( - (TEXTNS,'string-value'), - (TEXTNS,'condition'), - ), - (TEXTNS,'illustration-index'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'illustration-index-entry-template'): ( - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-entry-bibliography'): ( - (TEXTNS,'bibliography-data-field'), - ), - (TEXTNS,'index-source-style'): ( - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-source-styles'): ( - (TEXTNS,'outline-level'), - ), - (TEXTNS,'index-title'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'list-level-style-bullet'): ( - (TEXTNS,'bullet-char'), - (TEXTNS,'level'), - ), - (TEXTNS,'list-level-style-image'): ( - (TEXTNS,'level'), - ), - (TEXTNS,'list-level-style-number'): ( - (TEXTNS,'level'), - ), - (TEXTNS,'list-style'): ( - (STYLENS,'name'), - ), -# required_attributes - (TEXTNS,'measure'): ( - (TEXTNS,'kind'), - ), - (TEXTNS,'note'): ( - (TEXTNS,'note-class'), - ), - (TEXTNS,'note-ref'): ( - (TEXTNS,'note-class'), - ), - (TEXTNS,'notes-configuration'): ( - (TEXTNS,'note-class'), - ), - (TEXTNS,'object-index'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'object-index-entry-template'): ( - (TEXTNS,'style-name'), - ), - (TEXTNS,'outline-level-style'): ( - (TEXTNS,'level'), - ), - (TEXTNS,'page'): ( - (TEXTNS,'master-page-name'), - ), - (TEXTNS,'page-continuation'): ( - (TEXTNS,'select-page'), - ), - (TEXTNS,'placeholder'): ( - (TEXTNS,'placeholder-type'), - ), - (TEXTNS,'reference-mark'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'reference-mark-end'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'reference-mark-start'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'section'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'sequence'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'sequence-decl'): ( - (TEXTNS,'display-outline-level'), - (TEXTNS,'name'), - ), -# required_attributes - (TEXTNS,'sort-key'): ( - (TEXTNS,'key'), - ), - (TEXTNS,'table-index'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'table-index-entry-template'): ( - (TEXTNS,'style-name'), - ), - (TEXTNS,'table-of-content'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'table-of-content-entry-template'): ( - (TEXTNS,'style-name'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'toc-mark'): ( - (TEXTNS,'string-value'), - ), - (TEXTNS,'toc-mark-end'): ( - (TEXTNS,'id'), - ), - (TEXTNS,'toc-mark-start'): ( - (TEXTNS,'id'), - ), - (TEXTNS,'user-defined'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'user-field-decl'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'user-field-get'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'user-field-input'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'user-index'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'user-index-entry-template'): ( - (TEXTNS,'style-name'), - (TEXTNS,'outline-level'), - ), -# required_attributes - (TEXTNS,'user-index-mark'): ( - (TEXTNS,'index-name'), - (TEXTNS,'string-value'), - ), - (TEXTNS,'user-index-mark-end'): ( - (TEXTNS,'id'), - ), - (TEXTNS,'user-index-mark-start'): ( - (TEXTNS,'index-name'), - (TEXTNS,'id'), - ), - (TEXTNS,'user-index-source'): ( - (TEXTNS,'index-name'), - ), - (TEXTNS,'variable-decl'): ( - (TEXTNS,'name'), - (OFFICENS,'value-type'), - ), - (TEXTNS,'variable-get'): ( - (TEXTNS,'name'), - ), - (TEXTNS,'variable-input'): ( - (TEXTNS,'name'), - (OFFICENS,'value-type'), - ), - (TEXTNS,'variable-set'): ( - (TEXTNS,'name'), - ), -} - -# Empty list means the element has no allowed attributes -# None means anything goes - -allowed_attributes = { - (DCNS,'creator'):( - ), - (DCNS,'date'):( - ), - (DCNS,'description'):( - ), - (DCNS,'language'):( - ), - (DCNS,'subject'):( - ), - (DCNS,'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,'math'): None, - (XFORMSNS,'model'): None, -# allowed_attributes - (ANIMNS,'animate'):( - (ANIMNS,'formula'), - (ANIMNS,'sub-item'), - (SMILNS,'accelerate'), - (SMILNS,'accumulate'), - (SMILNS,'additive'), - (SMILNS,'attributeName'), - (SMILNS,'autoReverse'), - (SMILNS,'begin'), - (SMILNS,'by'), - (SMILNS,'calcMode'), - (SMILNS,'decelerate'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'fill'), - (SMILNS,'fillDefault'), - (SMILNS,'from'), - (SMILNS,'keySplines'), - (SMILNS,'keyTimes'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (SMILNS,'restart'), - (SMILNS,'restartDefault'), - (SMILNS,'targetElement'), - (SMILNS,'to'), - (SMILNS,'values'), - ), -# allowed_attributes - (ANIMNS,'animateColor'):( - (ANIMNS,'color-interpolation'), - (ANIMNS,'color-interpolation-direction'), - (ANIMNS,'formula'), - (ANIMNS,'sub-item'), - (SMILNS,'accelerate'), - (SMILNS,'accumulate'), - (SMILNS,'additive'), - (SMILNS,'attributeName'), - (SMILNS,'autoReverse'), - (SMILNS,'begin'), - (SMILNS,'by'), - (SMILNS,'calcMode'), - (SMILNS,'decelerate'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'fill'), - (SMILNS,'fillDefault'), - (SMILNS,'from'), - (SMILNS,'keySplines'), - (SMILNS,'keyTimes'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (SMILNS,'restart'), - (SMILNS,'restartDefault'), - (SMILNS,'targetElement'), - (SMILNS,'to'), - (SMILNS,'values'), - ), -# allowed_attributes - (ANIMNS,'animateMotion'):( - (ANIMNS,'formula'), - (ANIMNS,'sub-item'), - (SMILNS,'accelerate'), - (SMILNS,'accumulate'), - (SMILNS,'additive'), - (SMILNS,'attributeName'), - (SMILNS,'autoReverse'), - (SMILNS,'begin'), - (SMILNS,'by'), - (SMILNS,'calcMode'), - (SMILNS,'decelerate'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'fill'), - (SMILNS,'fillDefault'), - (SMILNS,'from'), - (SMILNS,'keySplines'), - (SMILNS,'keyTimes'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (SMILNS,'restart'), - (SMILNS,'restartDefault'), - (SMILNS,'targetElement'), - (SMILNS,'to'), - (SMILNS,'values'), - (SVGNS,'origin'), - (SVGNS,'path'), - ), -# allowed_attributes - (ANIMNS,'animateTransform'):( - (ANIMNS,'formula'), - (ANIMNS,'sub-item'), - (SMILNS,'accelerate'), - (SMILNS,'accumulate'), - (SMILNS,'additive'), - (SMILNS,'attributeName'), - (SMILNS,'autoReverse'), - (SMILNS,'begin'), - (SMILNS,'by'), - (SMILNS,'decelerate'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'fill'), - (SMILNS,'fillDefault'), - (SMILNS,'from'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (SMILNS,'restart'), - (SMILNS,'restartDefault'), - (SMILNS,'targetElement'), - (SMILNS,'to'), - (SMILNS,'values'), - (SVGNS,'type'), - ), -# allowed_attributes - (ANIMNS,'audio'):( - (ANIMNS,'audio-level'), - (ANIMNS,'id'), - (PRESENTATIONNS,'group-id'), - (PRESENTATIONNS,'master-element'), - (PRESENTATIONNS,'node-type'), - (PRESENTATIONNS,'preset-class'), - (PRESENTATIONNS,'preset-id'), - (PRESENTATIONNS,'preset-sub-type'), - (SMILNS,'begin'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (XLINKNS,'href'), - ), - (ANIMNS,'command'):( - (PRESENTATIONNS,'node-type'), - (SMILNS,'begin'), - (SMILNS,'end'), - (PRESENTATIONNS,'group-id'), - (PRESENTATIONNS,'preset-class'), - (PRESENTATIONNS,'preset-id'), - (ANIMNS,'sub-item'), - (ANIMNS,'command'), - (PRESENTATIONNS,'preset-sub-type'), - (SMILNS,'targetElement'), - (ANIMNS,'id'), - (PRESENTATIONNS,'master-element'), - ), -# allowed_attributes - (ANIMNS,'iterate'):( - (ANIMNS,'id'), - (ANIMNS,'iterate-interval'), - (ANIMNS,'iterate-type'), - (ANIMNS,'sub-item'), - (PRESENTATIONNS,'group-id'), - (PRESENTATIONNS,'master-element'), - (PRESENTATIONNS,'node-type'), - (PRESENTATIONNS,'preset-class'), - (PRESENTATIONNS,'preset-id'), - (PRESENTATIONNS,'preset-sub-type'), - (SMILNS,'accelerate'), - (SMILNS,'autoReverse'), - (SMILNS,'begin'), - (SMILNS,'decelerate'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'endsync'), - (SMILNS,'fill'), - (SMILNS,'fillDefault'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (SMILNS,'restart'), - (SMILNS,'restartDefault'), - (SMILNS,'targetElement'), - ), - (ANIMNS,'par'):( - (PRESENTATIONNS,'node-type'), - (SMILNS,'decelerate'), - (SMILNS,'begin'), - (SMILNS,'end'), - (PRESENTATIONNS,'group-id'), - (SMILNS,'accelerate'), - (SMILNS,'repeatDur'), - (SMILNS,'repeatCount'), - (SMILNS,'autoReverse'), - (PRESENTATIONNS,'preset-class'), - (SMILNS,'fillDefault'), - (PRESENTATIONNS,'preset-id'), - (PRESENTATIONNS,'preset-sub-type'), - (SMILNS,'restartDefault'), - (SMILNS,'endsync'), - (SMILNS,'dur'), - (SMILNS,'fill'), - (ANIMNS,'id'), - (SMILNS,'restart'), - (PRESENTATIONNS,'master-element'), - ), -# allowed_attributes - (ANIMNS,'param'):( - (ANIMNS,'name'), - (ANIMNS,'value'), - ), - (ANIMNS,'seq'):( - (ANIMNS,'id'), - (PRESENTATIONNS,'group-id'), - (PRESENTATIONNS,'master-element'), - (PRESENTATIONNS,'node-type'), - (PRESENTATIONNS,'preset-class'), - (PRESENTATIONNS,'preset-id'), - (PRESENTATIONNS,'preset-sub-type'), - (SMILNS,'accelerate'), - (SMILNS,'autoReverse'), - (SMILNS,'begin'), - (SMILNS,'decelerate'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'endsync'), - (SMILNS,'fill'), - (SMILNS,'fillDefault'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (SMILNS,'restart'), - (SMILNS,'restartDefault'), - ), - (ANIMNS,'set'):( - (ANIMNS,'sub-item'), - (SMILNS,'accelerate'), - (SMILNS,'accumulate'), - (SMILNS,'autoReverse'), - (SMILNS,'additive'), - (SMILNS,'attributeName'), - (SMILNS,'begin'), - (SMILNS,'decelerate'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'fill'), - (SMILNS,'fillDefault'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (SMILNS,'restart'), - (SMILNS,'restartDefault'), - (SMILNS,'targetElement'), - (SMILNS,'to'), - - ), -# allowed_attributes - (ANIMNS,'transitionFilter'):( - (ANIMNS,'formula'), - (ANIMNS,'sub-item'), - (SMILNS,'accelerate'), - (SMILNS,'accumulate'), - (SMILNS,'additive'), - (SMILNS,'autoReverse'), - (SMILNS,'begin'), - (SMILNS,'by'), - (SMILNS,'calcMode'), - (SMILNS,'decelerate'), - (SMILNS,'direction'), - (SMILNS,'dur'), - (SMILNS,'end'), - (SMILNS,'fadeColor'), - (SMILNS,'fill'), - (SMILNS,'fillDefault'), - (SMILNS,'from'), - (SMILNS,'mode'), - (SMILNS,'repeatCount'), - (SMILNS,'repeatDur'), - (SMILNS,'restart'), - (SMILNS,'restartDefault'), - (SMILNS,'subtype'), - (SMILNS,'targetElement'), - (SMILNS,'to'), - (SMILNS,'type'), - (SMILNS,'values'), - - ), -# allowed_attributes - (CHARTNS,'axis'):( - (CHARTNS,'style-name'), - (CHARTNS,'dimension'), - (CHARTNS,'name'), - ), - (CHARTNS,'categories'):( - (TABLENS,'cell-range-address'), - ), - (CHARTNS,'chart'):( - (CHARTNS,'column-mapping'), - (CHARTNS,'row-mapping'), - (SVGNS,'height'), - (SVGNS,'width'), - (CHARTNS,'style-name'), - (CHARTNS,'class'), - ), - (CHARTNS,'data-point'):( - (CHARTNS,'repeated'), - (CHARTNS,'style-name'), - ), - (CHARTNS,'domain'):( - (TABLENS,'cell-range-address'), - ), - (CHARTNS,'error-indicator'):( - (CHARTNS,'style-name'), - ), - (CHARTNS,'floor'):( - (SVGNS,'width'), - (CHARTNS,'style-name'), - ), -# allowed_attributes - (CHARTNS,'footer'):( - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'cell-range'), - (CHARTNS,'style-name'), - ), - (CHARTNS,'grid'):( - (CHARTNS,'style-name'), - (CHARTNS,'class'), - ), - (CHARTNS,'legend'):( - (CHARTNS,'legend-align'), - (STYLENS,'legend-expansion-aspect-ratio'), - (STYLENS,'legend-expansion'), - (CHARTNS,'legend-position'), - (CHARTNS,'style-name'), - (SVGNS,'y'), - (SVGNS,'x'), - ), - (CHARTNS,'mean-value'):( - (CHARTNS,'style-name'), - ), - (CHARTNS,'plot-area'):( - (DR3DNS,'ambient-color'), - (DR3DNS,'distance'), - (DR3DNS,'vrp'), - (DR3DNS,'focal-length'), - (CHARTNS,'data-source-has-labels'), - (DR3DNS,'lighting-mode'), - (DR3DNS,'shade-mode'), - (DR3DNS,'transform'), - (DR3DNS,'shadow-slant'), - (SVGNS,'height'), - (SVGNS,'width'), - (CHARTNS,'style-name'), - (DR3DNS,'vup'), - (SVGNS,'y'), - (SVGNS,'x'), - (DR3DNS,'vpn'), - (TABLENS,'cell-range-address'), - (DR3DNS,'projection'), - ), - (CHARTNS,'regression-curve'):( - (CHARTNS,'style-name'), - ), - (CHARTNS,'series'):( - (CHARTNS,'style-name'), - (CHARTNS,'attached-axis'), - (CHARTNS,'values-cell-range-address'), - (CHARTNS,'label-cell-address'), - (CHARTNS,'class'), - ), - (CHARTNS,'stock-gain-marker'):( - (CHARTNS,'style-name'), - ), -# allowed_attributes - (CHARTNS,'stock-loss-marker'):( - (CHARTNS,'style-name'), - ), - (CHARTNS,'stock-range-line'):( - (CHARTNS,'style-name'), - ), - (CHARTNS,'subtitle'):( - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'cell-range'), - (CHARTNS,'style-name'), - ), - (CHARTNS,'symbol-image'):( - (XLINKNS,'href'), - ), - (CHARTNS,'title'):( - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'cell-range'), - (CHARTNS,'style-name'), - ), - (CHARTNS,'wall'):( - (SVGNS,'width'), - (CHARTNS,'style-name'), - ), - (CONFIGNS,'config-item'):( - (CONFIGNS,'type'), - (CONFIGNS,'name'), - ), - (CONFIGNS,'config-item-map-entry'):( - (CONFIGNS,'name'), - ), - (CONFIGNS,'config-item-map-indexed'):( - (CONFIGNS,'name'), - ), - (CONFIGNS,'config-item-map-named'):( - (CONFIGNS,'name'), - ), - (CONFIGNS,'config-item-set'):( - (CONFIGNS,'name'), - ), -# allowed_attributes - (NUMBERNS,'am-pm'):( - ), - (NUMBERNS,'boolean'):( - ), - (NUMBERNS,'boolean-style'):( - (NUMBERNS,'transliteration-language'), - (STYLENS,'name'), - (STYLENS,'display-name'), - (NUMBERNS,'language'), - (NUMBERNS,'title'), - (NUMBERNS,'country'), - (NUMBERNS,'transliteration-format'), - (NUMBERNS,'transliteration-style'), - (STYLENS,'volatile'), - (NUMBERNS,'transliteration-country'), - ), - (NUMBERNS,'currency-style'):( - (NUMBERNS,'transliteration-language'), - (STYLENS,'name'), - (STYLENS,'display-name'), - (NUMBERNS,'language'), - (NUMBERNS,'title'), - (NUMBERNS,'country'), - (NUMBERNS,'transliteration-format'), - (NUMBERNS,'transliteration-style'), - (STYLENS,'volatile'), - (NUMBERNS,'transliteration-country'), - (NUMBERNS,'automatic-order'), - ), - (NUMBERNS,'currency-symbol'):( - (NUMBERNS,'country'), - (NUMBERNS,'language'), - ), -# allowed_attributes - (NUMBERNS,'date-style'):( - (NUMBERNS,'transliteration-language'), - (STYLENS,'name'), - (STYLENS,'display-name'), - (NUMBERNS,'language'), - (NUMBERNS,'title'), - (NUMBERNS,'country'), - (NUMBERNS,'transliteration-format'), - (NUMBERNS,'transliteration-style'), - (NUMBERNS,'format-source'), - (STYLENS,'volatile'), - (NUMBERNS,'transliteration-country'), - (NUMBERNS,'automatic-order'), - ), - (NUMBERNS,'day'):( - (NUMBERNS,'style'), - (NUMBERNS,'calendar'), - ), - (NUMBERNS,'day-of-week'):( - (NUMBERNS,'style'), - (NUMBERNS,'calendar'), - ), - (NUMBERNS,'embedded-text'):( - (NUMBERNS,'position'), - ), - (NUMBERNS,'era'):( - (NUMBERNS,'style'), - (NUMBERNS,'calendar'), - ), - (NUMBERNS,'fraction'):( - (NUMBERNS,'grouping'), - (NUMBERNS,'min-denominator-digits'), - (NUMBERNS,'min-numerator-digits'), - (NUMBERNS,'min-integer-digits'), - (NUMBERNS,'denominator-value'), - ), - (NUMBERNS,'hours'):( - (NUMBERNS,'style'), - ), -# allowed_attributes - (NUMBERNS,'minutes'):( - (NUMBERNS,'style'), - ), - (NUMBERNS,'month'):( - (NUMBERNS,'style'), - (NUMBERNS,'calendar'), - (NUMBERNS,'possessive-form'), - (NUMBERNS,'textual'), - ), - (NUMBERNS,'number'):( - (NUMBERNS,'display-factor'), - (NUMBERNS,'decimal-places'), - (NUMBERNS,'decimal-replacement'), - (NUMBERNS,'min-integer-digits'), - (NUMBERNS,'grouping'), - ), - (NUMBERNS,'number-style'):( - (NUMBERNS,'transliteration-language'), - (STYLENS,'name'), - (STYLENS,'display-name'), - (NUMBERNS,'language'), - (NUMBERNS,'title'), - (NUMBERNS,'country'), - (NUMBERNS,'transliteration-format'), - (NUMBERNS,'transliteration-style'), - (STYLENS,'volatile'), - (NUMBERNS,'transliteration-country'), - ), -# allowed_attributes - (NUMBERNS,'percentage-style'):( - (NUMBERNS,'transliteration-language'), - (STYLENS,'name'), - (STYLENS,'display-name'), - (NUMBERNS,'language'), - (NUMBERNS,'title'), - (NUMBERNS,'country'), - (NUMBERNS,'transliteration-format'), - (NUMBERNS,'transliteration-style'), - (STYLENS,'volatile'), - (NUMBERNS,'transliteration-country'), - ), - (NUMBERNS,'quarter'):( - (NUMBERNS,'style'), - (NUMBERNS,'calendar'), - ), - (NUMBERNS,'scientific-number'):( - (NUMBERNS,'min-exponent-digits'), - (NUMBERNS,'decimal-places'), - (NUMBERNS,'min-integer-digits'), - (NUMBERNS,'grouping'), - ), - (NUMBERNS,'seconds'):( - (NUMBERNS,'style'), - (NUMBERNS,'decimal-places'), - ), - (NUMBERNS,'text'):( - ), - (NUMBERNS,'text-content'):( - ), - (NUMBERNS,'text-style'):( - (NUMBERNS,'transliteration-language'), - (STYLENS,'name'), - (STYLENS,'display-name'), - (NUMBERNS,'language'), - (NUMBERNS,'title'), - (NUMBERNS,'country'), - (NUMBERNS,'transliteration-format'), - (NUMBERNS,'transliteration-style'), - (STYLENS,'volatile'), - (NUMBERNS,'transliteration-country'), - ), - (NUMBERNS,'time-style'):( - (NUMBERNS,'transliteration-language'), - (NUMBERNS,'transliteration-format'), - (STYLENS,'name'), - (STYLENS,'display-name'), - (NUMBERNS,'language'), - (NUMBERNS,'title'), - (NUMBERNS,'country'), - (NUMBERNS,'truncate-on-overflow'), - (NUMBERNS,'transliteration-style'), - (NUMBERNS,'format-source'), - (STYLENS,'volatile'), - (NUMBERNS,'transliteration-country'), - ), - (NUMBERNS,'week-of-year'):( - (NUMBERNS,'calendar'), - ), - (NUMBERNS,'year'):( - (NUMBERNS,'style'), - (NUMBERNS,'calendar'), - ), - (DR3DNS,'cube'):( - (DR3DNS,'min-edge'), - (DR3DNS,'max-edge'), - (DRAWNS,'layer'), - (DR3DNS,'transform'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (DRAWNS,'id'), - ), - (DR3DNS,'extrude'):( - (DRAWNS,'layer'), - (SVGNS,'d'), - (DR3DNS,'transform'), - (SVGNS,'viewBox'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (DRAWNS,'id'), - ), - (DR3DNS,'light'):( - (DR3DNS,'diffuse-color'), - (DR3DNS,'direction'), - (DR3DNS,'specular'), - (DR3DNS,'enabled'), - ), - (DR3DNS,'rotate'):( - (DRAWNS,'layer'), - (SVGNS,'d'), - (DR3DNS,'transform'), - (SVGNS,'viewBox'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (DRAWNS,'id'), - ), -# allowed_attributes - (DR3DNS,'scene'):( - (DR3DNS,'ambient-color'), - (DR3DNS,'distance'), - (DR3DNS,'focal-length'), - (DR3DNS,'lighting-mode'), - (DR3DNS,'projection'), - (DR3DNS,'shade-mode'), - (DR3DNS,'shadow-slant'), - (DR3DNS,'transform'), - (DR3DNS,'vpn'), - (DR3DNS,'vrp'), - (DR3DNS,'vup'), - (DRAWNS,'id'), - (DRAWNS,'caption-id'), - (DRAWNS,'layer'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (PRESENTATIONNS,'style-name'), - (SVGNS,'height'), - (SVGNS,'width'), - (SVGNS,'x'), - (SVGNS,'y'), - (TABLENS,'end-cell-address'), - (TABLENS,'end-x'), - (TABLENS,'end-y'), - (TABLENS,'table-background'), - (TEXTNS,'anchor-page-number'), - (TEXTNS,'anchor-type'), - ), - (DR3DNS,'sphere'):( - (DRAWNS,'layer'), - (DR3DNS,'center'), - (DR3DNS,'transform'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (DRAWNS,'id'), - (DR3DNS,'size'), - ), - (DRAWNS,'a'):( - (OFFICENS,'name'), - (OFFICENS,'title'), - (XLINKNS,'show'), - (OFFICENS,'target-frame-name'), - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (OFFICENS,'server-map'), - ), - (DRAWNS,'applet'):( - (DRAWNS,'code'), - (XLINKNS,'show'), - (DRAWNS,'object'), - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (DRAWNS,'archive'), - (DRAWNS,'may-script'), - ), - (DRAWNS,'area-circle'):( - (OFFICENS,'name'), - (XLINKNS,'show'), - (SVGNS,'cx'), - (XLINKNS,'type'), - (DRAWNS,'nohref'), - (SVGNS,'cy'), - (XLINKNS,'href'), - (SVGNS,'r'), - (OFFICENS,'target-frame-name'), - ), - (DRAWNS,'area-polygon'):( - (OFFICENS,'name'), - (XLINKNS,'show'), - (XLINKNS,'type'), - (SVGNS,'height'), - (DRAWNS,'nohref'), - (SVGNS,'width'), - (XLINKNS,'href'), - (SVGNS,'y'), - (SVGNS,'x'), - (OFFICENS,'target-frame-name'), - (SVGNS,'viewBox'), - (DRAWNS,'points'), - ), - (DRAWNS,'area-rectangle'):( - (OFFICENS,'name'), - (XLINKNS,'show'), - (XLINKNS,'type'), - (SVGNS,'height'), - (DRAWNS,'nohref'), - (SVGNS,'width'), - (XLINKNS,'href'), - (SVGNS,'y'), - (SVGNS,'x'), - (OFFICENS,'target-frame-name'), - ), - (DRAWNS,'caption'):( - (TABLENS,'table-background'), - (DRAWNS,'layer'), - (DRAWNS,'caption-id'), - (TABLENS,'end-cell-address'), - (DRAWNS,'name'), - (DRAWNS,'text-style-name'), - (DRAWNS,'caption-point-y'), - (DRAWNS,'caption-point-x'), - (DRAWNS,'transform'), - (TABLENS,'end-y'), - (DRAWNS,'corner-radius'), - (SVGNS,'width'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y'), - (SVGNS,'x'), - (SVGNS,'height'), - (DRAWNS,'id'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'circle'):( - (DRAWNS,'end-angle'), - (DRAWNS,'id'), - (DRAWNS,'kind'), - (DRAWNS,'layer'), - (DRAWNS,'name'), - (DRAWNS,'start-angle'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (DRAWNS,'caption-id'), - (DRAWNS,'text-style-name'), - (DRAWNS,'transform'), - (DRAWNS,'z-index'), - (PRESENTATIONNS,'class-names'), - (PRESENTATIONNS,'style-name'), - (SVGNS,'cx'), - (SVGNS,'cy'), - (SVGNS,'height'), - (SVGNS,'r'), - (SVGNS,'width'), - (SVGNS,'x'), - (SVGNS,'y'), - (TABLENS,'end-cell-address'), - (TABLENS,'end-x'), - (TABLENS,'end-y'), - (TABLENS,'table-background'), - (TEXTNS,'anchor-page-number'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'connector'):( - (DRAWNS,'layer'), - (DRAWNS,'end-shape'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y1'), - (SVGNS,'y2'), - (TABLENS,'table-background'), - (TABLENS,'end-cell-address'), - (DRAWNS,'transform'), - (DRAWNS,'id'), - (TABLENS,'end-y'), - (TABLENS,'end-x'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (DRAWNS,'caption-id'), - (DRAWNS,'type'), - (DRAWNS,'start-shape'), - (DRAWNS,'z-index'), - (PRESENTATIONNS,'style-name'), - (DRAWNS,'start-glue-point'), - (SVGNS,'x2'), - (SVGNS,'x1'), - (TEXTNS,'anchor-type'), - (DRAWNS,'line-skew'), - (DRAWNS,'name'), - (DRAWNS,'end-glue-point'), - (DRAWNS,'text-style-name'), - ), - (DRAWNS,'contour-path'):( - (SVGNS,'d'), - (SVGNS,'width'), - (DRAWNS,'recreate-on-edit'), - (SVGNS,'viewBox'), - (SVGNS,'height'), - ), - (DRAWNS,'contour-polygon'):( - (SVGNS,'width'), - (DRAWNS,'points'), - (DRAWNS,'recreate-on-edit'), - (SVGNS,'viewBox'), - (SVGNS,'height'), - ), - (DRAWNS,'control'):( - (DRAWNS,'control'), - (DRAWNS,'layer'), - (DRAWNS,'caption-id'), - (TABLENS,'end-cell-address'), - (DRAWNS,'name'), - (DRAWNS,'text-style-name'), - (TABLENS,'table-background'), - (DRAWNS,'transform'), - (SVGNS,'height'), - (SVGNS,'width'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'end-y'), - (DRAWNS,'id'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'custom-shape'):( - (DRAWNS,'engine'), - (DRAWNS,'caption-id'), - (DRAWNS,'layer'), - (TABLENS,'end-cell-address'), - (DRAWNS,'name'), - (DRAWNS,'text-style-name'), - (TABLENS,'table-background'), - (DRAWNS,'transform'), - (SVGNS,'height'), - (SVGNS,'width'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'end-y'), - (DRAWNS,'data'), - (DRAWNS,'id'), - (TEXTNS,'anchor-type'), - ), -# allowed_attributes - (DRAWNS,'ellipse'):( - (DRAWNS,'layer'), - (DRAWNS,'start-angle'), - (SVGNS,'cy'), - (SVGNS,'cx'), - (TABLENS,'table-background'), - (TABLENS,'end-cell-address'), - (SVGNS,'rx'), - (DRAWNS,'transform'), - (DRAWNS,'id'), - (SVGNS,'width'), - (TABLENS,'end-y'), - (TABLENS,'end-x'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (DRAWNS,'end-angle'), - (DRAWNS,'z-index'), - (DRAWNS,'caption-id'), - (PRESENTATIONNS,'style-name'), - (SVGNS,'height'), - (TEXTNS,'anchor-type'), - (SVGNS,'ry'), - (DRAWNS,'kind'), - (DRAWNS,'name'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y'), - (SVGNS,'x'), - (DRAWNS,'text-style-name'), - ), -# allowed_attributes - (DRAWNS,'enhanced-geometry'):( - (DRAWNS,'extrusion-rotation-center'), - (DRAWNS,'extrusion-shininess'), - (DRAWNS,'extrusion-rotation-angle'), - (DRAWNS,'extrusion-allowed'), - (DRAWNS,'extrusion-first-light-level'), - (DRAWNS,'extrusion-specularity'), - (DRAWNS,'extrusion-viewpoint'), - (DRAWNS,'extrusion-second-light-level'), - (DRAWNS,'extrusion-origin'), - (DRAWNS,'extrusion-color'), - (SVGNS,'viewBox'), - (DR3DNS,'projection'), - (DRAWNS,'extrusion-metal'), - (DRAWNS,'extrusion-number-of-line-segments'), - (DRAWNS,'text-path-same-letter-heights'), - (DRAWNS,'extrusion-first-light-harsh'), - (DRAWNS,'enhanced-path'), - (DRAWNS,'text-rotate-angle'), - (DRAWNS,'type'), - (DRAWNS,'glue-point-leaving-directions'), - (DRAWNS,'concentric-gradient-fill-allowed'), - (DRAWNS,'text-path-scale'), - (DRAWNS,'extrusion-brightness'), - (DRAWNS,'extrusion-first-light-direction'), - (DRAWNS,'extrusion-light-face'), - (DRAWNS,'text-path-allowed'), - (DRAWNS,'glue-points'), - (DRAWNS,'mirror-vertical'), - (DRAWNS,'extrusion-depth'), - (DRAWNS,'extrusion-diffusion'), - (DRAWNS,'extrusion-second-light-direction'), - (DRAWNS,'extrusion-skew'), - (DR3DNS,'shade-mode'), - (DRAWNS,'path-stretchpoint-y'), - (DRAWNS,'modifiers'), - (DRAWNS,'extrusion'), - (DRAWNS,'path-stretchpoint-x'), - (DRAWNS,'text-areas'), - (DRAWNS,'mirror-horizontal'), - (DRAWNS,'text-path-mode'), - (DRAWNS,'extrusion-second-light-harsh'), - (DRAWNS,'glue-point-type'), - (DRAWNS,'text-path'), - ), -# allowed_attributes - (DRAWNS,'equation'):( - (DRAWNS,'formula'), - (DRAWNS,'name'), - ), - (DRAWNS,'fill-image'):( - (DRAWNS,'name'), - (XLINKNS,'show'), - (XLINKNS,'actuate'), - (SVGNS,'height'), - (SVGNS,'width'), - (XLINKNS,'href'), - (DRAWNS,'display-name'), - (XLINKNS,'type'), - ), - (DRAWNS,'floating-frame'):( - (XLINKNS,'href'), - (XLINKNS,'actuate'), - (DRAWNS,'frame-name'), - (XLINKNS,'type'), - (XLINKNS,'show'), - ), - (DRAWNS,'frame'):( - (DRAWNS,'copy-of'), - (DRAWNS,'id'), - (DRAWNS,'layer'), - (DRAWNS,'name'), - (DRAWNS,'class-names'), - (DRAWNS,'caption-id'), - (DRAWNS,'style-name'), - (DRAWNS,'text-style-name'), - (DRAWNS,'transform'), - (DRAWNS,'z-index'), - (PRESENTATIONNS,'class'), - (PRESENTATIONNS,'class-names'), - (PRESENTATIONNS,'placeholder'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'user-transformed'), - (STYLENS,'rel-height'), - (STYLENS,'rel-width'), - (SVGNS,'height'), - (SVGNS,'width'), - (SVGNS,'x'), - (SVGNS,'y'), - (TABLENS,'end-cell-address'), - (TABLENS,'end-x'), - (TABLENS,'end-y'), - (TABLENS,'table-background'), - (TEXTNS,'anchor-page-number'), - (TEXTNS,'anchor-type'), - ), -# allowed_attributes - (DRAWNS,'g'):( - (DRAWNS,'id'), - (DRAWNS,'caption-id'), - (DRAWNS,'name'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (DRAWNS,'z-index'), - (PRESENTATIONNS,'class-names'), - (PRESENTATIONNS,'style-name'), - (SVGNS,'y'), - (TABLENS,'end-cell-address'), - (TABLENS,'end-x'), - (TABLENS,'end-y'), - (TABLENS,'table-background'), - (TEXTNS,'anchor-page-number'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'glue-point'):( - (SVGNS,'y'), - (SVGNS,'x'), - (DRAWNS,'align'), - (DRAWNS,'id'), - (DRAWNS,'escape-direction'), - ), - (DRAWNS,'gradient'):( - (DRAWNS,'style'), - (DRAWNS,'angle'), - (DRAWNS,'name'), - (DRAWNS,'end-color'), - (DRAWNS,'start-color'), - (DRAWNS,'cy'), - (DRAWNS,'cx'), - (DRAWNS,'display-name'), - (DRAWNS,'border'), - (DRAWNS,'end-intensity'), - (DRAWNS,'start-intensity'), - ), - (DRAWNS,'handle'):( - (DRAWNS,'handle-radius-range-minimum'), - (DRAWNS,'handle-switched'), - (DRAWNS,'handle-range-y-maximum'), - (DRAWNS,'handle-mirror-horizontal'), - (DRAWNS,'handle-range-x-maximum'), - (DRAWNS,'handle-mirror-vertical'), - (DRAWNS,'handle-range-y-minimum'), - (DRAWNS,'handle-radius-range-maximum'), - (DRAWNS,'handle-range-x-minimum'), - (DRAWNS,'handle-position'), - (DRAWNS,'handle-polar'), - ), - (DRAWNS,'hatch'):( - (DRAWNS,'distance'), - (DRAWNS,'style'), - (DRAWNS,'name'), - (DRAWNS,'color'), - (DRAWNS,'display-name'), - (DRAWNS,'rotation'), - ), - (DRAWNS,'image'):( - (DRAWNS,'filter-name'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (XLINKNS,'actuate'), - (XLINKNS,'show'), - ), - (DRAWNS,'image-map'):( - ), - (DRAWNS,'layer'):( - (DRAWNS,'protected'), - (DRAWNS,'name'), - (DRAWNS,'display'), - ), -# allowed_attributes - (DRAWNS,'layer-set'):( - ), - (DRAWNS,'line'):( - (DRAWNS,'class-names'), - (DRAWNS,'id'), - (DRAWNS,'caption-id'), - (DRAWNS,'layer'), - (DRAWNS,'name'), - (DRAWNS,'style-name'), - (DRAWNS,'text-style-name'), - (DRAWNS,'transform'), - (DRAWNS,'z-index'), - (PRESENTATIONNS,'class-names'), - (PRESENTATIONNS,'style-name'), - (SVGNS,'x1'), - (SVGNS,'x2'), - (SVGNS,'y1'), - (SVGNS,'y2'), - (TABLENS,'end-cell-address'), - (TABLENS,'end-x'), - (TABLENS,'end-y'), - (TABLENS,'table-background'), - (TEXTNS,'anchor-page-number'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'marker'):( - (SVGNS,'d'), - (DRAWNS,'display-name'), - (DRAWNS,'name'), - (SVGNS,'viewBox'), - ), -# allowed_attributes - (DRAWNS,'measure'):( - (TABLENS,'end-cell-address'), - (DRAWNS,'layer'), - (SVGNS,'y2'), - (DRAWNS,'name'), - (DRAWNS,'text-style-name'), - (DRAWNS,'transform'), - (TABLENS,'table-background'), - (SVGNS,'x2'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y1'), - (DRAWNS,'caption-id'), - (TABLENS,'end-y'), - (SVGNS,'x1'), - (DRAWNS,'id'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'object'):( - (XLINKNS,'type'), - (XLINKNS,'href'), - (DRAWNS,'notify-on-update-of-ranges'), - (XLINKNS,'actuate'), - (XLINKNS,'show'), - ), - (DRAWNS,'object-ole'):( - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (DRAWNS,'class-id'), - (XLINKNS,'show'), - ), - (DRAWNS,'opacity'):( - (DRAWNS,'style'), - (DRAWNS,'angle'), - (DRAWNS,'name'), - (DRAWNS,'start'), - (DRAWNS,'cy'), - (DRAWNS,'cx'), - (DRAWNS,'end'), - (DRAWNS,'display-name'), - (DRAWNS,'border'), - ), - (DRAWNS,'page'):( - (PRESENTATIONNS,'presentation-page-layout-name'), - (DRAWNS,'name'), - (DRAWNS,'nav-order'), - (PRESENTATIONNS,'use-footer-name'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'use-header-name'), - (DRAWNS,'master-page-name'), - (DRAWNS,'id'), - (PRESENTATIONNS,'use-date-time-name'), - ), - (DRAWNS,'page-thumbnail'):( - (TABLENS,'table-background'), - (DRAWNS,'caption-id'), - (PRESENTATIONNS,'user-transformed'), - (DRAWNS,'layer'), - (TABLENS,'end-cell-address'), - (DRAWNS,'name'), - (DRAWNS,'id'), - (DRAWNS,'transform'), - (DRAWNS,'page-number'), - (SVGNS,'height'), - (SVGNS,'width'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'end-y'), - (PRESENTATIONNS,'placeholder'), - (PRESENTATIONNS,'class'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'param'):( - (DRAWNS,'name'), - (DRAWNS,'value'), - ), -# allowed_attributes - (DRAWNS,'path'):( - (TABLENS,'table-background'), - (DRAWNS,'layer'), - (TABLENS,'end-cell-address'), - (DRAWNS,'caption-id'), - (SVGNS,'d'), - (DRAWNS,'text-style-name'), - (DRAWNS,'id'), - (DRAWNS,'transform'), - (SVGNS,'height'), - (SVGNS,'width'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (TEXTNS,'anchor-type'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'end-y'), - (SVGNS,'viewBox'), - (DRAWNS,'name'), - ), - (DRAWNS,'plugin'):( - (XLINKNS,'type'), - (XLINKNS,'href'), - (DRAWNS,'mime-type'), - (XLINKNS,'actuate'), - (XLINKNS,'show'), - ), - (DRAWNS,'polygon'):( - (DRAWNS,'caption-id'), - (TABLENS,'table-background'), - (DRAWNS,'layer'), - (TABLENS,'end-cell-address'), - (DRAWNS,'name'), - (DRAWNS,'text-style-name'), - (DRAWNS,'id'), - (DRAWNS,'transform'), - (PRESENTATIONNS,'style-name'), - (SVGNS,'height'), - (SVGNS,'width'), - (DRAWNS,'z-index'), - (DRAWNS,'points'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'end-y'), - (SVGNS,'viewBox'), - (TEXTNS,'anchor-type'), - ), -# allowed_attributes - (DRAWNS,'polyline'):( - (TABLENS,'table-background'), - (DRAWNS,'layer'), - (TABLENS,'end-cell-address'), - (DRAWNS,'name'), - (DRAWNS,'text-style-name'), - (DRAWNS,'id'), - (DRAWNS,'caption-id'), - (DRAWNS,'transform'), - (PRESENTATIONNS,'style-name'), - (SVGNS,'height'), - (SVGNS,'width'), - (DRAWNS,'z-index'), - (DRAWNS,'points'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (TEXTNS,'anchor-page-number'), - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'end-y'), - (SVGNS,'viewBox'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'rect'):( - (DRAWNS,'corner-radius'), - (DRAWNS,'caption-id'), - (DRAWNS,'id'), - (DRAWNS,'layer'), - (DRAWNS,'name'), - (DRAWNS,'text-style-name'), - (DRAWNS,'transform'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (PRESENTATIONNS,'style-name'), - (SVGNS,'height'), - (SVGNS,'width'), - (SVGNS,'x'), - (SVGNS,'y'), - (TABLENS,'end-cell-address'), - (TABLENS,'end-x'), - (TABLENS,'end-y'), - (TABLENS,'table-background'), - (TEXTNS,'anchor-page-number'), - (TEXTNS,'anchor-type'), - ), -# allowed_attributes - (DRAWNS,'regular-polygon'):( - (TABLENS,'table-background'), - (DRAWNS,'layer'), - (TABLENS,'end-cell-address'), - (DRAWNS,'caption-id'), - (DRAWNS,'name'), - (DRAWNS,'text-style-name'), - (TEXTNS,'anchor-page-number'), - (DRAWNS,'concave'), - (DRAWNS,'sharpness'), - (DRAWNS,'transform'), - (SVGNS,'height'), - (SVGNS,'width'), - (DRAWNS,'z-index'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (DRAWNS,'corners'), - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'end-y'), - (DRAWNS,'id'), - (TEXTNS,'anchor-type'), - ), - (DRAWNS,'stroke-dash'):( - (DRAWNS,'distance'), - (DRAWNS,'dots1-length'), - (DRAWNS,'name'), - (DRAWNS,'dots2-length'), - (DRAWNS,'style'), - (DRAWNS,'dots1'), - (DRAWNS,'display-name'), - (DRAWNS,'dots2'), - ), - (DRAWNS,'text-box'):( - (FONS,'min-width'), - (DRAWNS,'corner-radius'), - (FONS,'max-height'), - (FONS,'min-height'), - (DRAWNS,'chain-next-name'), - (FONS,'max-width'), - (TEXTNS,'id'), - ), -# allowed_attributes - (FORMNS,'button'):( - (FORMNS,'tab-stop'), - (FORMNS,'focus-on-click'), - (FORMNS,'image-align'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'button-type'), - (FORMNS,'title'), - (FORMNS,'default-button'), - (FORMNS,'value'), - (FORMNS,'label'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'image-data'), - (XLINKNS,'href'), - (FORMNS,'toggle'), - (FORMNS,'xforms-submission'), - (OFFICENS,'target-frame'), - (FORMNS,'id'), - (FORMNS,'image-position'), - ), - (FORMNS,'checkbox'):( - (FORMNS,'tab-stop'), - (FORMNS,'image-align'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'data-field'), - (FORMNS,'title'), - (FORMNS,'is-tristate'), - (FORMNS,'current-state'), - (FORMNS,'value'), - (FORMNS,'label'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'state'), - (FORMNS,'visual-effect'), - (FORMNS,'id'), - (FORMNS,'image-position'), - ), - (FORMNS,'column'):( - (FORMNS,'control-implementation'), - (FORMNS,'text-style-name'), - (FORMNS,'name'), - (FORMNS,'label'), - ), - (FORMNS,'combobox'):( - (FORMNS,'convert-empty-to-null'), - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'dropdown'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'data-field'), - (FORMNS,'tab-index'), - (FORMNS,'auto-complete'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'readonly'), - (FORMNS,'list-source'), - (FORMNS,'title'), - (FORMNS,'list-source-type'), - (FORMNS,'id'), - (FORMNS,'current-value'), - (FORMNS,'size'), - ), -# allowed_attributes - (FORMNS,'connection-resource'):( - (XLINKNS,'href'), - ), - (FORMNS,'date'):( - (FORMNS,'convert-empty-to-null'), - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (FORMNS,'min-value'), - (FORMNS,'data-field'), - (FORMNS,'max-value'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'readonly'), - (XFORMSNS,'bind'), - (FORMNS,'title'), - (FORMNS,'id'), - (FORMNS,'current-value'), - ), - (FORMNS,'file'):( - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'title'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'readonly'), - (FORMNS,'id'), - (FORMNS,'current-value'), - ), - (FORMNS,'fixed-text'):( - (FORMNS,'name'), - (FORMNS,'for'), - (FORMNS,'title'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'multi-line'), - (FORMNS,'label'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'id'), - ), -# allowed_attributes - (FORMNS,'form'):( - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (FORMNS,'allow-deletes'), - (FORMNS,'command-type'), - (FORMNS,'apply-filter'), - (XLINKNS,'type'), - (FORMNS,'method'), - (OFFICENS,'target-frame'), - (FORMNS,'navigation-mode'), - (FORMNS,'detail-fields'), - (FORMNS,'master-fields'), - (FORMNS,'allow-updates'), - (FORMNS,'name'), - (FORMNS,'tab-cycle'), - (FORMNS,'control-implementation'), - (FORMNS,'escape-processing'), - (FORMNS,'filter'), - (FORMNS,'command'), - (FORMNS,'datasource'), - (FORMNS,'enctype'), - (FORMNS,'allow-inserts'), - (FORMNS,'ignore-result'), - (FORMNS,'order'), - ), - (FORMNS,'formatted-text'):( - (FORMNS,'convert-empty-to-null'), - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'max-value'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'data-field'), - (FORMNS,'title'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'readonly'), - (FORMNS,'min-value'), - (FORMNS,'validation'), - (FORMNS,'id'), - (FORMNS,'current-value'), - ), - (FORMNS,'frame'):( - (FORMNS,'name'), - (FORMNS,'for'), - (FORMNS,'title'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'label'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'id'), - ), -# allowed_attributes - (FORMNS,'generic-control'):( - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'name'), - (FORMNS,'id'), - ), - (FORMNS,'grid'):( - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'title'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'id'), - ), - (FORMNS,'hidden'):( - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'name'), - (FORMNS,'value'), - (FORMNS,'id'), - ), - (FORMNS,'image'):( - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'button-type'), - (FORMNS,'title'), - (FORMNS,'value'), - (OFFICENS,'target-frame'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'image-data'), - (XLINKNS,'href'), - (FORMNS,'id'), - ), - (FORMNS,'image-frame'):( - (FORMNS,'name'), - (FORMNS,'title'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'data-field'), - (FORMNS,'readonly'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'image-data'), - (FORMNS,'id'), - ), - (FORMNS,'item'):( - (FORMNS,'label'), - ), - (FORMNS,'list-property'):( - (FORMNS,'property-name'), - (OFFICENS,'value-type'), - ), - (FORMNS,'list-value'):( - (OFFICENS,'string-value'), - ), -# allowed_attributes - (FORMNS,'listbox'):( - (FORMNS,'tab-stop'), - (FORMNS,'bound-column'), - (FORMNS,'multiple'), - (FORMNS,'name'), - (FORMNS,'dropdown'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'data-field'), - (FORMNS,'tab-index'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'list-source'), - (FORMNS,'title'), - (FORMNS,'list-source-type'), - (FORMNS,'id'), - (FORMNS,'xforms-list-source'), - (FORMNS,'size'), - ), - (FORMNS,'number'):( - (FORMNS,'convert-empty-to-null'), - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (FORMNS,'min-value'), - (FORMNS,'data-field'), - (FORMNS,'max-value'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'readonly'), - (XFORMSNS,'bind'), - (FORMNS,'title'), - (FORMNS,'id'), - (FORMNS,'current-value'), - ), - (FORMNS,'option'):( - (FORMNS,'current-selected'), - (FORMNS,'selected'), - (FORMNS,'value'), - (FORMNS,'label'), - ), - (FORMNS,'password'):( - (FORMNS,'convert-empty-to-null'), - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'title'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'echo-char'), - (FORMNS,'id'), - ), - (FORMNS,'properties'):( - ), - (FORMNS,'property'):( - (OFFICENS,'string-value'), - (OFFICENS,'value'), - (OFFICENS,'boolean-value'), - (FORMNS,'property-name'), - (OFFICENS,'currency'), - (OFFICENS,'date-value'), - (OFFICENS,'value-type'), - (OFFICENS,'time-value'), - ), - (FORMNS,'radio'):( - (FORMNS,'tab-stop'), - (FORMNS,'selected'), - (FORMNS,'image-align'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'data-field'), - (FORMNS,'current-selected'), - (FORMNS,'value'), - (FORMNS,'label'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'title'), - (FORMNS,'visual-effect'), - (FORMNS,'id'), - (FORMNS,'image-position'), - ), - (FORMNS,'text'):( - (FORMNS,'convert-empty-to-null'), - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'data-field'), - (FORMNS,'title'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'readonly'), - (FORMNS,'id'), - (FORMNS,'current-value'), - ), - (FORMNS,'textarea'):( - (FORMNS,'convert-empty-to-null'), - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'data-field'), - (FORMNS,'title'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'readonly'), - (FORMNS,'id'), - (FORMNS,'current-value'), - ), - (FORMNS,'time'):( - (FORMNS,'convert-empty-to-null'), - (FORMNS,'max-length'), - (FORMNS,'tab-stop'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (FORMNS,'min-value'), - (FORMNS,'data-field'), - (FORMNS,'max-value'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'readonly'), - (XFORMSNS,'bind'), - (FORMNS,'title'), - (FORMNS,'id'), - (FORMNS,'current-value'), - ), - (FORMNS,'value-range'):( - (FORMNS,'tab-stop'), - (FORMNS,'max-value'), - (FORMNS,'name'), - (FORMNS,'tab-index'), - (FORMNS,'control-implementation'), - (XFORMSNS,'bind'), - (FORMNS,'title'), - (FORMNS,'value'), - (FORMNS,'disabled'), - (FORMNS,'printable'), - (FORMNS,'orientation'), - (FORMNS,'page-step-size'), - (FORMNS,'delay-for-repeat'), - (FORMNS,'min-value'), - (FORMNS,'id'), - (FORMNS,'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'), - ), - (MANIFESTNS,'manifest'):( - ), -# allowed_attributes - (METANS,'auto-reload'):( - (METANS,'delay'), - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (XLINKNS,'show'), - ), - (METANS,'creation-date'):( - ), - (METANS,'date-string'):( - ), - (METANS,'document-statistic'):( - (METANS,'non-whitespace-character-count'), - (METANS,'ole-object-count'), - (METANS,'table-count'), - (METANS,'row-count'), - (METANS,'character-count'), - (METANS,'sentence-count'), - (METANS,'draw-count'), - (METANS,'paragraph-count'), - (METANS,'word-count'), - (METANS,'object-count'), - (METANS,'syllable-count'), - (METANS,'image-count'), - (METANS,'page-count'), - (METANS,'frame-count'), - (METANS,'cell-count'), - ), - (METANS,'editing-cycles'):( - ), - (METANS,'editing-duration'):( - ), - (METANS,'generator'):( - ), -# allowed_attributes - (METANS,'hyperlink-behaviour'):( - (OFFICENS,'target-frame-name'), - (XLINKNS,'show'), - ), - (METANS,'initial-creator'):( - ), - (METANS,'keyword'):( - ), - (METANS,'print-date'):( - ), - (METANS,'printed-by'):( - ), - (METANS,'template'):( - (METANS,'date'), - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (XLINKNS,'title'), - ), - (METANS,'user-defined'):( - (METANS,'name'), - (METANS,'value-type'), - ), - (OFFICENS,'annotation'):( - (DRAWNS,'layer'), - (SVGNS,'height'), - (TEXTNS,'anchor-page-number'), - (TABLENS,'table-background'), - (TABLENS,'end-cell-address'), - (DRAWNS,'transform'), - (DRAWNS,'id'), - (SVGNS,'width'), - (DRAWNS,'class-names'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'class-names'), - (TABLENS,'end-x'), - (DRAWNS,'text-style-name'), - (DRAWNS,'z-index'), - (PRESENTATIONNS,'style-name'), - (TEXTNS,'anchor-type'), - (DRAWNS,'name'), - (DRAWNS,'caption-point-y'), - (DRAWNS,'caption-point-x'), - (DRAWNS,'corner-radius'), - (SVGNS,'y'), - (SVGNS,'x'), - (TABLENS,'end-y'), - (OFFICENS,'display'), - ), - (OFFICENS,'automatic-styles'):( - ), - (OFFICENS,'binary-data'):( - ), - (OFFICENS,'body'):( - ), - (OFFICENS,'change-info'):( - ), - (OFFICENS,'chart'):( - ), - (OFFICENS,'dde-source'):( - (OFFICENS,'dde-application'), - (OFFICENS,'automatic-update'), - (OFFICENS,'conversion-mode'), - (OFFICENS,'dde-item'), - (OFFICENS,'dde-topic'), - (OFFICENS,'name'), - ), - (OFFICENS,'document'):( - (OFFICENS,'mimetype'), - (OFFICENS,'version'), - ), - (OFFICENS,'document-content'):( - (OFFICENS,'version'), - ), - (OFFICENS,'document-meta'):( - (OFFICENS,'version'), - ), - (OFFICENS,'document-settings'):( - (OFFICENS,'version'), - ), - (OFFICENS,'document-styles'):( - (OFFICENS,'version'), - ), - (OFFICENS,'drawing'):( - ), - (OFFICENS,'event-listeners'):( - ), - (OFFICENS,'font-face-decls'):( - ), - (OFFICENS,'forms'):( - (FORMNS,'automatic-focus'), - (FORMNS,'apply-design-mode'), - ), - (OFFICENS,'image'):( - ), -# allowed_attributes - (OFFICENS,'master-styles'):( - ), - (OFFICENS,'meta'):( - ), - (OFFICENS,'presentation'):( - ), - (OFFICENS,'script'):( - (SCRIPTNS,'language'), - ), - (OFFICENS,'scripts'):( - ), - (OFFICENS,'settings'):( - ), - (OFFICENS,'spreadsheet'):( - (TABLENS,'structure-protected'), - (TABLENS,'protection-key'), - ), - (OFFICENS,'styles'):( - ), - (OFFICENS,'text'):( - (TEXTNS,'global'), - (TEXTNS,'use-soft-page-breaks'), - ), - (PRESENTATIONNS,'animation-group'):( - ), - (PRESENTATIONNS,'animations'):( - ), - (PRESENTATIONNS,'date-time'):( - ), - (PRESENTATIONNS,'date-time-decl'):( - (PRESENTATIONNS,'source'), - (STYLENS,'data-style-name'), - (PRESENTATIONNS,'name'), - ), - (PRESENTATIONNS,'dim'):( - (DRAWNS,'color'), - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'event-listener'):( - (PRESENTATIONNS,'direction'), - (XLINKNS,'show'), - (XLINKNS,'type'), - (XLINKNS,'actuate'), - (PRESENTATIONNS,'effect'), - (SCRIPTNS,'event-name'), - (PRESENTATIONNS,'start-scale'), - (XLINKNS,'href'), - (PRESENTATIONNS,'verb'), - (PRESENTATIONNS,'action'), - (PRESENTATIONNS,'speed'), - ), - (PRESENTATIONNS,'footer'):( - ), - (PRESENTATIONNS,'footer-decl'):( - (PRESENTATIONNS,'name'), - ), - (PRESENTATIONNS,'header'):( - ), - (PRESENTATIONNS,'header-decl'):( - (PRESENTATIONNS,'name'), - ), - (PRESENTATIONNS,'hide-shape'):( - (PRESENTATIONNS,'direction'), - (PRESENTATIONNS,'effect'), - (PRESENTATIONNS,'delay'), - (PRESENTATIONNS,'start-scale'), - (PRESENTATIONNS,'path-id'), - (PRESENTATIONNS,'speed'), - (DRAWNS,'shape-id'), - ), -# allowed_attributes - (PRESENTATIONNS,'hide-text'):( - (PRESENTATIONNS,'direction'), - (PRESENTATIONNS,'effect'), - (PRESENTATIONNS,'delay'), - (PRESENTATIONNS,'start-scale'), - (PRESENTATIONNS,'path-id'), - (PRESENTATIONNS,'speed'), - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'notes'):( - (STYLENS,'page-layout-name'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'use-header-name'), - (PRESENTATIONNS,'use-date-time-name'), - (PRESENTATIONNS,'use-footer-name'), - ), - (PRESENTATIONNS,'placeholder'):( - (SVGNS,'y'), - (SVGNS,'x'), - (SVGNS,'height'), - (PRESENTATIONNS,'object'), - (SVGNS,'width'), - ), - (PRESENTATIONNS,'play'):( - (PRESENTATIONNS,'speed'), - (DRAWNS,'shape-id'), - ), -# allowed_attributes - (PRESENTATIONNS,'settings'):( - (PRESENTATIONNS,'animations'), - (PRESENTATIONNS,'endless'), - (PRESENTATIONNS,'force-manual'), - (PRESENTATIONNS,'full-screen'), - (PRESENTATIONNS,'mouse-as-pen'), - (PRESENTATIONNS,'mouse-visible'), - (PRESENTATIONNS,'pause'), - (PRESENTATIONNS,'show'), - (PRESENTATIONNS,'show-end-of-presentation-slide'), - (PRESENTATIONNS,'show-logo'), - (PRESENTATIONNS,'start-page'), - (PRESENTATIONNS,'start-with-navigator'), - (PRESENTATIONNS,'stay-on-top'), - (PRESENTATIONNS,'transition-on-click'), - ), - (PRESENTATIONNS,'show'):( - (PRESENTATIONNS,'name'), - (PRESENTATIONNS,'pages'), - ), - (PRESENTATIONNS,'show-shape'):( - (PRESENTATIONNS,'direction'), - (PRESENTATIONNS,'effect'), - (PRESENTATIONNS,'delay'), - (PRESENTATIONNS,'start-scale'), - (PRESENTATIONNS,'path-id'), - (PRESENTATIONNS,'speed'), - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'show-text'):( - (PRESENTATIONNS,'direction'), - (PRESENTATIONNS,'effect'), - (PRESENTATIONNS,'delay'), - (PRESENTATIONNS,'start-scale'), - (PRESENTATIONNS,'path-id'), - (PRESENTATIONNS,'speed'), - (DRAWNS,'shape-id'), - ), - (PRESENTATIONNS,'sound'):( - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (PRESENTATIONNS,'play-full'), - (XLINKNS,'show'), - ), -# allowed_attributes - (SCRIPTNS,'event-listener'):( - (SCRIPTNS,'language'), - (SCRIPTNS,'macro-name'), - (XLINKNS,'actuate'), - (SCRIPTNS,'event-name'), - (XLINKNS,'href'), - (XLINKNS,'type'), - ), - (STYLENS,'background-image'):( - (DRAWNS,'opacity'), - (STYLENS,'repeat'), - (XLINKNS,'show'), - (XLINKNS,'actuate'), - (STYLENS,'filter-name'), - (XLINKNS,'href'), - (STYLENS,'position'), - (XLINKNS,'type'), - ), - (STYLENS,'chart-properties'): ( - (CHARTNS,'connect-bars'), - (CHARTNS,'data-label-number'), - (CHARTNS,'data-label-symbol'), - (CHARTNS,'data-label-text'), - (CHARTNS,'deep'), - (CHARTNS,'display-label'), - (CHARTNS,'error-category'), - (CHARTNS,'error-lower-indicator'), - (CHARTNS,'error-lower-limit'), - (CHARTNS,'error-margin'), - (CHARTNS,'error-percentage'), - (CHARTNS,'error-upper-indicator'), - (CHARTNS,'error-upper-limit'), - (CHARTNS,'gap-width'), - (CHARTNS,'interpolation'), - (CHARTNS,'interval-major'), - (CHARTNS,'interval-minor-divisor'), - (CHARTNS,'japanese-candle-stick'), - (CHARTNS,'label-arrangement'), - (CHARTNS,'lines'), - (CHARTNS,'link-data-style-to-source'), - (CHARTNS,'logarithmic'), - (CHARTNS,'maximum'), - (CHARTNS,'mean-value'), - (CHARTNS,'minimum'), - (CHARTNS,'origin'), - (CHARTNS,'overlap'), - (CHARTNS,'percentage'), - (CHARTNS,'pie-offset'), - (CHARTNS,'regression-type'), - (CHARTNS,'scale-text'), - (CHARTNS,'series-source'), - (CHARTNS,'solid-type'), - (CHARTNS,'spline-order'), - (CHARTNS,'spline-resolution'), - (CHARTNS,'stacked'), - (CHARTNS,'symbol-height'), - (CHARTNS,'symbol-name'), - (CHARTNS,'symbol-type'), - (CHARTNS,'symbol-width'), - (CHARTNS,'text-overlap'), - (CHARTNS,'three-dimensional'), - (CHARTNS,'tick-marks-major-inner'), - (CHARTNS,'tick-marks-major-outer'), - (CHARTNS,'tick-marks-minor-inner'), - (CHARTNS,'tick-marks-minor-outer'), - (CHARTNS,'vertical'), - (CHARTNS,'visible'), - (STYLENS,'direction'), - (STYLENS,'rotation-angle'), - (TEXTNS,'line-break'), - ), - (STYLENS,'column'):( - (FONS,'end-indent'), - (FONS,'space-before'), - (FONS,'start-indent'), - (FONS,'space-after'), - (STYLENS,'rel-width'), - ), - (STYLENS,'column-sep'):( - (STYLENS,'color'), - (STYLENS,'width'), - (STYLENS,'style'), - (STYLENS,'vertical-align'), - (STYLENS,'height'), - ), - (STYLENS,'columns'):( - (FONS,'column-count'), - (FONS,'column-gap'), - ), - (STYLENS,'default-style'):( - (STYLENS,'family'), - ), -# allowed_attributes - (STYLENS,'drawing-page-properties'): ( - (DRAWNS,'fill'), - (DRAWNS,'fill-color'), - (DRAWNS,'secondary-fill-color'), - (DRAWNS,'fill-gradient-name'), - (DRAWNS,'gradient-step-count'), - (DRAWNS,'fill-hatch-name'), - (DRAWNS,'fill-hatch-solid'), - (DRAWNS,'fill-image-name'), - (STYLENS,'repeat'), - (DRAWNS,'fill-image-width'), - (DRAWNS,'fill-image-height'), - (DRAWNS,'fill-image-ref-point-x'), - (DRAWNS,'fill-image-ref-point-y'), - (DRAWNS,'fill-image-ref-point'), - (DRAWNS,'tile-repeat-offset'), - (DRAWNS,'opacity'), - (DRAWNS,'opacity-name'), - (SVGNS,'fill-rule'), - (PRESENTATIONNS,'transition-type'), - (PRESENTATIONNS,'transition-style'), - (PRESENTATIONNS,'transition-speed'), - (SMILNS,'type'), - (SMILNS,'subtype'), - (SMILNS,'direction'), - (SMILNS,'fadeColor'), - (PRESENTATIONNS,'duration'), - (PRESENTATIONNS,'visibility'), - (DRAWNS,'background-size'), - (PRESENTATIONNS,'background-objects-visible'), - (PRESENTATIONNS,'background-visible'), - (PRESENTATIONNS,'display-header'), - (PRESENTATIONNS,'display-footer'), - (PRESENTATIONNS,'display-page-number'), - (PRESENTATIONNS,'display-date-time'), - ), - (STYLENS,'drop-cap'):( - (STYLENS,'distance'), - (STYLENS,'length'), - (STYLENS,'style-name'), - (STYLENS,'lines'), - ), -# allowed_attributes - (STYLENS,'font-face'):( - (STYLENS,'font-adornments'), - (STYLENS,'font-charset'), - (STYLENS,'font-family-generic'), - (STYLENS,'font-pitch'), - (STYLENS,'name'), - (SVGNS,'accent-height'), - (SVGNS,'alphabetic'), - (SVGNS,'ascent'), - (SVGNS,'bbox'), - (SVGNS,'cap-height'), - (SVGNS,'descent'), - (SVGNS,'font-family'), - (SVGNS,'font-size'), - (SVGNS,'font-stretch'), - (SVGNS,'font-style'), - (SVGNS,'font-variant'), - (SVGNS,'font-weight'), - (SVGNS,'hanging'), - (SVGNS,'ideographic'), - (SVGNS,'mathematical'), - (SVGNS,'overline-position'), - (SVGNS,'overline-thickness'), - (SVGNS,'panose-1'), - (SVGNS,'slope'), - (SVGNS,'stemh'), - (SVGNS,'stemv'), - (SVGNS,'strikethrough-position'), - (SVGNS,'strikethrough-thickness'), - (SVGNS,'underline-position'), - (SVGNS,'underline-thickness'), - (SVGNS,'unicode-range'), - (SVGNS,'units-per-em'), - (SVGNS,'v-alphabetic'), - (SVGNS,'v-hanging'), - (SVGNS,'v-ideographic'), - (SVGNS,'v-mathematical'), - (SVGNS,'widths'), - (SVGNS,'x-height'), - ), - (STYLENS,'footer'):( - (STYLENS,'display'), - ), - (STYLENS,'footer-left'):( - (STYLENS,'display'), - ), - (STYLENS,'footer-style'):( - ), - (STYLENS,'footnote-sep'):( - (STYLENS,'distance-after-sep'), - (STYLENS,'color'), - (STYLENS,'rel-width'), - (STYLENS,'width'), - (STYLENS,'distance-before-sep'), - (STYLENS,'line-style'), - (STYLENS,'adjustment'), - ), -# allowed_attributes - (STYLENS,'graphic-properties'): ( - (DR3DNS,'ambient-color'), - (DR3DNS,'back-scale'), - (DR3DNS,'backface-culling'), - (DR3DNS,'close-back'), - (DR3DNS,'close-front'), - (DR3DNS,'depth'), - (DR3DNS,'diffuse-color'), - (DR3DNS,'edge-rounding'), - (DR3DNS,'edge-rounding-mode'), - (DR3DNS,'emissive-color'), - (DR3DNS,'end-angle'), - (DR3DNS,'horizontal-segments'), - (DR3DNS,'lighting-mode'), - (DR3DNS,'normals-direction'), - (DR3DNS,'normals-kind'), - (DR3DNS,'shadow'), - (DR3DNS,'shininess'), - (DR3DNS,'specular-color'), - (DR3DNS,'texture-filter'), - (DR3DNS,'texture-generation-mode-x'), - (DR3DNS,'texture-generation-mode-y'), - (DR3DNS,'texture-kind'), - (DR3DNS,'texture-mode'), - (DR3DNS,'vertical-segments'), - (DRAWNS,'auto-grow-height'), - (DRAWNS,'auto-grow-width'), - (DRAWNS,'blue'), - (DRAWNS,'caption-angle'), - (DRAWNS,'caption-angle-type'), - (DRAWNS,'caption-escape'), - (DRAWNS,'caption-escape-direction'), - (DRAWNS,'caption-fit-line-length'), - (DRAWNS,'caption-gap'), - (DRAWNS,'caption-line-length'), - (DRAWNS,'caption-type'), - (DRAWNS,'color-inversion'), - (DRAWNS,'color-mode'), - (DRAWNS,'contrast'), - (DRAWNS,'decimal-places'), - (DRAWNS,'end-guide'), - (DRAWNS,'end-line-spacing-horizontal'), - (DRAWNS,'end-line-spacing-vertical'), - (DRAWNS,'fill'), - (DRAWNS,'fill-color'), - (DRAWNS,'fill-gradient-name'), - (DRAWNS,'fill-hatch-name'), - (DRAWNS,'fill-hatch-solid'), - (DRAWNS,'fill-image-height'), - (DRAWNS,'fill-image-name'), - (DRAWNS,'fill-image-ref-point'), - (DRAWNS,'fill-image-ref-point-x'), - (DRAWNS,'fill-image-ref-point-y'), - (DRAWNS,'fill-image-width'), -# allowed_attributes - (DRAWNS,'fit-to-contour'), - (DRAWNS,'fit-to-size'), - (DRAWNS,'frame-display-border'), - (DRAWNS,'frame-display-scrollbar'), - (DRAWNS,'frame-margin-horizontal'), - (DRAWNS,'frame-margin-vertical'), - (DRAWNS,'gamma'), - (DRAWNS,'gradient-step-count'), - (DRAWNS,'green'), - (DRAWNS,'guide-distance'), - (DRAWNS,'guide-overhang'), - (DRAWNS,'image-opacity'), - (DRAWNS,'line-distance'), - (DRAWNS,'luminance'), - (DRAWNS,'marker-end'), - (DRAWNS,'marker-end-center'), - (DRAWNS,'marker-end-width'), - (DRAWNS,'marker-start'), - (DRAWNS,'marker-start-center'), - (DRAWNS,'marker-start-width'), - (DRAWNS,'measure-align'), - (DRAWNS,'measure-vertical-align'), - (DRAWNS,'ole-draw-aspect'), - (DRAWNS,'opacity'), - (DRAWNS,'opacity-name'), - (DRAWNS,'parallel'), - (DRAWNS,'placing'), - (DRAWNS,'red'), - (DRAWNS,'secondary-fill-color'), - (DRAWNS,'shadow'), - (DRAWNS,'shadow-color'), - (DRAWNS,'shadow-offset-x'), - (DRAWNS,'shadow-offset-y'), - (DRAWNS,'shadow-opacity'), - (DRAWNS,'show-unit'), - (DRAWNS,'start-guide'), - (DRAWNS,'start-line-spacing-horizontal'), - (DRAWNS,'start-line-spacing-vertical'), - (DRAWNS,'stroke'), - (DRAWNS,'stroke-dash'), - (DRAWNS,'stroke-dash-names'), - (DRAWNS,'stroke-linejoin'), - (DRAWNS,'symbol-color'), - (DRAWNS,'textarea-horizontal-align'), - (DRAWNS,'textarea-vertical-align'), - (DRAWNS,'tile-repeat-offset'), - (DRAWNS,'unit'), - (DRAWNS,'visible-area-height'), - (DRAWNS,'visible-area-left'), - (DRAWNS,'visible-area-top'), - (DRAWNS,'visible-area-width'), - (DRAWNS,'wrap-influence-on-position'), -# allowed_attributes - (FONS,'background-color'), - (FONS,'border'), - (FONS,'border-bottom'), - (FONS,'border-left'), - (FONS,'border-right'), - (FONS,'border-top'), - (FONS,'clip'), - (FONS,'margin'), - (FONS,'margin-bottom'), - (FONS,'margin-left'), - (FONS,'margin-right'), - (FONS,'margin-top'), - (FONS,'max-height'), - (FONS,'max-width'), - (FONS,'min-height'), - (FONS,'min-width'), - (FONS,'padding'), - (FONS,'padding-bottom'), - (FONS,'padding-left'), - (FONS,'padding-right'), - (FONS,'padding-top'), - (FONS,'wrap-option'), - (STYLENS,'border-line-width'), - (STYLENS,'border-line-width-bottom'), - (STYLENS,'border-line-width-left'), - (STYLENS,'border-line-width-right'), - (STYLENS,'border-line-width-top'), - (STYLENS,'editable'), - (STYLENS,'flow-with-text'), - (STYLENS,'horizontal-pos'), - (STYLENS,'horizontal-rel'), - (STYLENS,'mirror'), - (STYLENS,'number-wrapped-paragraphs'), - (STYLENS,'overflow-behavior'), - (STYLENS,'print-content'), - (STYLENS,'protect'), - (STYLENS,'rel-height'), - (STYLENS,'rel-width'), - (STYLENS,'repeat'), - (STYLENS,'run-through'), - (STYLENS,'shadow'), - (STYLENS,'vertical-pos'), - (STYLENS,'vertical-rel'), - (STYLENS,'wrap'), - (STYLENS,'wrap-contour'), - (STYLENS,'wrap-contour-mode'), - (STYLENS,'wrap-dynamic-threshold'), - (STYLENS,'writing-mode'), - (SVGNS,'fill-rule'), - (SVGNS,'height'), - (SVGNS,'stroke-color'), - (SVGNS,'stroke-opacity'), - (SVGNS,'stroke-width'), - (SVGNS,'width'), - (SVGNS,'x'), - (SVGNS,'y'), - (TEXTNS,'anchor-page-number'), - (TEXTNS,'anchor-type'), - (TEXTNS,'animation'), - (TEXTNS,'animation-delay'), - (TEXTNS,'animation-direction'), - (TEXTNS,'animation-repeat'), - (TEXTNS,'animation-start-inside'), - (TEXTNS,'animation-steps'), - (TEXTNS,'animation-stop-inside'), - ), - (STYLENS,'handout-master'):( - (PRESENTATIONNS,'presentation-page-layout-name'), - (STYLENS,'page-layout-name'), - (PRESENTATIONNS,'use-footer-name'), - (DRAWNS,'style-name'), - (PRESENTATIONNS,'use-header-name'), - (PRESENTATIONNS,'use-date-time-name'), - ), -# allowed_attributes - (STYLENS,'header'):( - (STYLENS,'display'), - ), - (STYLENS,'header-footer-properties'): ( - (FONS,'background-color'), - (FONS,'border'), - (FONS,'border-bottom'), - (FONS,'border-left'), - (FONS,'border-right'), - (FONS,'border-top'), - (FONS,'margin'), - (FONS,'margin-bottom'), - (FONS,'margin-left'), - (FONS,'margin-right'), - (FONS,'margin-top'), - (FONS,'min-height'), - (FONS,'padding'), - (FONS,'padding-bottom'), - (FONS,'padding-left'), - (FONS,'padding-right'), - (FONS,'padding-top'), - (STYLENS,'border-line-width'), - (STYLENS,'border-line-width-bottom'), - (STYLENS,'border-line-width-left'), - (STYLENS,'border-line-width-right'), - (STYLENS,'border-line-width-top'), - (STYLENS,'dynamic-spacing'), - (STYLENS,'shadow'), - (SVGNS,'height'), - ), - (STYLENS,'header-left'):( - (STYLENS,'display'), - ), - (STYLENS,'header-style'):( - ), -# allowed_attributes - (STYLENS,'list-level-properties'): ( - (FONS,'height'), - (FONS,'text-align'), - (FONS,'width'), - (STYLENS,'font-name'), - (STYLENS,'vertical-pos'), - (STYLENS,'vertical-rel'), - (SVGNS,'y'), - (TEXTNS,'min-label-distance'), - (TEXTNS,'min-label-width'), - (TEXTNS,'space-before'), - ), - (STYLENS,'map'):( - (STYLENS,'apply-style-name'), - (STYLENS,'base-cell-address'), - (STYLENS,'condition'), - ), - (STYLENS,'master-page'):( - (STYLENS,'page-layout-name'), - (STYLENS,'display-name'), - (DRAWNS,'style-name'), - (STYLENS,'name'), - (STYLENS,'next-style-name'), - ), - (STYLENS,'page-layout'):( - (STYLENS,'name'), - (STYLENS,'page-usage'), - ), -# allowed_attributes - (STYLENS,'page-layout-properties'): ( - (FONS,'background-color'), - (FONS,'border'), - (FONS,'border-bottom'), - (FONS,'border-left'), - (FONS,'border-right'), - (FONS,'border-top'), - (FONS,'margin'), - (FONS,'margin-bottom'), - (FONS,'margin-left'), - (FONS,'margin-right'), - (FONS,'margin-top'), - (FONS,'padding'), - (FONS,'padding-bottom'), - (FONS,'padding-left'), - (FONS,'padding-right'), - (FONS,'padding-top'), - (FONS,'page-height'), - (FONS,'page-width'), - (STYLENS,'border-line-width'), - (STYLENS,'border-line-width-bottom'), - (STYLENS,'border-line-width-left'), - (STYLENS,'border-line-width-right'), - (STYLENS,'border-line-width-top'), - (STYLENS,'first-page-number'), - (STYLENS,'footnote-max-height'), - (STYLENS,'layout-grid-base-height'), - (STYLENS,'layout-grid-color'), - (STYLENS,'layout-grid-display'), - (STYLENS,'layout-grid-lines'), - (STYLENS,'layout-grid-mode'), - (STYLENS,'layout-grid-print'), - (STYLENS,'layout-grid-ruby-below'), - (STYLENS,'layout-grid-ruby-height'), - (STYLENS,'num-format'), - (STYLENS,'num-letter-sync'), - (STYLENS,'num-prefix'), - (STYLENS,'num-suffix'), - (STYLENS,'paper-tray-name'), - (STYLENS,'print'), - (STYLENS,'print-orientation'), - (STYLENS,'print-page-order'), - (STYLENS,'register-truth-ref-style-name'), - (STYLENS,'scale-to'), - (STYLENS,'scale-to-pages'), - (STYLENS,'shadow'), - (STYLENS,'table-centering'), - (STYLENS,'writing-mode'), - ), -# allowed_attributes - (STYLENS,'paragraph-properties'): ( - (FONS,'background-color'), - (FONS,'border'), - (FONS,'border-bottom'), - (FONS,'border-left'), - (FONS,'border-right'), - (FONS,'border-top'), - (FONS,'break-after'), - (FONS,'break-before'), - (FONS,'hyphenation-keep'), - (FONS,'hyphenation-ladder-count'), - (FONS,'keep-together'), - (FONS,'keep-with-next'), - (FONS,'line-height'), - (FONS,'margin'), - (FONS,'margin-bottom'), - (FONS,'margin-left'), - (FONS,'margin-right'), - (FONS,'margin-top'), - (FONS,'orphans'), - (FONS,'padding'), - (FONS,'padding-bottom'), - (FONS,'padding-left'), - (FONS,'padding-right'), - (FONS,'padding-top'), - (FONS,'text-align'), - (FONS,'text-align-last'), - (FONS,'text-indent'), - (FONS,'widows'), - (STYLENS,'auto-text-indent'), - (STYLENS,'background-transparency'), - (STYLENS,'border-line-width'), - (STYLENS,'border-line-width-bottom'), - (STYLENS,'border-line-width-left'), - (STYLENS,'border-line-width-right'), - (STYLENS,'border-line-width-top'), - (STYLENS,'font-independent-line-spacing'), - (STYLENS,'justify-single-word'), - (STYLENS,'line-break'), - (STYLENS,'line-height-at-least'), - (STYLENS,'line-spacing'), - (STYLENS,'page-number'), - (STYLENS,'punctuation-wrap'), - (STYLENS,'register-true'), - (STYLENS,'shadow'), - (STYLENS,'snap-to-layout-grid'), - (STYLENS,'tab-stop-distance'), - (STYLENS,'text-autospace'), - (STYLENS,'vertical-align'), - (STYLENS,'writing-mode'), - (STYLENS,'writing-mode-automatic'), - (TEXTNS,'line-number'), - (TEXTNS,'number-lines'), - ), - (STYLENS,'presentation-page-layout'):( - (STYLENS,'display-name'), - (STYLENS,'name'), - ), -# allowed_attributes - (STYLENS,'region-center'):( - ), - (STYLENS,'region-left'):( - ), - (STYLENS,'region-right'):( - ), - (STYLENS,'ruby-properties'): ( - (STYLENS,'ruby-position'), - (STYLENS,'ruby-align'), - ), - (STYLENS,'section-properties'): ( - (FONS,'background-color'), - (FONS,'margin-left'), - (FONS,'margin-right'), - (STYLENS,'protect'), - (STYLENS,'writing-mode'), - (TEXTNS,'dont-balance-text-columns'), - ), - (STYLENS,'style'):( - (STYLENS,'family'), - (STYLENS,'list-style-name'), - (STYLENS,'name'), - (STYLENS,'auto-update'), - (STYLENS,'default-outline-level'), - (STYLENS,'class'), - (STYLENS,'next-style-name'), - (STYLENS,'data-style-name'), - (STYLENS,'master-page-name'), - (STYLENS,'display-name'), - (STYLENS,'parent-style-name'), - ), -# allowed_attributes - (STYLENS,'tab-stop'):( - (STYLENS,'leader-text-style'), - (STYLENS,'leader-width'), - (STYLENS,'leader-style'), - (STYLENS,'char'), - (STYLENS,'leader-color'), - (STYLENS,'position'), - (STYLENS,'leader-text'), - (STYLENS,'type'), - (STYLENS,'leader-type'), - ), - (STYLENS,'tab-stops'):( - ), - (STYLENS,'table-cell-properties'): ( - (FONS,'background-color'), - (FONS,'border'), - (FONS,'border-bottom'), - (FONS,'border-left'), - (FONS,'border-right'), - (FONS,'border-top'), - (FONS,'padding'), - (FONS,'padding-bottom'), - (FONS,'padding-left'), - (FONS,'padding-right'), - (FONS,'padding-top'), - (FONS,'wrap-option'), - (STYLENS,'border-line-width'), - (STYLENS,'border-line-width-bottom'), - (STYLENS,'border-line-width-left'), - (STYLENS,'border-line-width-right'), - (STYLENS,'border-line-width-top'), - (STYLENS,'cell-protect'), - (STYLENS,'decimal-places'), - (STYLENS,'diagonal-bl-tr'), - (STYLENS,'diagonal-bl-tr-widths'), - (STYLENS,'diagonal-tl-br'), - (STYLENS,'diagonal-tl-br-widths'), - (STYLENS,'direction'), - (STYLENS,'glyph-orientation-vertical'), - (STYLENS,'print-content'), - (STYLENS,'repeat-content'), - (STYLENS,'rotation-align'), - (STYLENS,'rotation-angle'), - (STYLENS,'shadow'), - (STYLENS,'shrink-to-fit'), - (STYLENS,'text-align-source'), - (STYLENS,'vertical-align'), - ), -# allowed_attributes - (STYLENS,'table-column-properties'): ( - (FONS,'break-after'), - (FONS,'break-before'), - (STYLENS,'column-width'), - (STYLENS,'rel-column-width'), - (STYLENS,'use-optimal-column-width'), - ), - (STYLENS,'table-properties'): ( - (FONS,'background-color'), - (FONS,'break-after'), - (FONS,'break-before'), - (FONS,'keep-with-next'), - (FONS,'margin'), - (FONS,'margin-bottom'), - (FONS,'margin-left'), - (FONS,'margin-right'), - (FONS,'margin-top'), - (STYLENS,'may-break-between-rows'), - (STYLENS,'page-number'), - (STYLENS,'rel-width'), - (STYLENS,'shadow'), - (STYLENS,'width'), - (STYLENS,'writing-mode'), - (TABLENS,'align'), - (TABLENS,'border-model'), - (TABLENS,'display'), - ), - (STYLENS,'table-row-properties'): ( - (FONS,'background-color'), - (FONS,'break-after'), - (FONS,'break-before'), - (FONS,'keep-together'), - (STYLENS,'min-row-height'), - (STYLENS,'row-height'), - (STYLENS,'use-optimal-row-height'), - ), -# allowed_attributes - (STYLENS,'text-properties'): ( - (FONS,'background-color'), - (FONS,'color'), - (FONS,'country'), - (FONS,'font-family'), - (FONS,'font-size'), - (FONS,'font-style'), - (FONS,'font-variant'), - (FONS,'font-weight'), - (FONS,'hyphenate'), - (FONS,'hyphenation-push-char-count'), - (FONS,'hyphenation-remain-char-count'), - (FONS,'language'), - (FONS,'letter-spacing'), - (FONS,'text-shadow'), - (FONS,'text-transform'), - (STYLENS,'country-asian'), - (STYLENS,'country-complex'), - (STYLENS,'font-charset'), - (STYLENS,'font-charset-asian'), - (STYLENS,'font-charset-complex'), - (STYLENS,'font-family-asian'), - (STYLENS,'font-family-complex'), - (STYLENS,'font-family-generic'), - (STYLENS,'font-family-generic-asian'), - (STYLENS,'font-family-generic-complex'), - (STYLENS,'font-name'), - (STYLENS,'font-name-asian'), - (STYLENS,'font-name-complex'), - (STYLENS,'font-pitch'), - (STYLENS,'font-pitch-asian'), - (STYLENS,'font-pitch-complex'), - (STYLENS,'font-relief'), - (STYLENS,'font-size-asian'), - (STYLENS,'font-size-complex'), - (STYLENS,'font-size-rel'), - (STYLENS,'font-size-rel-asian'), - (STYLENS,'font-size-rel-complex'), - (STYLENS,'font-style-asian'), - (STYLENS,'font-style-complex'), - (STYLENS,'font-style-name'), - (STYLENS,'font-style-name-asian'), - (STYLENS,'font-style-name-complex'), - (STYLENS,'font-weight-asian'), - (STYLENS,'font-weight-complex'), - (STYLENS,'language-asian'), - (STYLENS,'language-complex'), - (STYLENS,'letter-kerning'), - (STYLENS,'script-type'), - (STYLENS,'text-blinking'), - (STYLENS,'text-combine'), - (STYLENS,'text-combine-end-char'), - (STYLENS,'text-combine-start-char'), - (STYLENS,'text-emphasize'), - (STYLENS,'text-line-through-color'), - (STYLENS,'text-line-through-mode'), - (STYLENS,'text-line-through-style'), - (STYLENS,'text-line-through-text'), - (STYLENS,'text-line-through-text-style'), - (STYLENS,'text-line-through-type'), - (STYLENS,'text-line-through-width'), - (STYLENS,'text-outline'), - (STYLENS,'text-position'), - (STYLENS,'text-rotation-angle'), - (STYLENS,'text-rotation-scale'), - (STYLENS,'text-scale'), - (STYLENS,'text-underline-color'), - (STYLENS,'text-underline-mode'), - (STYLENS,'text-underline-style'), - (STYLENS,'text-underline-type'), - (STYLENS,'text-underline-width'), - (STYLENS,'use-window-font-color'), - (TEXTNS,'condition'), - (TEXTNS,'display'), - ), - (SVGNS,'definition-src'):( - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - ), - (SVGNS,'desc'):( - ), - (SVGNS,'font-face-format'):( - (SVGNS,'string'), - ), -# allowed_attributes - (SVGNS,'font-face-name'):( - (SVGNS,'name'), - ), - (SVGNS,'font-face-src'):( - ), - (SVGNS,'font-face-uri'):( - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - ), - (SVGNS,'linearGradient'):( - (SVGNS,'y2'), - (DRAWNS,'name'), - (SVGNS,'spreadMethod'), - (SVGNS,'gradientUnits'), - (SVGNS,'x2'), - (SVGNS,'gradientTransform'), - (SVGNS,'y1'), - (DRAWNS,'display-name'), - (SVGNS,'x1'), - ), - (SVGNS,'radialGradient'):( - (DRAWNS,'name'), - (SVGNS,'fx'), - (SVGNS,'fy'), - (SVGNS,'spreadMethod'), - (SVGNS,'gradientUnits'), - (SVGNS,'cy'), - (SVGNS,'cx'), - (SVGNS,'gradientTransform'), - (DRAWNS,'display-name'), - (SVGNS,'r'), - ), - (SVGNS,'stop'):( - (SVGNS,'stop-color'), - (SVGNS,'stop-opacity'), - (SVGNS,'offset'), - ), - (SVGNS,'title'):( - ), -# allowed_attributes - (TABLENS,'body'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), - (TABLENS,'calculation-settings'):( - (TABLENS,'automatic-find-labels'), - (TABLENS,'case-sensitive'), - (TABLENS,'search-criteria-must-apply-to-whole-cell'), - (TABLENS,'precision-as-shown'), - (TABLENS,'use-regular-expressions'), - (TABLENS,'null-year'), - ), - (TABLENS,'cell-address'):( - (TABLENS,'column'), - (TABLENS,'table'), - (TABLENS,'row'), - ), - (TABLENS,'cell-content-change'):( - (TABLENS,'id'), - (TABLENS,'rejecting-change-id'), - (TABLENS,'acceptance-state'), - ), - (TABLENS,'cell-content-deletion'):( - (TABLENS,'id'), - ), - (TABLENS,'cell-range-source'):( - (TABLENS,'last-row-spanned'), - (TABLENS,'last-column-spanned'), - (TABLENS,'name'), - (TABLENS,'filter-options'), - (XLINKNS,'actuate'), - (TABLENS,'filter-name'), - (XLINKNS,'href'), - (TABLENS,'refresh-delay'), - (XLINKNS,'type'), - ), - (TABLENS,'change-deletion'):( - (TABLENS,'id'), - ), - (TABLENS,'change-track-table-cell'):( - (OFFICENS,'string-value'), - (TABLENS,'cell-address'), - (TABLENS,'number-matrix-columns-spanned'), - (TABLENS,'number-matrix-rows-spanned'), - (TABLENS,'matrix-covered'), - (OFFICENS,'value-type'), - (OFFICENS,'boolean-value'), - (OFFICENS,'currency'), - (OFFICENS,'date-value'), - (OFFICENS,'value'), - (TABLENS,'formula'), - (OFFICENS,'time-value'), - ), - (TABLENS,'consolidation'):( - (TABLENS,'function'), - (TABLENS,'source-cell-range-addresses'), - (TABLENS,'target-cell-address'), - (TABLENS,'link-to-source-data'), - (TABLENS,'use-labels'), - ), - (TABLENS,'content-validation'):( - (TABLENS,'base-cell-address'), - (TABLENS,'display-list'), - (TABLENS,'allow-empty-cell'), - (TABLENS,'name'), - (TABLENS,'condition'), - ), - (TABLENS,'content-validations'):( - ), -# allowed_attributes - (TABLENS,'covered-table-cell'):( - (TABLENS,'protect'), - (OFFICENS,'string-value'), - (OFFICENS,'value'), - (OFFICENS,'boolean-value'), - (OFFICENS,'currency'), - (OFFICENS,'date-value'), - (TABLENS,'style-name'), - (TABLENS,'content-validation-name'), - (OFFICENS,'value-type'), - (TABLENS,'number-columns-repeated'), - (TABLENS,'formula'), - (OFFICENS,'time-value'), - ), - (TABLENS,'cut-offs'):( - ), - (TABLENS,'data-pilot-display-info'):( - (TABLENS,'member-count'), - (TABLENS,'data-field'), - (TABLENS,'enabled'), - (TABLENS,'display-member-mode'), - ), - (TABLENS,'data-pilot-field'):( - (TABLENS,'selected-page'), - (TABLENS,'function'), - (TABLENS,'orientation'), - (TABLENS,'used-hierarchy'), - (TABLENS,'is-data-layout-field'), - (TABLENS,'source-field-name'), - ), - (TABLENS,'data-pilot-field-reference'):( - (TABLENS,'member-name'), - (TABLENS,'field-name'), - (TABLENS,'member-type'), - (TABLENS,'type'), - ), -# allowed_attributes - (TABLENS,'data-pilot-group'):( - (TABLENS,'name'), - ), - (TABLENS,'data-pilot-group-member'):( - (TABLENS,'name'), - ), - (TABLENS,'data-pilot-groups'):( - (TABLENS,'date-end'), - (TABLENS,'end'), - (TABLENS,'start'), - (TABLENS,'source-field-name'), - (TABLENS,'step'), - (TABLENS,'date-start'), - (TABLENS,'grouped-by'), - ), - (TABLENS,'data-pilot-layout-info'):( - (TABLENS,'add-empty-lines'), - (TABLENS,'layout-mode'), - ), - (TABLENS,'data-pilot-level'):( - (TABLENS,'show-empty'), - ), -# allowed_attributes - (TABLENS,'data-pilot-member'):( - (TABLENS,'show-details'), - (TABLENS,'name'), - (TABLENS,'display'), - ), - (TABLENS,'data-pilot-members'):( - ), - (TABLENS,'data-pilot-sort-info'):( - (TABLENS,'data-field'), - (TABLENS,'sort-mode'), - (TABLENS,'order'), - ), - (TABLENS,'data-pilot-subtotal'):( - (TABLENS,'function'), - ), - (TABLENS,'data-pilot-subtotals'):( - ), - (TABLENS,'data-pilot-table'):( - (TABLENS,'buttons'), - (TABLENS,'application-data'), - (TABLENS,'name'), - (TABLENS,'drill-down-on-double-click'), - (TABLENS,'target-range-address'), - (TABLENS,'ignore-empty-rows'), - (TABLENS,'identify-categories'), - (TABLENS,'show-filter-button'), - (TABLENS,'grand-total'), - ), -# allowed_attributes - (TABLENS,'data-pilot-tables'):( - ), - (TABLENS,'database-range'):( - (TABLENS,'orientation'), - (TABLENS,'target-range-address'), - (TABLENS,'contains-header'), - (TABLENS,'on-update-keep-size'), - (TABLENS,'name'), - (TABLENS,'is-selection'), - (TABLENS,'refresh-delay'), - (TABLENS,'display-filter-buttons'), - (TABLENS,'has-persistent-data'), - (TABLENS,'on-update-keep-styles'), - ), - (TABLENS,'database-ranges'):( - ), - (TABLENS,'database-source-query'):( - (TABLENS,'query-name'), - (TABLENS,'database-name'), - ), -# allowed_attributes - (TABLENS,'database-source-sql'):( - (TABLENS,'parse-sql-statement'), - (TABLENS,'database-name'), - (TABLENS,'sql-statement'), - ), - (TABLENS,'database-source-table'):( - (TABLENS,'database-table-name'), - (TABLENS,'database-name'), - ), - (TABLENS,'dde-link'):( - ), - (TABLENS,'dde-links'):( - ), - (TABLENS,'deletion'):( - (TABLENS,'rejecting-change-id'), - (TABLENS,'multi-deletion-spanned'), - (TABLENS,'acceptance-state'), - (TABLENS,'table'), - (TABLENS,'position'), - (TABLENS,'type'), - (TABLENS,'id'), - ), -# allowed_attributes - (TABLENS,'deletions'):( - ), - (TABLENS,'dependencies'):( - ), - (TABLENS,'dependency'):( - (TABLENS,'id'), - ), - (TABLENS,'detective'):( - ), - (TABLENS,'error-macro'):( - (TABLENS,'execute'), - ), - (TABLENS,'error-message'):( - (TABLENS,'display'), - (TABLENS,'message-type'), - (TABLENS,'title'), - ), - (TABLENS,'even-columns'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), - (TABLENS,'even-rows'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), -# allowed_attributes - (TABLENS,'filter'):( - (TABLENS,'target-range-address'), - (TABLENS,'display-duplicates'), - (TABLENS,'condition-source-range-address'), - (TABLENS,'condition-source'), - ), - (TABLENS,'filter-and'):( - ), - (TABLENS,'filter-condition'):( - (TABLENS,'operator'), - (TABLENS,'field-number'), - (TABLENS,'data-type'), - (TABLENS,'case-sensitive'), - (TABLENS,'value'), - ), - (TABLENS,'filter-or'):( - ), - (TABLENS,'first-column'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), - (TABLENS,'first-row'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), -# allowed_attributes - (TABLENS,'help-message'):( - (TABLENS,'display'), - (TABLENS,'title'), - ), - (TABLENS,'highlighted-range'):( - (TABLENS,'contains-error'), - (TABLENS,'direction'), - (TABLENS,'marked-invalid'), - (TABLENS,'cell-range-address'), - ), - (TABLENS,'insertion'):( - (TABLENS,'count'), - (TABLENS,'rejecting-change-id'), - (TABLENS,'acceptance-state'), - (TABLENS,'table'), - (TABLENS,'position'), - (TABLENS,'type'), - (TABLENS,'id'), - ), - (TABLENS,'insertion-cut-off'):( - (TABLENS,'position'), - (TABLENS,'id'), - ), - (TABLENS,'iteration'):( - (TABLENS,'status'), - (TABLENS,'maximum-difference'), - (TABLENS,'steps'), - ), -# allowed_attributes - (TABLENS,'label-range'):( - (TABLENS,'label-cell-range-address'), - (TABLENS,'data-cell-range-address'), - (TABLENS,'orientation'), - ), - (TABLENS,'label-ranges'):( - ), - (TABLENS,'last-column'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), - (TABLENS,'last-row'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), - (TABLENS,'movement'):( - (TABLENS,'id'), - (TABLENS,'rejecting-change-id'), - (TABLENS,'acceptance-state'), - ), - (TABLENS,'movement-cut-off'):( - (TABLENS,'position'), - (TABLENS,'end-position'), - (TABLENS,'start-position'), - ), - (TABLENS,'named-expression'):( - (TABLENS,'base-cell-address'), - (TABLENS,'expression'), - (TABLENS,'name'), - ), - (TABLENS,'named-expressions'):( - ), - (TABLENS,'named-range'):( - (TABLENS,'range-usable-as'), - (TABLENS,'base-cell-address'), - (TABLENS,'name'), - (TABLENS,'cell-range-address'), - ), - (TABLENS,'null-date'):( - (TABLENS,'date-value'), - (TABLENS,'value-type'), - ), - (TABLENS,'odd-columns'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), - (TABLENS,'odd-rows'):( - (TEXTNS,'paragraph-style-name'), - (TEXTNS,'style-name'), - ), - (TABLENS,'operation'):( - (TABLENS,'index'), - (TABLENS,'name'), - ), - (TABLENS,'previous'):( - (TABLENS,'id'), - ), - (TABLENS,'scenario'):( - (TABLENS,'comment'), - (TABLENS,'border-color'), - (TABLENS,'copy-back'), - (TABLENS,'is-active'), - (TABLENS,'protected'), - (TABLENS,'copy-formulas'), - (TABLENS,'copy-styles'), - (TABLENS,'scenario-ranges'), - (TABLENS,'display-border'), - ), - (TABLENS,'shapes'):( - ), - (TABLENS,'sort'):( - (TABLENS,'case-sensitive'), - (TABLENS,'algorithm'), - (TABLENS,'target-range-address'), - (TABLENS,'country'), - (TABLENS,'language'), - (TABLENS,'bind-styles-to-content'), - ), - (TABLENS,'sort-by'):( - (TABLENS,'field-number'), - (TABLENS,'data-type'), - (TABLENS,'order'), - ), - (TABLENS,'sort-groups'):( - (TABLENS,'data-type'), - (TABLENS,'order'), - ), - (TABLENS,'source-cell-range'):( - (TABLENS,'cell-range-address'), - ), - (TABLENS,'source-range-address'):( - (TABLENS,'column'), - (TABLENS,'end-column'), - (TABLENS,'start-table'), - (TABLENS,'end-row'), - (TABLENS,'table'), - (TABLENS,'start-row'), - (TABLENS,'row'), - (TABLENS,'end-table'), - (TABLENS,'start-column'), - ), -# allowed_attributes - (TABLENS,'source-service'):( - (TABLENS,'user-name'), - (TABLENS,'source-name'), - (TABLENS,'password'), - (TABLENS,'object-name'), - (TABLENS,'name'), - ), - (TABLENS,'subtotal-field'):( - (TABLENS,'function'), - (TABLENS,'field-number'), - ), - (TABLENS,'subtotal-rule'):( - (TABLENS,'group-by-field-number'), - ), - (TABLENS,'subtotal-rules'):( - (TABLENS,'bind-styles-to-content'), - (TABLENS,'page-breaks-on-group-change'), - (TABLENS,'case-sensitive'), - ), - (TABLENS,'table'):( - (TABLENS,'name'), - (TABLENS,'is-sub-table'), - (TABLENS,'style-name'), - (TABLENS,'protected'), - (TABLENS,'print-ranges'), - (TABLENS,'print'), - (TABLENS,'protection-key'), - ), - (TABLENS,'table-cell'):( - (TABLENS,'protect'), - (TABLENS,'number-matrix-rows-spanned'), - (TABLENS,'number-matrix-columns-spanned'), - (OFFICENS,'string-value'), - (TABLENS,'number-columns-spanned'), - (OFFICENS,'value'), - (OFFICENS,'boolean-value'), - (OFFICENS,'currency'), - (OFFICENS,'date-value'), - (TABLENS,'style-name'), - (TABLENS,'content-validation-name'), - (OFFICENS,'value-type'), - (TABLENS,'number-rows-spanned'), - (TABLENS,'number-columns-repeated'), - (TABLENS,'formula'), - (OFFICENS,'time-value'), - ), -# allowed_attributes - (TABLENS,'table-column'):( - (TABLENS,'style-name'), - (TABLENS,'default-cell-style-name'), - (TABLENS,'visibility'), - (TABLENS,'number-columns-repeated'), - ), - (TABLENS,'table-column-group'):( - (TABLENS,'display'), - ), - (TABLENS,'table-columns'):( - ), - (TABLENS,'table-header-columns'):( - ), - (TABLENS,'table-header-rows'):( - ), - (TABLENS,'table-row'):( - (TABLENS,'number-rows-repeated'), - (TABLENS,'style-name'), - (TABLENS,'visibility'), - (TABLENS,'default-cell-style-name'), - ), - (TABLENS,'table-row-group'):( - (TABLENS,'display'), - ), - (TABLENS,'table-rows'):( - ), - (TABLENS,'table-source'):( - (TABLENS,'filter-options'), - (XLINKNS,'actuate'), - (TABLENS,'filter-name'), - (XLINKNS,'href'), - (TABLENS,'mode'), - (TABLENS,'table-name'), - (XLINKNS,'type'), - (TABLENS,'refresh-delay'), - ), - (TABLENS,'table-template'):( - (TEXTNS,'last-row-end-column'), - (TEXTNS,'first-row-end-column'), - (TEXTNS,'name'), - (TEXTNS,'last-row-start-column'), - (TEXTNS,'first-row-start-column'), - ), - (TABLENS,'target-range-address'):( - (TABLENS,'column'), - (TABLENS,'end-column'), - (TABLENS,'start-table'), - (TABLENS,'end-row'), - (TABLENS,'table'), - (TABLENS,'start-row'), - (TABLENS,'row'), - (TABLENS,'end-table'), - (TABLENS,'start-column'), - ), - (TABLENS,'tracked-changes'):( - (TABLENS,'track-changes'), - ), -# allowed_attributes - (TEXTNS,'a'):( - (TEXTNS,'visited-style-name'), - (OFFICENS,'name'), - (OFFICENS,'title'), - (XLINKNS,'show'), - (OFFICENS,'target-frame-name'), - (XLINKNS,'actuate'), - (TEXTNS,'style-name'), - (XLINKNS,'href'), - (XLINKNS,'type'), - ), - (TEXTNS,'alphabetical-index'):( - (TEXTNS,'protected'), - (TEXTNS,'style-name'), - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - ), - (TEXTNS,'alphabetical-index-auto-mark-file'):( - (XLINKNS,'href'), - (XLINKNS,'type'), - ), - (TEXTNS,'alphabetical-index-entry-template'):( - (TEXTNS,'style-name'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'alphabetical-index-mark'):( - (TEXTNS,'main-entry'), - (TEXTNS,'key1-phonetic'), - (TEXTNS,'key2'), - (TEXTNS,'key1'), - (TEXTNS,'string-value'), - (TEXTNS,'key2-phonetic'), - (TEXTNS,'string-value-phonetic'), - ), -# allowed_attributes - (TEXTNS,'alphabetical-index-mark-end'):( - (TEXTNS,'id'), - ), - (TEXTNS,'alphabetical-index-mark-start'):( - (TEXTNS,'main-entry'), - (TEXTNS,'key1-phonetic'), - (TEXTNS,'key2'), - (TEXTNS,'key1'), - (TEXTNS,'string-value-phonetic'), - (TEXTNS,'key2-phonetic'), - (TEXTNS,'id'), - ), - (TEXTNS,'alphabetical-index-source'):( - (TEXTNS,'capitalize-entries'), - (FONS,'language'), - (TEXTNS,'relative-tab-stop-position'), - (TEXTNS,'alphabetical-separators'), - (TEXTNS,'combine-entries-with-pp'), - (TEXTNS,'combine-entries-with-dash'), - (TEXTNS,'sort-algorithm'), - (TEXTNS,'ignore-case'), - (TEXTNS,'combine-entries'), - (TEXTNS,'comma-separated'), - (FONS,'country'), - (TEXTNS,'index-scope'), - (TEXTNS,'main-entry-style-name'), - (TEXTNS,'use-keys-as-entries'), - ), -# allowed_attributes - (TEXTNS,'author-initials'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'author-name'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'bibliography'):( - (TEXTNS,'protected'), - (TEXTNS,'style-name'), - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - ), - (TEXTNS,'bibliography-configuration'):( - (TEXTNS,'suffix'), - (FONS,'language'), - (TEXTNS,'numbered-entries'), - (FONS,'country'), - (TEXTNS,'sort-by-position'), - (TEXTNS,'sort-algorithm'), - (TEXTNS,'prefix'), - ), - (TEXTNS,'bibliography-entry-template'):( - (TEXTNS,'style-name'), - (TEXTNS,'bibliography-type'), - ), -# allowed_attributes - (TEXTNS,'bibliography-mark'):( - (TEXTNS,'address'), - (TEXTNS,'annote'), - (TEXTNS,'author'), - (TEXTNS,'bibliography-type'), - (TEXTNS,'booktitle'), - (TEXTNS,'chapter'), - (TEXTNS,'custom1'), - (TEXTNS,'custom2'), - (TEXTNS,'custom3'), - (TEXTNS,'custom4'), - (TEXTNS,'custom5'), - (TEXTNS,'edition'), - (TEXTNS,'editor'), - (TEXTNS,'howpublished'), - (TEXTNS,'identifier'), - (TEXTNS,'institution'), - (TEXTNS,'isbn'), - (TEXTNS,'issn'), - (TEXTNS,'journal'), - (TEXTNS,'month'), - (TEXTNS,'note'), - (TEXTNS,'number'), - (TEXTNS,'organizations'), - (TEXTNS,'pages'), - (TEXTNS,'publisher'), - (TEXTNS,'report-type'), - (TEXTNS,'school'), - (TEXTNS,'series'), - (TEXTNS,'title'), - (TEXTNS,'url'), - (TEXTNS,'volume'), - (TEXTNS,'year'), - ), - (TEXTNS,'bibliography-source'):( - ), - (TEXTNS,'bookmark'):( - (TEXTNS,'name'), - ), - (TEXTNS,'bookmark-end'):( - (TEXTNS,'name'), - ), - (TEXTNS,'bookmark-ref'):( - (TEXTNS,'ref-name'), - (TEXTNS,'reference-format'), - ), - (TEXTNS,'bookmark-start'):( - (TEXTNS,'name'), - ), -# allowed_attributes - (TEXTNS,'change'):( - (TEXTNS,'change-id'), - ), - (TEXTNS,'change-end'):( - (TEXTNS,'change-id'), - ), - (TEXTNS,'change-start'):( - (TEXTNS,'change-id'), - ), - (TEXTNS,'changed-region'):( - (TEXTNS,'id'), - ), - (TEXTNS,'chapter'):( - (TEXTNS,'display'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'conditional-text'):( - (TEXTNS,'string-value-if-true'), - (TEXTNS,'current-value'), - (TEXTNS,'string-value-if-false'), - (TEXTNS,'condition'), - ), - (TEXTNS,'creation-date'):( - (TEXTNS,'date-value'), - (TEXTNS,'fixed'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'creation-time'):( - (TEXTNS,'fixed'), - (TEXTNS,'time-value'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'creator'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'database-display'):( - (TEXTNS,'column-name'), - (TEXTNS,'table-name'), - (TEXTNS,'table-type'), - (TEXTNS,'database-name'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'database-name'):( - (TEXTNS,'table-name'), - (TEXTNS,'table-type'), - (TEXTNS,'database-name'), - ), - (TEXTNS,'database-next'):( - (TEXTNS,'table-name'), - (TEXTNS,'table-type'), - (TEXTNS,'database-name'), - (TEXTNS,'condition'), - ), - (TEXTNS,'database-row-number'):( - (STYLENS,'num-format'), - (TEXTNS,'database-name'), - (TEXTNS,'value'), - (STYLENS,'num-letter-sync'), - (TEXTNS,'table-name'), - (TEXTNS,'table-type'), - ), - (TEXTNS,'database-row-select'):( - (TEXTNS,'row-number'), - (TEXTNS,'table-name'), - (TEXTNS,'table-type'), - (TEXTNS,'database-name'), - (TEXTNS,'condition'), - ), -# allowed_attributes - (TEXTNS,'date'):( - (TEXTNS,'date-value'), - (TEXTNS,'fixed'), - (TEXTNS,'date-adjust'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'dde-connection'):( - (TEXTNS,'connection-name'), - ), - (TEXTNS,'dde-connection-decl'):( - (OFFICENS,'automatic-update'), - (OFFICENS,'dde-topic'), - (OFFICENS,'dde-application'), - (OFFICENS,'name'), - (OFFICENS,'dde-item'), - ), - (TEXTNS,'dde-connection-decls'):( - ), - (TEXTNS,'deletion'):( - ), - (TEXTNS,'description'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'editing-cycles'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'editing-duration'):( - (TEXTNS,'duration'), - (TEXTNS,'fixed'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'execute-macro'):( - (TEXTNS,'name'), - ), - (TEXTNS,'expression'):( - (TEXTNS,'display'), - (OFFICENS,'string-value'), - (OFFICENS,'value'), - (OFFICENS,'boolean-value'), - (OFFICENS,'currency'), - (OFFICENS,'date-value'), - (STYLENS,'data-style-name'), - (OFFICENS,'value-type'), - (TEXTNS,'formula'), - (OFFICENS,'time-value'), - ), - (TEXTNS,'file-name'):( - (TEXTNS,'fixed'), - (TEXTNS,'display'), - ), -# allowed_attributes - (TEXTNS,'format-change'):( - ), - (TEXTNS,'h'):( - (TEXTNS,'restart-numbering'), - (TEXTNS,'cond-style-name'), - (TEXTNS,'is-list-header'), - (TEXTNS,'style-name'), - (TEXTNS,'class-names'), - (TEXTNS,'start-value'), - (TEXTNS,'id'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'hidden-paragraph'):( - (TEXTNS,'is-hidden'), - (TEXTNS,'condition'), - ), - (TEXTNS,'hidden-text'):( - (TEXTNS,'string-value'), - (TEXTNS,'is-hidden'), - (TEXTNS,'condition'), - ), - (TEXTNS,'illustration-index'):( - (TEXTNS,'protected'), - (TEXTNS,'style-name'), - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - ), - (TEXTNS,'illustration-index-entry-template'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'illustration-index-source'):( - (TEXTNS,'index-scope'), - (TEXTNS,'caption-sequence-name'), - (TEXTNS,'use-caption'), - (TEXTNS,'caption-sequence-format'), - (TEXTNS,'relative-tab-stop-position'), - ), - (TEXTNS,'index-body'):( - ), - (TEXTNS,'index-entry-bibliography'):( - (TEXTNS,'bibliography-data-field'), - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-entry-chapter'):( - (TEXTNS,'style-name'), - (TEXTNS,'display'), - ), -# allowed_attributes - (TEXTNS,'index-entry-link-end'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-entry-link-start'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-entry-page-number'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-entry-span'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-entry-tab-stop'):( - (STYLENS,'position'), - (TEXTNS,'style-name'), - (STYLENS,'type'), - (STYLENS,'leader-char'), - ), - (TEXTNS,'index-entry-text'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-source-style'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'index-source-styles'):( - (TEXTNS,'outline-level'), - ), - (TEXTNS,'index-title'):( - (TEXTNS,'protected'), - (TEXTNS,'style-name'), - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - ), - (TEXTNS,'index-title-template'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'initial-creator'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'insertion'):( - ), -# allowed_attributes - (TEXTNS,'keywords'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'line-break'):( - ), - (TEXTNS,'linenumbering-configuration'):( - (TEXTNS,'number-position'), - (TEXTNS,'number-lines'), - (STYLENS,'num-format'), - (TEXTNS,'count-empty-lines'), - (TEXTNS,'count-in-text-boxes'), - (TEXTNS,'style-name'), - (STYLENS,'num-letter-sync'), - (TEXTNS,'increment'), - (TEXTNS,'offset'), - (TEXTNS,'restart-on-page'), - ), - (TEXTNS,'linenumbering-separator'):( - (TEXTNS,'increment'), - ), - (TEXTNS,'list'):( - (TEXTNS,'style-name'), - (TEXTNS,'continue-numbering'), - ), - (TEXTNS,'list-header'):( - ), - (TEXTNS,'list-item'):( - (TEXTNS,'start-value'), - ), - (TEXTNS,'list-level-style-bullet'):( - (TEXTNS,'level'), - (STYLENS,'num-prefix'), - (STYLENS,'num-suffix'), - (TEXTNS,'bullet-relative-size'), - (TEXTNS,'style-name'), - (TEXTNS,'bullet-char'), - ), - (TEXTNS,'list-level-style-image'):( - (XLINKNS,'show'), - (XLINKNS,'actuate'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (TEXTNS,'level'), - ), - (TEXTNS,'list-level-style-number'):( - (TEXTNS,'level'), - (TEXTNS,'display-levels'), - (STYLENS,'num-format'), - (STYLENS,'num-suffix'), - (TEXTNS,'style-name'), - (STYLENS,'num-prefix'), - (STYLENS,'num-letter-sync'), - (TEXTNS,'start-value'), - ), -# allowed_attributes - (TEXTNS,'list-style'):( - (TEXTNS,'consecutive-numbering'), - (STYLENS,'display-name'), - (STYLENS,'name'), - ), - (TEXTNS,'measure'):( - (TEXTNS,'kind'), - ), - (TEXTNS,'modification-date'):( - (TEXTNS,'date-value'), - (TEXTNS,'fixed'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'modification-time'):( - (TEXTNS,'fixed'), - (TEXTNS,'time-value'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'note'):( - (TEXTNS,'note-class'), - (TEXTNS,'id'), - ), - (TEXTNS,'note-body'):( - ), - (TEXTNS,'note-citation'):( - (TEXTNS,'label'), - ), - (TEXTNS,'note-continuation-notice-backward'):( - ), - (TEXTNS,'note-continuation-notice-forward'):( - ), - (TEXTNS,'note-ref'):( - (TEXTNS,'ref-name'), - (TEXTNS,'note-class'), - (TEXTNS,'reference-format'), - ), - (TEXTNS,'notes-configuration'):( - (TEXTNS,'citation-body-style-name'), - (STYLENS,'num-format'), - (TEXTNS,'default-style-name'), - (STYLENS,'num-suffix'), - (TEXTNS,'start-numbering-at'), - (STYLENS,'num-prefix'), - (STYLENS,'num-letter-sync'), - (TEXTNS,'citation-style-name'), - (TEXTNS,'footnotes-position'), - (TEXTNS,'master-page-name'), - (TEXTNS,'start-value'), - (TEXTNS,'note-class'), - ), - (TEXTNS,'number'):( - ), - (TEXTNS,'numbered-paragraph'):( - (TEXTNS,'continue-numbering'), - (TEXTNS,'style-name'), - (TEXTNS,'start-value'), - (TEXTNS,'level'), - ), - (TEXTNS,'object-count'):( - (STYLENS,'num-format'), - (STYLENS,'num-letter-sync'), - ), - (TEXTNS,'object-index'):( - (TEXTNS,'protected'), - (TEXTNS,'style-name'), - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - ), -# allowed_attributes - (TEXTNS,'object-index-entry-template'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'object-index-source'):( - (TEXTNS,'use-draw-objects'), - (TEXTNS,'use-math-objects'), - (TEXTNS,'relative-tab-stop-position'), - (TEXTNS,'use-chart-objects'), - (TEXTNS,'index-scope'), - (TEXTNS,'use-spreadsheet-objects'), - (TEXTNS,'use-other-objects'), - ), - (TEXTNS,'outline-level-style'):( - (TEXTNS,'level'), - (TEXTNS,'display-levels'), - (STYLENS,'num-format'), - (STYLENS,'num-suffix'), - (TEXTNS,'style-name'), - (STYLENS,'num-prefix'), - (STYLENS,'num-letter-sync'), - (TEXTNS,'start-value'), - ), - (TEXTNS,'outline-style'):( - ), - (TEXTNS,'p'):( - (TEXTNS,'cond-style-name'), - (TEXTNS,'style-name'), - (TEXTNS,'class-names'), - (TEXTNS,'id'), - ), - (TEXTNS,'page'):( - (TEXTNS,'master-page-name'), - ), - (TEXTNS,'page-continuation'):( - (TEXTNS,'string-value'), - (TEXTNS,'select-page'), - ), - (TEXTNS,'page-number'):( - (TEXTNS,'page-adjust'), - (STYLENS,'num-format'), - (TEXTNS,'fixed'), - (STYLENS,'num-letter-sync'), - (TEXTNS,'select-page'), - ), - (TEXTNS,'page-sequence'):( - ), - (TEXTNS,'page-variable-get'):( - (STYLENS,'num-format'), - (STYLENS,'num-letter-sync'), - ), - (TEXTNS,'page-variable-set'):( - (TEXTNS,'active'), - (TEXTNS,'page-adjust'), - ), - (TEXTNS,'placeholder'):( - (TEXTNS,'placeholder-type'), - (TEXTNS,'description'), - ), - (TEXTNS,'print-date'):( - (TEXTNS,'date-value'), - (TEXTNS,'fixed'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'print-time'):( - (TEXTNS,'fixed'), - (TEXTNS,'time-value'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'printed-by'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'reference-mark'):( - (TEXTNS,'name'), - ), - (TEXTNS,'reference-mark-end'):( - (TEXTNS,'name'), - ), - (TEXTNS,'reference-mark-start'):( - (TEXTNS,'name'), - ), - (TEXTNS,'ruby'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'ruby-base'):( - ), - (TEXTNS,'ruby-text'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'s'):( - (TEXTNS,'c'), - ), - (TEXTNS,'script'):( - (XLINKNS,'href'), - (XLINKNS,'type'), - (SCRIPTNS,'language'), - ), - (TEXTNS,'section'):( - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - (TEXTNS,'style-name'), - (TEXTNS,'protected'), - (TEXTNS,'display'), - (TEXTNS,'condition'), - ), - (TEXTNS,'section-source'):( - (TEXTNS,'filter-name'), - (XLINKNS,'href'), - (XLINKNS,'type'), - (TEXTNS,'section-name'), - (XLINKNS,'show'), - ), - (TEXTNS,'sender-city'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-company'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-country'):( - (TEXTNS,'fixed'), - ), -# allowed_attributes - (TEXTNS,'sender-email'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-fax'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-firstname'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-initials'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-lastname'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-phone-private'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-phone-work'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-position'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-postal-code'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-state-or-province'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-street'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sender-title'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'sequence'):( - (TEXTNS,'formula'), - (STYLENS,'num-format'), - (STYLENS,'num-letter-sync'), - (TEXTNS,'name'), - (TEXTNS,'ref-name'), - ), - (TEXTNS,'sequence-decl'):( - (TEXTNS,'separation-character'), - (TEXTNS,'display-outline-level'), - (TEXTNS,'name'), - ), - (TEXTNS,'sequence-decls'):( - ), - (TEXTNS,'sequence-ref'):( - (TEXTNS,'ref-name'), - (TEXTNS,'reference-format'), - ), - (TEXTNS,'sheet-name'):( - ), - (TEXTNS,'soft-page-break'):( - ), - (TEXTNS,'sort-key'):( - (TEXTNS,'sort-ascending'), - (TEXTNS,'key'), - ), -# allowed_attributes - (TEXTNS,'span'):( - (TEXTNS,'style-name'), - (TEXTNS,'class-names'), - ), - (TEXTNS,'subject'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'tab'):( - (TEXTNS,'tab-ref'), - ), - (TEXTNS,'table-formula'):( - (TEXTNS,'formula'), - (STYLENS,'data-style-name'), - (TEXTNS,'display'), - ), - (TEXTNS,'table-index'):( - (TEXTNS,'protected'), - (TEXTNS,'style-name'), - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - ), - (TEXTNS,'table-index-entry-template'):( - (TEXTNS,'style-name'), - ), - (TEXTNS,'table-index-source'):( - (TEXTNS,'index-scope'), - (TEXTNS,'caption-sequence-name'), - (TEXTNS,'use-caption'), - (TEXTNS,'caption-sequence-format'), - (TEXTNS,'relative-tab-stop-position'), - ), -# allowed_attributes - (TEXTNS,'table-of-content'):( - (TEXTNS,'protected'), - (TEXTNS,'style-name'), - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - ), - (TEXTNS,'table-of-content-entry-template'):( - (TEXTNS,'style-name'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'table-of-content-source'):( - (TEXTNS,'index-scope'), - (TEXTNS,'outline-level'), - (TEXTNS,'relative-tab-stop-position'), - (TEXTNS,'use-index-marks'), - (TEXTNS,'use-outline-level'), - (TEXTNS,'use-index-source-styles'), - ), - (TEXTNS,'template-name'):( - (TEXTNS,'display'), - ), - (TEXTNS,'text-input'):( - (TEXTNS,'description'), - ), - (TEXTNS,'time'):( - (TEXTNS,'time-adjust'), - (TEXTNS,'fixed'), - (TEXTNS,'time-value'), - (STYLENS,'data-style-name'), - ), - (TEXTNS,'title'):( - (TEXTNS,'fixed'), - ), - (TEXTNS,'toc-mark'):( - (TEXTNS,'string-value'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'toc-mark-end'):( - (TEXTNS,'id'), - ), - (TEXTNS,'toc-mark-start'):( - (TEXTNS,'id'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'tracked-changes'):( - (TEXTNS,'track-changes'), - ), - (TEXTNS,'user-defined'):( - (TEXTNS,'name'), - (OFFICENS,'string-value'), - (OFFICENS,'value'), - (OFFICENS,'boolean-value'), - (OFFICENS,'date-value'), - (STYLENS,'data-style-name'), - (TEXTNS,'fixed'), - (OFFICENS,'time-value'), - ), - (TEXTNS,'user-field-decl'):( - (TEXTNS,'name'), - (OFFICENS,'string-value'), - (OFFICENS,'value'), - (OFFICENS,'boolean-value'), - (OFFICENS,'currency'), - (OFFICENS,'date-value'), - (OFFICENS,'value-type'), - (TEXTNS,'formula'), - (OFFICENS,'time-value'), - ), - (TEXTNS,'user-field-decls'):( - ), - (TEXTNS,'user-field-get'):( - (STYLENS,'data-style-name'), - (TEXTNS,'name'), - (TEXTNS,'display'), - ), -# allowed_attributes - (TEXTNS,'user-field-input'):( - (STYLENS,'data-style-name'), - (TEXTNS,'name'), - (TEXTNS,'description'), - ), - (TEXTNS,'user-index'):( - (TEXTNS,'protected'), - (TEXTNS,'style-name'), - (TEXTNS,'name'), - (TEXTNS,'protection-key'), - ), - (TEXTNS,'user-index-entry-template'):( - (TEXTNS,'style-name'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'user-index-mark'):( - (TEXTNS,'index-name'), - (TEXTNS,'string-value'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'user-index-mark-end'):( - (TEXTNS,'id'), - (TEXTNS,'outline-level'), - ), - (TEXTNS,'user-index-mark-start'):( - (TEXTNS,'index-name'), - (TEXTNS,'id'), - (TEXTNS,'outline-level'), - ), -# allowed_attributes - (TEXTNS,'user-index-source'):( - (TEXTNS,'copy-outline-levels'), - (TEXTNS,'index-name'), - (TEXTNS,'index-scope'), - (TEXTNS,'relative-tab-stop-position'), - (TEXTNS,'use-floating-frames'), - (TEXTNS,'use-graphics'), - (TEXTNS,'use-index-marks'), - (TEXTNS,'use-objects'), - (TEXTNS,'use-tables'), - ), - (TEXTNS,'variable-decl'):( - (TEXTNS,'name'), - (OFFICENS,'value-type'), - ), - (TEXTNS,'variable-decls'):( - ), - (TEXTNS,'variable-get'):( - (STYLENS,'data-style-name'), - (TEXTNS,'name'), - (TEXTNS,'display'), - ), - (TEXTNS,'variable-input'):( - (STYLENS,'data-style-name'), - (TEXTNS,'display'), - (TEXTNS,'name'), - (OFFICENS,'value-type'), - (TEXTNS,'description'), - ), - (TEXTNS,'variable-set'):( - (TEXTNS,'name'), - (TEXTNS,'display'), - (OFFICENS,'string-value'), - (OFFICENS,'value'), - (OFFICENS,'boolean-value'), - (OFFICENS,'currency'), - (OFFICENS,'date-value'), - (STYLENS,'data-style-name'), - (OFFICENS,'value-type'), - (TEXTNS,'formula'), - (OFFICENS,'time-value'), - ), -# allowed_attributes -} diff --git a/tablib/packages/odf3/load.py b/tablib/packages/odf3/load.py deleted file mode 100644 index cf275c49..00000000 --- a/tablib/packages/odf3/load.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/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 -from io 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) - if len(content.strip()) > 0: - self.parent.addText(content, check_grammar=False) - self.data = [] - # Create the element - attrdict = {} - for (att,value) in list(attrs.items()): - attrdict[att] = value - try: - e = Element(qname = tag, qattributes=attrdict, check_grammar=False) - self.curr = e - except AttributeError as 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, check_grammar=False) - self.data = [] - self.curr = self.curr.parentNode - self.parent = self.curr - if tag in self.triggers: - self.parse = False diff --git a/tablib/packages/odf3/manifest.py b/tablib/packages/odf3/manifest.py deleted file mode 100644 index 20830f9d..00000000 --- a/tablib/packages/odf3/manifest.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/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) - diff --git a/tablib/packages/odf3/math.py b/tablib/packages/odf3/math.py deleted file mode 100644 index 498987d9..00000000 --- a/tablib/packages/odf3/math.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- 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/tablib/packages/odf3/meta.py b/tablib/packages/odf3/meta.py deleted file mode 100644 index 94d41b52..00000000 --- a/tablib/packages/odf3/meta.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- 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/tablib/packages/odf3/namespaces.py b/tablib/packages/odf3/namespaces.py deleted file mode 100644 index 14f04941..00000000 --- a/tablib/packages/odf3/namespaces.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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 = "ODFPY/0.9.3" - -ANIMNS = "urn:oasis:names:tc:opendocument:xmlns:animation:1.0" -DBNS = "urn:oasis:names:tc:opendocument:xmlns:database:1.0" -CHARTNS = "urn:oasis:names:tc:opendocument:xmlns:chart:1.0" -CONFIGNS = "urn:oasis:names:tc:opendocument:xmlns:config:1.0" -#DBNS = u"http://openoffice.org/2004/database" -DCNS = "http://purl.org/dc/elements/1.1/" -DOMNS = "http://www.w3.org/2001/xml-events" -DR3DNS = "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" -DRAWNS = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" -FIELDNS = "urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" -FONS = "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" -FORMNS = "urn:oasis:names:tc:opendocument:xmlns:form:1.0" -GRDDLNS = "http://www.w3.org/2003/g/data-view#" -KOFFICENS = "http://www.koffice.org/2005/" -MANIFESTNS = "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" -MATHNS = "http://www.w3.org/1998/Math/MathML" -METANS = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0" -NUMBERNS = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" -OFFICENS = "urn:oasis:names:tc:opendocument:xmlns:office:1.0" -OFNS = "urn:oasis:names:tc:opendocument:xmlns:of:1.2" -OOONS = "http://openoffice.org/2004/office" -OOOWNS = "http://openoffice.org/2004/writer" -OOOCNS = "http://openoffice.org/2004/calc" -PRESENTATIONNS = "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" -RDFANS = "http://docs.oasis-open.org/opendocument/meta/rdfa#" -RPTNS = "http://openoffice.org/2005/report" -SCRIPTNS = "urn:oasis:names:tc:opendocument:xmlns:script:1.0" -SMILNS = "urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" -STYLENS = "urn:oasis:names:tc:opendocument:xmlns:style:1.0" -SVGNS = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" -TABLENS = "urn:oasis:names:tc:opendocument:xmlns:table:1.0" -TEXTNS = "urn:oasis:names:tc:opendocument:xmlns:text:1.0" -XFORMSNS = "http://www.w3.org/2002/xforms" -XLINKNS = "http://www.w3.org/1999/xlink" -XMLNS = "http://www.w3.org/XML/1998/namespace" -XSDNS = "http://www.w3.org/2001/XMLSchema" -XSINS = "http://www.w3.org/2001/XMLSchema-instance" - -nsdict = { - ANIMNS: 'anim', - CHARTNS: 'chart', - CONFIGNS: 'config', - DBNS: 'db', - DCNS: 'dc', - DOMNS: 'dom', - DR3DNS: 'dr3d', - DRAWNS: 'draw', - FIELDNS: 'field', - FONS: 'fo', - FORMNS: 'form', - GRDDLNS: 'grddl', - KOFFICENS: 'koffice', - MANIFESTNS: 'manifest', - MATHNS: 'math', - METANS: 'meta', - NUMBERNS: 'number', - OFFICENS: 'office', - OFNS: 'of', - OOONS: 'ooo', - OOOWNS: 'ooow', - OOOCNS: 'oooc', - PRESENTATIONNS: 'presentation', - RDFANS: 'rdfa', - RPTNS: 'rpt', - SCRIPTNS: 'script', - SMILNS: 'smil', - STYLENS: 'style', - SVGNS: 'svg', - TABLENS: 'table', - TEXTNS: 'text', - XFORMSNS: 'xforms', - XLINKNS: 'xlink', - XMLNS: 'xml', - XSDNS: 'xsd', - XSINS: 'xsi', -} diff --git a/tablib/packages/odf3/number.py b/tablib/packages/odf3/number.py deleted file mode 100644 index 78e001c3..00000000 --- a/tablib/packages/odf3/number.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- 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/tablib/packages/odf3/odf2moinmoin.py b/tablib/packages/odf3/odf2moinmoin.py deleted file mode 100644 index c4f5ca10..00000000 --- a/tablib/packages/odf3/odf2moinmoin.py +++ /dev/null @@ -1,579 +0,0 @@ -# -*- 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/tablib/packages/odf3/odf2xhtml.py b/tablib/packages/odf3/odf2xhtml.py deleted file mode 100644 index 7c54bb45..00000000 --- a/tablib/packages/odf3/odf2xhtml.py +++ /dev/null @@ -1,1582 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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() -from xml.sax import handler -from xml.sax.saxutils import escape, quoteattr -from xml.dom import Node - -from .opendocument import load - -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,'fill-image-name'): self.c_drawfillimage, - (FONS,"background-color"): self.c_fo, - (FONS,"border"): self.c_fo, - (FONS,"border-bottom"): self.c_fo, - (FONS,"border-left"): self.c_fo, - (FONS,"border-right"): self.c_fo, - (FONS,"border-top"): self.c_fo, - (FONS,"color"): self.c_fo, - (FONS,"font-family"): self.c_fo, - (FONS,"font-size"): self.c_fo, - (FONS,"font-style"): self.c_fo, - (FONS,"font-variant"): self.c_fo, - (FONS,"font-weight"): self.c_fo, - (FONS,"line-height"): self.c_fo, - (FONS,"margin"): self.c_fo, - (FONS,"margin-bottom"): self.c_fo, - (FONS,"margin-left"): self.c_fo, - (FONS,"margin-right"): self.c_fo, - (FONS,"margin-top"): self.c_fo, - (FONS,"min-height"): self.c_fo, - (FONS,"padding"): self.c_fo, - (FONS,"padding-bottom"): self.c_fo, - (FONS,"padding-left"): self.c_fo, - (FONS,"padding-right"): self.c_fo, - (FONS,"padding-top"): self.c_fo, - (FONS,"page-width"): self.c_page_width, - (FONS,"page-height"): self.c_page_height, - (FONS,"text-align"): self.c_text_align, - (FONS,"text-indent") :self.c_fo, - (TABLENS,'border-model') :self.c_border_model, - (STYLENS,'column-width') : self.c_width, - (STYLENS,"font-name"): self.c_fn, - (STYLENS,'horizontal-pos'): self.c_hp, - (STYLENS,'text-position'): self.c_text_position, - (STYLENS,'text-line-through-style'): self.c_text_line_through_style, - (STYLENS,'text-underline-style'): self.c_text_underline_style, - (STYLENS,'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 (SVGNS,'x') in ruleset: - 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 list(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 attr in attrs: - 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, generate_css=True, embedable=False): - # Tags - self.generate_css = generate_css - 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_creator), - (DCNS, 'description'): (self.s_processcont, self.e_dc_metatag), - (DCNS, 'date'): (self.s_processcont, self.e_dc_metatag), - (DRAWNS, 'custom-shape'): (self.s_custom_shape, self.e_custom_shape), - (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, 'object'): (self.s_draw_object, None), - (DRAWNS, 'object-ole'): (self.s_draw_object_ole, None), - (DRAWNS, 'page'): (self.s_draw_page, self.e_draw_page), - (DRAWNS, 'text-box'): (self.s_draw_textbox, self.e_draw_textbox), - (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, "annotation"):(self.s_ignorexml, None), - (OFFICENS, "automatic-styles"):(self.s_office_automatic_styles, None), - (OFFICENS, "document"):(self.s_office_document_content, self.e_office_document_content), - (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), - (OFFICENS, "settings"):(self.s_ignorexml, None), - (PRESENTATIONNS, "notes"):(self.s_ignorexml, None), -# (STYLENS, "default-page-layout"):(self.s_style_default_page_layout, self.e_style_page_layout), - (STYLENS, "default-page-layout"):(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, 'bookmark'): (self.s_text_bookmark, None), - (TEXTNS, 'bookmark-start'): (self.s_text_bookmark, None), - (TEXTNS, 'bookmark-ref'): (self.s_text_bookmark_ref, self.e_text_a), - (TEXTNS, 'bookmark-ref-start'): (self.s_text_bookmark_ref, None), - (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), - } - if embedable: - self.make_embedable() - self._resetobject() - - def set_plain(self): - """ Tell the parser to not generate CSS """ - self.generate_css = False - - def set_embedable(self): - """ Tells the converter to only output the parts inside the """ - self.elements[(OFFICENS, "text")] = (None,None) - self.elements[(OFFICENS, "spreadsheet")] = (None,None) - self.elements[(OFFICENS, "presentation")] = (None,None) - self.elements[(OFFICENS, "document-content")] = (None,None) - - - def add_style_file(self, stylefilename, media=None): - """ Add a link to an external style file. - Also turns of the embedding of styles in the HTML - """ - self.use_internal_css = False - self.stylefilename = stylefilename - if media: - self.metatags.append('\n' % (stylefilename,media)) - else: - self.metatags.append('\n' % (stylefilename)) - - def _resetfootnotes(self): - # Footnotes and endnotes - self.notedict = {} - self.currentnote = 0 - self.notebody = '' - - def _resetobject(self): - self.lines = [] - self._wfunc = self._wlines - self.xmlfile = '' - self.title = '' - self.language = '' - self.creator = '' - self.data = [] - self.tagstack = TagStack() - self.htmlstack = [] - self.pstack = [] - self.processelem = True - self.processcont = True - self.listtypes = {} - self.headinglevels = [0, 0,0,0,0,0, 0,0,0,0,0] # level 0 to 10 - self.use_internal_css = True - self.cs = StyleToCSS() - self.anchors = {} - - # Style declarations - self.stylestack = [] - self.styledict = {} - self.currentstyle = None - - self._resetfootnotes() - - # Tags from meta.xml - self.metatags = [] - - - 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 """ - self.htmlstack.append((tag,attrs,block)) - a = [] - for key,val in list(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): - """ Close an open HTML tag """ - self.htmlstack.pop() - self.writeout("" % tag) - if block == True: - self.writeout("\n") - - def emptytag(self, tag, attrs={}): - a = [] - for key,val in list(attrs.items()): - a.append('''%s=%s''' % (key, quoteattr(val))) - self.writeout("<%s %s/>\n" % (tag, " ".join(a))) - -#-------------------------------------------------- -# Interface to parser -#-------------------------------------------------- - def characters(self, data): - if self.processelem and self.processcont: - self.data.append(data) - - 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 handle_starttag(self, tag, method, attrs): - method(tag,attrs) - - def handle_endtag(self, tag, attrs, method): - method(tag, attrs) - - 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): - """ Stop processing the text nodes """ - self.processcont = False - - def s_processcont(self, tag, attrs): - """ Start processing the text nodes """ - self.processcont = True - - def classname(self, attrs): - """ Generate a class name from a style name """ - c = attrs.get((TEXTNS,'style-name'),'') - c = c.replace(".","_") - return c - - def get_anchor(self, name): - """ Create a unique anchor id for a href name """ - if name not in self.anchors: - 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.title = ''.join(self.data) - #self.metatags.append('<title>%s\n' % escape(self.title)) - 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.language = ''.join(self.data) - self.metatags.append('\n' % escape(self.language)) - self.data = [] - - def e_dc_creator(self, tag, attrs): - """ Set the content creator. Identifies the targeted audience - """ - self.creator = ''.join(self.data) - self.metatags.append('\n' % escape(self.creator)) - self.data = [] - - def s_custom_shape(self, tag, attrs): - """ A is made into a
      in HTML which is then styled - """ - anchor_type = attrs.get((TEXTNS,'anchor-type'),'notfound') - htmltag = 'div' - 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 = 'position:absolute;' - elif anchor_type == 'char': - style = "position:absolute;" - elif anchor_type == 'as-char': - htmltag = 'div' - style = '' - else: - style = "position: absolute;" - if (SVGNS,"width") in attrs: - style = style + "width:" + attrs[(SVGNS,"width")] + ";" - if (SVGNS,"height") in attrs: - style = style + "height:" + attrs[(SVGNS,"height")] + ";" - if (SVGNS,"x") in attrs: - style = style + "left:" + attrs[(SVGNS,"x")] + ";" - if (SVGNS,"y") in attrs: - style = style + "top:" + attrs[(SVGNS,"y")] + ";" - if self.generate_css: - self.opentag(htmltag, {'class': name, 'style': style}) - else: - self.opentag(htmltag) - - def e_custom_shape(self, tag, attrs): - """ End the - """ - self.closetag('div') - - 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'),'notfound') - htmltag = 'div' - 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 = 'position:relative;' - elif anchor_type == 'char': - style = "position:relative;" - elif anchor_type == 'as-char': - htmltag = 'div' - style = '' - else: - style = "position:absolute;" - if (SVGNS,"width") in attrs: - style = style + "width:" + attrs[(SVGNS,"width")] + ";" - if (SVGNS,"height") in attrs: - style = style + "height:" + attrs[(SVGNS,"height")] + ";" - if (SVGNS,"x") in attrs: - style = style + "left:" + attrs[(SVGNS,"x")] + ";" - if (SVGNS,"y") in attrs: - style = style + "top:" + attrs[(SVGNS,"y")] + ";" - if self.generate_css: - self.opentag(htmltag, {'class': name, 'style': style}) - else: - self.opentag(htmltag) - - 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 self.generate_css: - if anchor_type != "char": - htmlattrs['style'] = "display: block;" - self.emptytag('img', htmlattrs) - - def s_draw_object(self, tag, attrs): - """ A is embedded object in the document (e.g. spreadsheet in presentation). - """ - objhref = attrs[(XLINKNS,"href")] - # Remove leading "./": from "./Object 1" to "Object 1" -# objhref = objhref [2:] - - # Not using os.path.join since it fails to find the file on Windows. -# objcontentpath = '/'.join([objhref, 'content.xml']) - - for c in self.document.childnodes: - if c.folder == objhref: - self._walknode(c.topnode) - - def s_draw_object_ole(self, tag, attrs): - """ A is embedded OLE object in the document (e.g. MS Graph). - """ - class_id = attrs[(DRAWNS,"class-id")] - if class_id and class_id.lower() == "00020803-0000-0000-c000-000000000046": ## Microsoft Graph 97 Chart - tagattrs = { 'name':'object_ole_graph', 'class':'ole-graph' } - self.opentag('a', tagattrs) - self.closetag('a', tagattrs) - - def s_draw_page(self, tag, attrs): - """ A is a slide in a presentation. We use a
      element in HTML. - Therefore if you convert a ODP file, you get a series of
      s. - Override this for your own purpose. - """ - name = attrs.get( (DRAWNS,'name'), "NoName") - stylename = attrs.get( (DRAWNS,'style-name'), "") - stylename = stylename.replace(".","_") - masterpage = attrs.get( (DRAWNS,'master-page-name'),"") - masterpage = masterpage.replace(".","_") - if self.generate_css: - self.opentag('fieldset', {'class':"DP-%s MP-%s" % (stylename, masterpage) }) - else: - self.opentag('fieldset') - self.opentag('legend') - self.writeout(escape(name)) - self.closetag('legend') - - def e_draw_page(self, tag, attrs): - self.closetag('fieldset') - - def s_draw_textbox(self, tag, attrs): - style = '' - if (FONS,"min-height") in attrs: - style = style + "min-height:" + attrs[(FONS,"min-height")] + ";" - self.opentag('div') -# self.opentag('div', {'style': style}) - - def e_draw_textbox(self, tag, attrs): - """ End the - """ - self.closetag('div') - - def html_body(self, tag, attrs): - self.writedata() - if self.generate_css and self.use_internal_css: - self.opentag('style', {'type':"text/css"}, True) - self.writeout('/**/\n') - self.closetag('style') - self.purgedata() - self.closetag('head') - self.opentag('body', block=True) - - default_styles = """ -img { width: 100%; height: 100%; } -* { padding: 0; margin: 0; background-color:white; } -body { margin: 0 1em; } -ol, ul { padding-left: 2em; } -""" - - def generate_stylesheet(self): - for name in self.stylestack: - styles = self.styledict.get(name) - # Preload with the family's default style - if '__style-family' in styles and styles['__style-family'] in self.styledict: - familystyle = self.styledict[styles['__style-family']].copy() - del styles['__style-family'] - for style, val in list(styles.items()): - familystyle[style] = val - styles = familystyle - # Resolve the remaining parent styles - while '__parent-style-name' in styles and styles['__parent-style-name'] in self.styledict: - parentstyle = self.styledict[styles['__parent-style-name']].copy() - del styles['__parent-style-name'] - for style, val in list(styles.items()): - parentstyle[style] = val - styles = parentstyle - self.styledict[name] = styles - # Write the styles to HTML - self.writeout(self.default_styles) - for name in self.stylestack: - styles = self.styledict.get(name) - css2 = self.cs.convert_styles(styles) - self.writeout("%s {\n" % name) - for style, val in list(css2.items()): - self.writeout("\t%s: %s;\n" % (style, val) ) - self.writeout("}\n") - - def generate_footnotes(self): - if self.currentnote == 0: - return - if self.generate_css: - self.opentag('ol', {'style':'border-top: 1px solid black'}, True) - else: - self.opentag('ol') - for key in range(1,self.currentnote+1): - note = self.notedict[key] -# for key,note in self.notedict.items(): - self.opentag('li', { 'id':"footnote-%d" % key }) -# self.opentag('sup') -# self.writeout(escape(note['citation'])) -# self.closetag('sup', False) - self.writeout(note['body']) - self.closetag('li') - self.closetag('ol') - - def s_office_automatic_styles(self, tag, attrs): - if self.xmlfile == 'styles.xml': - self.autoprefix = "A" - else: - self.autoprefix = "" - - def s_office_document_content(self, tag, attrs): - """ First tag in the content.xml file""" - self.writeout('\n') - self.opentag('html', {'xmlns':"http://www.w3.org/1999/xhtml"}, True) - self.opentag('head', block=True) - self.emptytag('meta', { 'http-equiv':"Content-Type", 'content':"text/html;charset=UTF-8"}) - for metaline in self.metatags: - self.writeout(metaline) - self.writeout('%s\n' % escape(self.title)) - - def e_office_document_content(self, tag, attrs): - """ Last tag """ - self.closetag('html') - - def s_office_master_styles(self, tag, attrs): - """ """ - - def s_office_presentation(self, tag, attrs): - """ For some odd reason, OpenOffice Impress doesn't define a default-style - for the 'paragraph'. We therefore force a standard when we see - it is a presentation - """ - self.styledict['p'] = {(FONS,'font-size'): "24pt" } - self.styledict['presentation'] = {(FONS,'font-size'): "24pt" } - self.html_body(tag, attrs) - - def e_office_presentation(self, tag, attrs): - self.generate_footnotes() - self.closetag('body') - - def s_office_spreadsheet(self, tag, attrs): - self.html_body(tag, attrs) - - def e_office_spreadsheet(self, tag, attrs): - self.generate_footnotes() - self.closetag('body') - - def s_office_styles(self, tag, attrs): - self.autoprefix = "" - - def s_office_text(self, tag, attrs): - """ OpenDocument text """ - self.styledict['frame'] = { (STYLENS,'wrap'): 'parallel'} - self.html_body(tag, attrs) - - def e_office_text(self, tag, attrs): - self.generate_footnotes() - self.closetag('body') - - def s_style_handle_properties(self, tag, attrs): - """ Copy all attributes to a struct. - We will later convert them to CSS2 - """ - for key,attr in list(attrs.items()): - self.styledict[self.currentstyle][key] = attr - - - familymap = {'frame':'frame', 'paragraph':'p', 'presentation':'presentation', - 'text':'span','section':'div', - 'table':'table','table-cell':'td','table-column':'col', - 'table-row':'tr','graphic':'graphic' } - - def s_style_default_style(self, tag, attrs): - """ A default style is like a style on an HTML tag - """ - family = attrs[(STYLENS,'family')] - htmlfamily = self.familymap.get(family,'unknown') - self.currentstyle = htmlfamily -# self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def e_style_default_style(self, tag, attrs): - self.currentstyle = None - - def s_style_font_face(self, tag, attrs): - """ It is possible that the HTML browser doesn't know how to - show a particular font. Luckily 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 - """ - name = attrs[(STYLENS,"name")] - family = attrs[(SVGNS,"font-family")] - generic = attrs.get( (STYLENS,'font-family-generic'),"" ) - self.cs.save_font(name, family, generic) - - def s_style_footer(self, tag, attrs): - self.opentag('div', { 'id':"footer" }) - self.purgedata() - - def e_style_footer(self, tag, attrs): - self.writedata() - self.closetag('div') - self.purgedata() - - def s_style_footer_style(self, tag, attrs): - self.currentstyle = "@print #footer" - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def s_style_header(self, tag, attrs): - self.opentag('div', { 'id':"header" }) - self.purgedata() - - def e_style_header(self, tag, attrs): - self.writedata() - self.closetag('div') - self.purgedata() - - def s_style_header_style(self, tag, attrs): - self.currentstyle = "@print #header" - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def s_style_default_page_layout(self, tag, attrs): - """ Collect the formatting for the default page layout style. - """ - self.currentstyle = "@page" - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def s_style_page_layout(self, tag, attrs): - """ Collect the formatting for the page layout style. - This won't work in CSS 2.1, as page identifiers are not allowed. - It is legal in CSS3, but the rest of the application doesn't specify when to use what page layout - """ - name = attrs[(STYLENS,'name')] - name = name.replace(".","_") - self.currentstyle = ".PL-" + name - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - def e_style_page_layout(self, tag, attrs): - """ End this style - """ - self.currentstyle = None - - def s_style_master_page(self, tag, attrs): - """ Collect the formatting for the page layout style. - """ - name = attrs[(STYLENS,'name')] - name = name.replace(".","_") - - self.currentstyle = ".MP-" + name - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {('','position'):'relative'} - # Then load the pagelayout style if we find it - pagelayout = attrs.get( (STYLENS,'page-layout-name'), None) - if pagelayout: - pagelayout = ".PL-" + pagelayout - if pagelayout in self.styledict: - styles = self.styledict[pagelayout] - for style, val in list(styles.items()): - self.styledict[self.currentstyle][style] = val - else: - self.styledict[self.currentstyle]['__parent-style-name'] = pagelayout - self.s_ignorexml(tag, attrs) - - # Short prefixes for class selectors - _familyshort = {'drawing-page':'DP', 'paragraph':'P', 'presentation':'PR', - 'text':'S', 'section':'D', - 'table':'T', 'table-cell':'TD', 'table-column':'TC', - 'table-row':'TR', 'graphic':'G' } - - def s_style_style(self, tag, attrs): - """ Collect the formatting for the style. - Styles have scope. The same name can be used for both paragraph and - character styles Since CSS has no scope we use a prefix. (Not elegant) - In ODF a style can have a parent, these parents can be chained. - We may not have encountered the parent yet, but if we have, we resolve it. - """ - name = attrs[(STYLENS,'name')] - name = name.replace(".","_") - family = attrs[(STYLENS,'family')] - htmlfamily = self.familymap.get(family,'unknown') - sfamily = self._familyshort.get(family,'X') - name = "%s%s-%s" % (self.autoprefix, sfamily, name) - parent = attrs.get( (STYLENS,'parent-style-name') ) - self.currentstyle = special_styles.get(name,"."+name) - self.stylestack.append(self.currentstyle) - if self.currentstyle not in self.styledict: - self.styledict[self.currentstyle] = {} - - self.styledict[self.currentstyle]['__style-family'] = htmlfamily - - # Then load the parent style if we find it - if parent: - parent = "%s-%s" % (sfamily, parent) - parent = special_styles.get(parent, "."+parent) - if parent in self.styledict: - styles = self.styledict[parent] - for style, val in list(styles.items()): - self.styledict[self.currentstyle][style] = val - else: - self.styledict[self.currentstyle]['__parent-style-name'] = parent - - def e_style_style(self, tag, attrs): - """ End this style - """ - self.currentstyle = None - - def s_table_table(self, tag, attrs): - """ Start a table - """ - c = attrs.get( (TABLENS,'style-name'), None) - if c and self.generate_css: - c = c.replace(".","_") - self.opentag('table',{ 'class': "T-%s" % c }) - else: - self.opentag('table') - self.purgedata() - - def e_table_table(self, tag, attrs): - """ End a table - """ - self.writedata() - self.closetag('table') - self.purgedata() - - def s_table_table_cell(self, tag, attrs): - """ Start a table cell """ - #FIXME: number-columns-repeated § 8.1.3 - #repeated = int(attrs.get( (TABLENS,'number-columns-repeated'), 1)) - htmlattrs = {} - rowspan = attrs.get( (TABLENS,'number-rows-spanned') ) - if rowspan: - htmlattrs['rowspan'] = rowspan - colspan = attrs.get( (TABLENS,'number-columns-spanned') ) - if colspan: - htmlattrs['colspan'] = colspan - - c = attrs.get( (TABLENS,'style-name') ) - if c: - htmlattrs['class'] = 'TD-%s' % c.replace(".","_") - self.opentag('td', htmlattrs) - self.purgedata() - - def e_table_table_cell(self, tag, attrs): - """ End a table cell """ - self.writedata() - self.closetag('td') - self.purgedata() - - def s_table_table_column(self, tag, attrs): - """ Start a table column """ - c = attrs.get( (TABLENS,'style-name'), None) - repeated = int(attrs.get( (TABLENS,'number-columns-repeated'), 1)) - htmlattrs = {} - if c: - htmlattrs['class'] = "TC-%s" % c.replace(".","_") - for x in range(repeated): - self.emptytag('col', htmlattrs) - self.purgedata() - - def s_table_table_row(self, tag, attrs): - """ Start a table row """ - #FIXME: table:number-rows-repeated - c = attrs.get( (TABLENS,'style-name'), None) - htmlattrs = {} - if c: - htmlattrs['class'] = "TR-%s" % c.replace(".","_") - self.opentag('tr', htmlattrs) - self.purgedata() - - def e_table_table_row(self, tag, attrs): - """ End a table row """ - self.writedata() - self.closetag('tr') - self.purgedata() - - def s_text_a(self, tag, attrs): - """ Anchors start """ - self.writedata() - href = attrs[(XLINKNS,"href")].split("|")[0] - if href[0] == "#": - href = "#" + self.get_anchor(href[1:]) - self.opentag('a', {'href':href}) - self.purgedata() - - def e_text_a(self, tag, attrs): - """ End an anchor or bookmark reference """ - self.writedata() - self.closetag('a', False) - self.purgedata() - - def s_text_bookmark(self, tag, attrs): - """ Bookmark definition """ - name = attrs[(TEXTNS,'name')] - html_id = self.get_anchor(name) - self.writedata() - self.opentag('span', {'id':html_id}) - self.closetag('span', False) - self.purgedata() - - def s_text_bookmark_ref(self, tag, attrs): - """ Bookmark reference """ - name = attrs[(TEXTNS,'ref-name')] - html_id = "#" + self.get_anchor(name) - self.writedata() - self.opentag('a', {'href':html_id}) - self.purgedata() - - def s_text_h(self, tag, attrs): - """ Headings start """ - level = int(attrs[(TEXTNS,'outline-level')]) - if level > 6: level = 6 # Heading levels go only to 6 in XHTML - if level < 1: level = 1 - self.headinglevels[level] = self.headinglevels[level] + 1 - name = self.classname(attrs) - for x in range(level + 1,10): - self.headinglevels[x] = 0 - special = special_styles.get("P-"+name) - if special or not self.generate_css: - self.opentag('h%s' % level) - else: - self.opentag('h%s' % level, {'class':"P-%s" % name }) - self.purgedata() - - def e_text_h(self, tag, attrs): - """ Headings end - Side-effect: If there is no title in the metadata, then it is taken - from the first heading of any level. - """ - self.writedata() - level = int(attrs[(TEXTNS,'outline-level')]) - if level > 6: level = 6 # Heading levels go only to 6 in XHTML - if level < 1: level = 1 - lev = self.headinglevels[1:level+1] - outline = '.'.join(map(str,lev) ) - heading = ''.join(self.data) - if self.title == '': self.title = heading - anchor = self.get_anchor("%s.%s" % ( outline, heading)) - self.opentag('a', {'id': anchor} ) - self.closetag('a', False) - self.closetag('h%s' % level) - self.purgedata() - - def s_text_line_break(self, tag, attrs): - """ Force a line break (
      ) """ - self.writedata() - self.emptytag('br') - self.purgedata() - - def s_text_list(self, tag, attrs): - """ Start a list (
        or
          ) - To know which level we're at, we have to count the number - of elements on the tagstack. - """ - name = attrs.get( (TEXTNS,'style-name') ) - level = self.tagstack.count_tags(tag) + 1 - if name: - name = name.replace(".","_") - else: - # FIXME: If a list is contained in a table cell or text box, - # the list level must return to 1, even though the table or - # textbox itself may be nested within another list. - name = self.tagstack.rfindattr( (TEXTNS,'style-name') ) - list_class = "%s_%d" % (name, level) - if self.generate_css: - self.opentag('%s' % self.listtypes.get(list_class,'ul'), {'class': list_class }) - else: - self.opentag('%s' % self.listtypes.get(list_class,'ul')) - self.purgedata() - - def e_text_list(self, tag, attrs): - """ End a list """ - self.writedata() - name = attrs.get( (TEXTNS,'style-name') ) - level = self.tagstack.count_tags(tag) + 1 - if name: - name = name.replace(".","_") - else: - # FIXME: If a list is contained in a table cell or text box, - # the list level must return to 1, even though the table or - # textbox itself may be nested within another list. - name = self.tagstack.rfindattr( (TEXTNS,'style-name') ) - list_class = "%s_%d" % (name, level) - self.closetag(self.listtypes.get(list_class,'ul')) - self.purgedata() - - def s_text_list_item(self, tag, attrs): - """ Start list item """ - self.opentag('li') - self.purgedata() - - def e_text_list_item(self, tag, attrs): - """ End list item """ - self.writedata() - self.closetag('li') - self.purgedata() - - def s_text_list_level_style_bullet(self, tag, attrs): - """ CSS doesn't have the ability to set the glyph - to a particular character, so we just go through - the available glyphs - """ - name = self.tagstack.rfindattr( (STYLENS,'name') ) - level = attrs[(TEXTNS,'level')] - self.prevstyle = self.currentstyle - list_class = "%s_%s" % (name, level) - self.listtypes[list_class] = 'ul' - self.currentstyle = ".%s_%s" % ( name.replace(".","_"), level) - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - - level = int(level) - listtype = ("square", "disc", "circle")[level % 3] - self.styledict[self.currentstyle][('','list-style-type')] = listtype - - def e_text_list_level_style_bullet(self, tag, attrs): - self.currentstyle = self.prevstyle - del self.prevstyle - - def s_text_list_level_style_number(self, tag, attrs): - name = self.tagstack.stackparent()[(STYLENS,'name')] - level = attrs[(TEXTNS,'level')] - num_format = attrs.get( (STYLENS,'name'),"1") - list_class = "%s_%s" % (name, level) - self.prevstyle = self.currentstyle - self.currentstyle = ".%s_%s" % ( name.replace(".","_"), level) - self.listtypes[list_class] = 'ol' - self.stylestack.append(self.currentstyle) - self.styledict[self.currentstyle] = {} - if num_format == "1": listtype = "decimal" - elif num_format == "I": listtype = "upper-roman" - elif num_format == "i": listtype = "lower-roman" - elif num_format == "A": listtype = "upper-alpha" - elif num_format == "a": listtype = "lower-alpha" - else: listtype = "decimal" - self.styledict[self.currentstyle][('','list-style-type')] = listtype - - def e_text_list_level_style_number(self, tag, attrs): - self.currentstyle = self.prevstyle - del self.prevstyle - - def s_text_note(self, tag, attrs): - self.writedata() - self.purgedata() - self.currentnote = self.currentnote + 1 - self.notedict[self.currentnote] = {} - self.notebody = [] - - def e_text_note(self, tag, attrs): - pass - - def collectnote(self,s): - if s != '': - self.notebody.append(s) - - def s_text_note_body(self, tag, attrs): - self._orgwfunc = self._wfunc - self._wfunc = self.collectnote - - def e_text_note_body(self, tag, attrs): - self._wfunc = self._orgwfunc - self.notedict[self.currentnote]['body'] = ''.join(self.notebody) - self.notebody = '' - del self._orgwfunc - - def e_text_note_citation(self, tag, attrs): - mark = ''.join(self.data) - self.notedict[self.currentnote]['citation'] = mark - self.opentag('a',{ 'href': "#footnote-%s" % self.currentnote }) - self.opentag('sup') -# self.writeout( escape(mark) ) - # Since HTML only knows about endnotes, there is too much risk that the - # marker is reused in the source. Therefore we force numeric markers - self.writeout(str(self.currentnote)) - self.closetag('sup') - self.closetag('a') - - def s_text_p(self, tag, attrs): - """ Paragraph - """ - htmlattrs = {} - specialtag = "p" - c = attrs.get( (TEXTNS,'style-name'), None) - if c: - c = c.replace(".","_") - specialtag = special_styles.get("P-"+c) - if specialtag is None: - specialtag = 'p' - if self.generate_css: - htmlattrs['class'] = "P-%s" % c - self.opentag(specialtag, htmlattrs) - self.purgedata() - - def e_text_p(self, tag, attrs): - """ End Paragraph - """ - specialtag = "p" - c = attrs.get( (TEXTNS,'style-name'), None) - if c: - c = c.replace(".","_") - specialtag = special_styles.get("P-"+c) - if specialtag is None: - specialtag = 'p' - self.writedata() - self.closetag(specialtag) - self.purgedata() - - def s_text_s(self, tag, attrs): - """ Generate a number of spaces. ODF has an element; HTML uses   - We use   so we can send the output through an XML parser if we desire to - """ - c = attrs.get( (TEXTNS,'c'),"1") - for x in range(int(c)): - self.writeout(' ') - - def s_text_span(self, tag, attrs): - """ The element matches the element in HTML. It is - typically used to properties of the text. - """ - self.writedata() - c = attrs.get( (TEXTNS,'style-name'), None) - htmlattrs = {} - if c: - c = c.replace(".","_") - special = special_styles.get("S-"+c) - if special is None and self.generate_css: - htmlattrs['class'] = "S-%s" % c - self.opentag('span', htmlattrs) - self.purgedata() - - def e_text_span(self, tag, attrs): - """ End the """ - self.writedata() - self.closetag('span', False) - self.purgedata() - - def s_text_tab(self, tag, attrs): - """ Move to the next tabstop. We ignore this in HTML - """ - self.writedata() - self.writeout(' ') - self.purgedata() - - def s_text_x_source(self, tag, attrs): - """ Various indexes and tables of contents. We ignore those. - """ - self.writedata() - self.purgedata() - self.s_ignorexml(tag, attrs) - - def e_text_x_source(self, tag, attrs): - """ Various indexes and tables of contents. We ignore those. - """ - self.writedata() - self.purgedata() - - -#----------------------------------------------------------------------------- -# -# Reading the file -# -#----------------------------------------------------------------------------- - - def load(self, odffile): - """ Loads a document into the parser and parses it. - The argument can either be a filename or a document in memory. - """ - self.lines = [] - self._wfunc = self._wlines - if isinstance(odffile, str): - self.document = load(odffile) - else: - self.document = odffile - self._walknode(self.document.topnode) - - def _walknode(self, node): - if node.nodeType == Node.ELEMENT_NODE: - self.startElementNS(node.qname, node.tagName, node.attributes) - for c in node.childNodes: - self._walknode(c) - self.endElementNS(node.qname, node.tagName) - if node.nodeType == Node.TEXT_NODE or node.nodeType == Node.CDATA_SECTION_NODE: - self.characters(str(node)) - - - def odf2xhtml(self, odffile): - """ Load a file and return the XHTML - """ - self.load(odffile) - return self.xhtml() - - def _wlines(self,s): - if s != '': self.lines.append(s) - - def xhtml(self): - """ Returns the xhtml - """ - return ''.join(self.lines) - - def _writecss(self, s): - if s != '': self._csslines.append(s) - - def _writenothing(self, s): - pass - - def css(self): - """ Returns the CSS content """ - self._csslines = [] - self._wfunc = self._writecss - self.generate_stylesheet() - res = ''.join(self._csslines) - self._wfunc = self._wlines - del self._csslines - return res - - def save(self, outputfile, addsuffix=False): - """ Save the HTML under the filename. - If the filename is '-' then save to stdout - We have the last style filename in self.stylefilename - """ - if outputfile == '-': - outputfp = sys.stdout - else: - if addsuffix: - outputfile = outputfile + ".html" - outputfp = file(outputfile, "w") - outputfp.write(self.xhtml().encode('us-ascii','xmlcharrefreplace')) - outputfp.close() - - -class ODF2XHTMLembedded(ODF2XHTML): - """ The ODF2XHTML parses an ODF file and produces XHTML""" - - def __init__(self, lines, generate_css=True, embedable=False): - self._resetobject() - self.lines = lines - - # Tags - self.generate_css = generate_css - 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), - (DRAWNS, 'object'): (self.s_draw_object, None), - (DRAWNS, 'object-ole'): (self.s_draw_object_ole, None), - (DRAWNS, 'text-box'): (self.s_draw_textbox, self.e_draw_textbox), -# (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-page-layout"):(self.s_style_default_page_layout, self.e_style_page_layout), -# (STYLENS, "default-page-layout"):(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), - (TEXTNS, "page-number"):(None, None), - } - diff --git a/tablib/packages/odf3/odfmanifest.py b/tablib/packages/odf3/odfmanifest.py deleted file mode 100644 index b6508c5e..00000000 --- a/tablib/packages/odf3/odfmanifest.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/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): -# - -# This script lists the content of the manifest.xml file -import zipfile -from xml.sax import make_parser,handler -from xml.sax.xmlreader import InputSource -import xml.sax.saxutils -from io import StringIO - -MANIFESTNS="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" - -#----------------------------------------------------------------------------- -# -# ODFMANIFESTHANDLER -# -#----------------------------------------------------------------------------- - -class ODFManifestHandler(handler.ContentHandler): - """ The ODFManifestHandler parses a manifest file and produces a list of - content """ - - def __init__(self): - self.manifest = {} - - # Tags - # FIXME: Also handle encryption data - self.elements = { - (MANIFESTNS, 'file-entry'): (self.s_file_entry, self.donothing), - } - - def handle_starttag(self, tag, method, attrs): - method(tag,attrs) - - def handle_endtag(self, tag, method): - method(tag) - - def startElementNS(self, tag, qname, attrs): - method = self.elements.get(tag, (None, None))[0] - if method: - self.handle_starttag(tag, method, attrs) - else: - self.unknown_starttag(tag,attrs) - - def endElementNS(self, tag, qname): - method = self.elements.get(tag, (None, None))[1] - if method: - self.handle_endtag(tag, method) - else: - self.unknown_endtag(tag) - - def unknown_starttag(self, tag, attrs): - pass - - def unknown_endtag(self, tag): - pass - - def donothing(self, tag, attrs=None): - pass - - def s_file_entry(self, tag, attrs): - m = attrs.get((MANIFESTNS, 'media-type'),"application/octet-stream") - p = attrs.get((MANIFESTNS, 'full-path')) - self.manifest[p] = { 'media-type':m, 'full-path':p } - - -#----------------------------------------------------------------------------- -# -# Reading the file -# -#----------------------------------------------------------------------------- - -def manifestlist(manifestxml): - odhandler = ODFManifestHandler() - parser = make_parser() - parser.setFeature(handler.feature_namespaces, 1) - parser.setContentHandler(odhandler) - parser.setErrorHandler(handler.ErrorHandler()) - - inpsrc = InputSource() - inpsrc.setByteStream(StringIO(manifestxml)) - parser.parse(inpsrc) - - return odhandler.manifest - -def odfmanifest(odtfile): - z = zipfile.ZipFile(odtfile) - manifest = z.read('META-INF/manifest.xml') - z.close() - return manifestlist(manifest) - -if __name__ == "__main__": - import sys - result = odfmanifest(sys.argv[1]) - for file in list(result.values()): - print("%-40s %-40s" % (file['media-type'], file['full-path'])) - diff --git a/tablib/packages/odf3/office.py b/tablib/packages/odf3/office.py deleted file mode 100644 index eca47ad2..00000000 --- a/tablib/packages/odf3/office.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- 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 OFFICENS -from .element import Element -from .draw import StyleRefElement - -# Autogenerated -def Annotation(**args): - return StyleRefElement(qname = (OFFICENS,'annotation'), **args) - -def AutomaticStyles(**args): - return Element(qname = (OFFICENS, 'automatic-styles'), **args) - -def BinaryData(**args): - return Element(qname = (OFFICENS,'binary-data'), **args) - -def Body(**args): - return Element(qname = (OFFICENS, 'body'), **args) - -def ChangeInfo(**args): - return Element(qname = (OFFICENS,'change-info'), **args) - -def Chart(**args): - return Element(qname = (OFFICENS,'chart'), **args) - -def DdeSource(**args): - return Element(qname = (OFFICENS,'dde-source'), **args) - -def Document(version="1.1", **args): - return Element(qname = (OFFICENS,'document'), version=version, **args) - -def DocumentContent(version="1.1", **args): - return Element(qname = (OFFICENS, 'document-content'), version=version, **args) - -def DocumentMeta(version="1.1", **args): - return Element(qname = (OFFICENS, 'document-meta'), version=version, **args) - -def DocumentSettings(version="1.1", **args): - return Element(qname = (OFFICENS, 'document-settings'), version=version, **args) - -def DocumentStyles(version="1.1", **args): - return Element(qname = (OFFICENS, 'document-styles'), version=version, **args) - -def Drawing(**args): - return Element(qname = (OFFICENS,'drawing'), **args) - -def EventListeners(**args): - return Element(qname = (OFFICENS,'event-listeners'), **args) - -def FontFaceDecls(**args): - return Element(qname = (OFFICENS, 'font-face-decls'), **args) - -def Forms(**args): - return Element(qname = (OFFICENS,'forms'), **args) - -def Image(**args): - return Element(qname = (OFFICENS,'image'), **args) - -def MasterStyles(**args): - return Element(qname = (OFFICENS, 'master-styles'), **args) - -def Meta(**args): - return Element(qname = (OFFICENS, 'meta'), **args) - -def Presentation(**args): - return Element(qname = (OFFICENS,'presentation'), **args) - -def Script(**args): - return Element(qname = (OFFICENS, 'script'), **args) - -def Scripts(**args): - return Element(qname = (OFFICENS, 'scripts'), **args) - -def Settings(**args): - return Element(qname = (OFFICENS, 'settings'), **args) - -def Spreadsheet(**args): - return Element(qname = (OFFICENS, 'spreadsheet'), **args) - -def Styles(**args): - return Element(qname = (OFFICENS, 'styles'), **args) - -def Text(**args): - return Element(qname = (OFFICENS, 'text'), **args) - -# Autogenerated end diff --git a/tablib/packages/odf3/opendocument.py b/tablib/packages/odf3/opendocument.py deleted file mode 100644 index 006cd089..00000000 --- a/tablib/packages/odf3/opendocument.py +++ /dev/null @@ -1,654 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2010 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__="""Use OpenDocument to generate your documents.""" - -import zipfile, time, sys, mimetypes, copy -from io import StringIO -from .namespaces import * -from . import manifest, meta -from .office import * -from . import element -from .attrconverters import make_NCName -from xml.sax.xmlreader import InputSource -from .odfmanifest import manifestlist - -__version__= TOOLSVERSION - -_XMLPROLOGUE = "\n" - -UNIXPERMS = 0o100644 << 16 # -rw-r--r-- - -IS_FILENAME = 0 -IS_IMAGE = 1 -# We need at least Python 2.2 -assert sys.version_info[0]>=2 - -#sys.setrecursionlimit(100) -#The recursion limit is set conservative so mistakes like -# s=content() s.addElement(s) won't eat up too much processor time. - -odmimetypes = { - 'application/vnd.oasis.opendocument.text': '.odt', - 'application/vnd.oasis.opendocument.text-template': '.ott', - 'application/vnd.oasis.opendocument.graphics': '.odg', - 'application/vnd.oasis.opendocument.graphics-template': '.otg', - 'application/vnd.oasis.opendocument.presentation': '.odp', - 'application/vnd.oasis.opendocument.presentation-template': '.otp', - 'application/vnd.oasis.opendocument.spreadsheet': '.ods', - 'application/vnd.oasis.opendocument.spreadsheet-template': '.ots', - 'application/vnd.oasis.opendocument.chart': '.odc', - 'application/vnd.oasis.opendocument.chart-template': '.otc', - 'application/vnd.oasis.opendocument.image': '.odi', - 'application/vnd.oasis.opendocument.image-template': '.oti', - 'application/vnd.oasis.opendocument.formula': '.odf', - 'application/vnd.oasis.opendocument.formula-template': '.otf', - 'application/vnd.oasis.opendocument.text-master': '.odm', - 'application/vnd.oasis.opendocument.text-web': '.oth', -} - -class OpaqueObject: - def __init__(self, filename, mediatype, content=None): - self.mediatype = mediatype - self.filename = filename - self.content = content - -class OpenDocument: - """ A class to hold the content of an OpenDocument document - Use the xml method to write the XML - source to the screen or to a file - d = OpenDocument(mimetype) - fd.write(d.xml()) - """ - thumbnail = None - - def __init__(self, mimetype, add_generator=True): - self.mimetype = mimetype - self.childobjects = [] - self._extra = [] - self.folder = "" # Always empty for toplevel documents - self.topnode = Document(mimetype=self.mimetype) - self.topnode.ownerDocument = self - - self.clear_caches() - - self.Pictures = {} - self.meta = Meta() - self.topnode.addElement(self.meta) - if add_generator: - self.meta.addElement(meta.Generator(text=TOOLSVERSION)) - self.scripts = Scripts() - self.topnode.addElement(self.scripts) - self.fontfacedecls = FontFaceDecls() - self.topnode.addElement(self.fontfacedecls) - self.settings = Settings() - self.topnode.addElement(self.settings) - self.styles = Styles() - self.topnode.addElement(self.styles) - self.automaticstyles = AutomaticStyles() - self.topnode.addElement(self.automaticstyles) - self.masterstyles = MasterStyles() - self.topnode.addElement(self.masterstyles) - self.body = Body() - self.topnode.addElement(self.body) - - def rebuild_caches(self, node=None): - if node is None: node = self.topnode - self.build_caches(node) - for e in node.childNodes: - if e.nodeType == element.Node.ELEMENT_NODE: - self.rebuild_caches(e) - - def clear_caches(self): - self.element_dict = {} - self._styles_dict = {} - self._styles_ooo_fix = {} - - def build_caches(self, element): - """ Called from element.py - """ - if element.qname not in self.element_dict: - self.element_dict[element.qname] = [] - self.element_dict[element.qname].append(element) - if element.qname == (STYLENS, 'style'): - self.__register_stylename(element) # Add to style dictionary - styleref = element.getAttrNS(TEXTNS,'style-name') - if styleref is not None and styleref in self._styles_ooo_fix: - element.setAttrNS(TEXTNS,'style-name', self._styles_ooo_fix[styleref]) - - def __register_stylename(self, element): - ''' Register a style. But there are three style dictionaries: - office:styles, office:automatic-styles and office:master-styles - Chapter 14 - ''' - name = element.getAttrNS(STYLENS, 'name') - if name is None: - return - if element.parentNode.qname in ((OFFICENS,'styles'), (OFFICENS,'automatic-styles')): - if name in self._styles_dict: - newname = 'M'+name # Rename style - self._styles_ooo_fix[name] = newname - # From here on all references to the old name will refer to the new one - name = newname - element.setAttrNS(STYLENS, 'name', name) - self._styles_dict[name] = element - - def toXml(self, filename=''): - xml=StringIO() - xml.write(_XMLPROLOGUE) - self.body.toXml(0, xml) - if not filename: - return xml.getvalue() - else: - f=file(filename,'w') - f.write(xml.getvalue()) - f.close() - - def xml(self): - """ Generates the full document as an XML file - Always written as a bytestream in UTF-8 encoding - """ - self.__replaceGenerator() - xml=StringIO() - xml.write(_XMLPROLOGUE) - self.topnode.toXml(0, xml) - return xml.getvalue() - - - def contentxml(self): - """ Generates the content.xml file - Always written as a bytestream in UTF-8 encoding - """ - xml=StringIO() - xml.write(_XMLPROLOGUE) - x = DocumentContent() - x.write_open_tag(0, xml) - if self.scripts.hasChildNodes(): - self.scripts.toXml(1, xml) - if self.fontfacedecls.hasChildNodes(): - self.fontfacedecls.toXml(1, xml) - a = AutomaticStyles() - stylelist = self._used_auto_styles([self.styles, self.automaticstyles, self.body]) - if len(stylelist) > 0: - a.write_open_tag(1, xml) - for s in stylelist: - s.toXml(2, xml) - a.write_close_tag(1, xml) - else: - a.toXml(1, xml) - self.body.toXml(1, xml) - x.write_close_tag(0, xml) - return xml.getvalue() - - def __manifestxml(self): - """ Generates the manifest.xml file - The self.manifest isn't avaible unless the document is being saved - """ - xml=StringIO() - xml.write(_XMLPROLOGUE) - self.manifest.toXml(0,xml) - return xml.getvalue() - - def metaxml(self): - """ Generates the meta.xml file """ - self.__replaceGenerator() - x = DocumentMeta() - x.addElement(self.meta) - xml=StringIO() - xml.write(_XMLPROLOGUE) - x.toXml(0,xml) - return xml.getvalue() - - def settingsxml(self): - """ Generates the settings.xml file """ - x = DocumentSettings() - x.addElement(self.settings) - xml=StringIO() - xml.write(_XMLPROLOGUE) - x.toXml(0,xml) - return xml.getvalue() - - def _parseoneelement(self, top, stylenamelist): - """ Finds references to style objects in master-styles - and add the style name to the style list if not already there. - Recursive - """ - for e in top.childNodes: - if e.nodeType == element.Node.ELEMENT_NODE: - for styleref in ( (DRAWNS,'style-name'), - (DRAWNS,'text-style-name'), - (PRESENTATIONNS,'style-name'), - (STYLENS,'data-style-name'), - (STYLENS,'list-style-name'), - (STYLENS,'page-layout-name'), - (STYLENS,'style-name'), - (TABLENS,'default-cell-style-name'), - (TABLENS,'style-name'), - (TEXTNS,'style-name') ): - if e.getAttrNS(styleref[0],styleref[1]): - stylename = e.getAttrNS(styleref[0],styleref[1]) - if stylename not in stylenamelist: - stylenamelist.append(stylename) - stylenamelist = self._parseoneelement(e, stylenamelist) - return stylenamelist - - def _used_auto_styles(self, segments): - """ Loop through the masterstyles elements, and find the automatic - styles that are used. These will be added to the automatic-styles - element in styles.xml - """ - stylenamelist = [] - for top in segments: - stylenamelist = self._parseoneelement(top, stylenamelist) - stylelist = [] - for e in self.automaticstyles.childNodes: - if e.getAttrNS(STYLENS,'name') in stylenamelist: - stylelist.append(e) - return stylelist - - def stylesxml(self): - """ Generates the styles.xml file """ - xml=StringIO() - xml.write(_XMLPROLOGUE) - x = DocumentStyles() - x.write_open_tag(0, xml) - if self.fontfacedecls.hasChildNodes(): - self.fontfacedecls.toXml(1, xml) - self.styles.toXml(1, xml) - a = AutomaticStyles() - a.write_open_tag(1, xml) - for s in self._used_auto_styles([self.masterstyles]): - s.toXml(2, xml) - a.write_close_tag(1, xml) - if self.masterstyles.hasChildNodes(): - self.masterstyles.toXml(1, xml) - x.write_close_tag(0, xml) - return xml.getvalue() - - def addPicture(self, filename, mediatype=None, content=None): - """ Add a picture - It uses the same convention as OOo, in that it saves the picture in - the zipfile in the subdirectory 'Pictures' - If passed a file ptr, mediatype must be set - """ - if content is None: - if mediatype is None: - mediatype, encoding = mimetypes.guess_type(filename) - if mediatype is None: - mediatype = '' - try: ext = filename[filename.rindex('.'):] - except: ext='' - else: - ext = mimetypes.guess_extension(mediatype) - manifestfn = "Pictures/%0.0f%s" % ((time.time()*10000000000), ext) - self.Pictures[manifestfn] = (IS_FILENAME, filename, mediatype) - else: - manifestfn = filename - self.Pictures[manifestfn] = (IS_IMAGE, content, mediatype) - return manifestfn - - def addPictureFromFile(self, filename, mediatype=None): - """ Add a picture - It uses the same convention as OOo, in that it saves the picture in - the zipfile in the subdirectory 'Pictures'. - If mediatype is not given, it will be guessed from the filename - extension. - """ - if mediatype is None: - mediatype, encoding = mimetypes.guess_type(filename) - if mediatype is None: - mediatype = '' - try: ext = filename[filename.rindex('.'):] - except ValueError: ext='' - else: - ext = mimetypes.guess_extension(mediatype) - manifestfn = "Pictures/%0.0f%s" % ((time.time()*10000000000), ext) - self.Pictures[manifestfn] = (IS_FILENAME, filename, mediatype) - return manifestfn - - def addPictureFromString(self, content, mediatype): - """ Add a picture - It uses the same convention as OOo, in that it saves the picture in - the zipfile in the subdirectory 'Pictures'. The content variable - is a string that contains the binary image data. The mediatype - indicates the image format. - """ - ext = mimetypes.guess_extension(mediatype) - manifestfn = "Pictures/%0.0f%s" % ((time.time()*10000000000), ext) - self.Pictures[manifestfn] = (IS_IMAGE, content, mediatype) - return manifestfn - - def addThumbnail(self, filecontent=None): - """ Add a fixed thumbnail - The thumbnail in the library is big, so this is pretty useless. - """ - if filecontent is None: - from . import thumbnail - self.thumbnail = thumbnail.thumbnail() - else: - self.thumbnail = filecontent - - def addObject(self, document, objectname=None): - """ Adds an object (subdocument). The object must be an OpenDocument class - The return value will be the folder in the zipfile the object is stored in - """ - self.childobjects.append(document) - if objectname is None: - document.folder = "%s/Object %d" % (self.folder, len(self.childobjects)) - else: - document.folder = objectname - return ".%s" % document.folder - - def _savePictures(self, object, folder): - hasPictures = False - for arcname, picturerec in list(object.Pictures.items()): - what_it_is, fileobj, mediatype = picturerec - self.manifest.addElement(manifest.FileEntry(fullpath="%s%s" % ( folder ,arcname), mediatype=mediatype)) - hasPictures = True - if what_it_is == IS_FILENAME: - self._z.write(fileobj, arcname, zipfile.ZIP_STORED) - else: - zi = zipfile.ZipInfo(str(arcname), self._now) - zi.compress_type = zipfile.ZIP_STORED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, fileobj) - # According to section 17.7.3 in ODF 1.1, the pictures folder should not have a manifest entry -# if hasPictures: -# self.manifest.addElement(manifest.FileEntry(fullpath="%sPictures/" % folder, mediatype="")) - # Look in subobjects - subobjectnum = 1 - for subobject in object.childobjects: - self._savePictures(subobject,'%sObject %d/' % (folder, subobjectnum)) - subobjectnum += 1 - - def __replaceGenerator(self): - """ Section 3.1.1: The application MUST NOT export the original identifier - belonging to the application that created the document. - """ - for m in self.meta.childNodes[:]: - if m.qname == (METANS, 'generator'): - self.meta.removeChild(m) - self.meta.addElement(meta.Generator(text=TOOLSVERSION)) - - def save(self, outputfile, addsuffix=False): - """ Save the document under the filename. - If the filename is '-' then save to stdout - """ - if outputfile == '-': - outputfp = zipfile.ZipFile(sys.stdout,"w") - else: - if addsuffix: - outputfile = outputfile + odmimetypes.get(self.mimetype,'.xxx') - outputfp = zipfile.ZipFile(outputfile, "w") - self.__zipwrite(outputfp) - outputfp.close() - - def write(self, outputfp): - """ User API to write the ODF file to an open file descriptor - Writes the ZIP format - """ - zipoutputfp = zipfile.ZipFile(outputfp,"w") - self.__zipwrite(zipoutputfp) - - def __zipwrite(self, outputfp): - """ Write the document to an open file pointer - This is where the real work is done - """ - self._z = outputfp - self._now = time.localtime()[:6] - self.manifest = manifest.Manifest() - - # Write mimetype - zi = zipfile.ZipInfo('mimetype', self._now) - zi.compress_type = zipfile.ZIP_STORED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, self.mimetype) - - self._saveXmlObjects(self,"") - - # Write pictures - self._savePictures(self,"") - - # Write the thumbnail - if self.thumbnail is not None: - self.manifest.addElement(manifest.FileEntry(fullpath="Thumbnails/", mediatype='')) - self.manifest.addElement(manifest.FileEntry(fullpath="Thumbnails/thumbnail.png", mediatype='')) - zi = zipfile.ZipInfo("Thumbnails/thumbnail.png", self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, self.thumbnail) - - # Write any extra files - for op in self._extra: - if op.filename == "META-INF/documentsignatures.xml": continue # Don't save signatures - self.manifest.addElement(manifest.FileEntry(fullpath=op.filename, mediatype=op.mediatype)) - zi = zipfile.ZipInfo(op.filename.encode('utf-8'), self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - if op.content is not None: - self._z.writestr(zi, op.content) - # Write manifest - zi = zipfile.ZipInfo("META-INF/manifest.xml", self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, self.__manifestxml() ) - del self._z - del self._now - del self.manifest - - - def _saveXmlObjects(self, object, folder): - if self == object: - self.manifest.addElement(manifest.FileEntry(fullpath="/", mediatype=object.mimetype)) - else: - self.manifest.addElement(manifest.FileEntry(fullpath=folder, mediatype=object.mimetype)) - # Write styles - self.manifest.addElement(manifest.FileEntry(fullpath="%sstyles.xml" % folder, mediatype="text/xml")) - zi = zipfile.ZipInfo("%sstyles.xml" % folder, self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, object.stylesxml() ) - - # Write content - self.manifest.addElement(manifest.FileEntry(fullpath="%scontent.xml" % folder, mediatype="text/xml")) - zi = zipfile.ZipInfo("%scontent.xml" % folder, self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, object.contentxml() ) - - # Write settings - if object.settings.hasChildNodes(): - self.manifest.addElement(manifest.FileEntry(fullpath="%ssettings.xml" % folder, mediatype="text/xml")) - zi = zipfile.ZipInfo("%ssettings.xml" % folder, self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, object.settingsxml() ) - - # Write meta - if self == object: - self.manifest.addElement(manifest.FileEntry(fullpath="meta.xml", mediatype="text/xml")) - zi = zipfile.ZipInfo("meta.xml", self._now) - zi.compress_type = zipfile.ZIP_DEFLATED - zi.external_attr = UNIXPERMS - self._z.writestr(zi, object.metaxml() ) - - # Write subobjects - subobjectnum = 1 - for subobject in object.childobjects: - self._saveXmlObjects(subobject, '%sObject %d/' % (folder, subobjectnum)) - subobjectnum += 1 - -# Document's DOM methods - def createElement(self, element): - """ Inconvenient interface to create an element, but follows XML-DOM. - Does not allow attributes as argument, therefore can't check grammar. - """ - return element(check_grammar=False) - - def createTextNode(self, data): - """ Method to create a text node """ - return element.Text(data) - - def createCDATASection(self, data): - """ Method to create a CDATA section """ - return element.CDATASection(cdata) - - def getMediaType(self): - """ Returns the media type """ - return self.mimetype - - def getStyleByName(self, name): - """ Finds a style object based on the name """ - ncname = make_NCName(name) - if self._styles_dict == {}: - self.rebuild_caches() - return self._styles_dict.get(ncname, None) - - def getElementsByType(self, element): - """ Gets elements based on the type, which is function from text.py, draw.py etc. """ - obj = element(check_grammar=False) - if self.element_dict == {}: - self.rebuild_caches() - return self.element_dict.get(obj.qname, []) - -# Convenience functions -def OpenDocumentChart(): - """ Creates a chart document """ - doc = OpenDocument('application/vnd.oasis.opendocument.chart') - doc.chart = Chart() - doc.body.addElement(doc.chart) - return doc - -def OpenDocumentDrawing(): - """ Creates a drawing document """ - doc = OpenDocument('application/vnd.oasis.opendocument.graphics') - doc.drawing = Drawing() - doc.body.addElement(doc.drawing) - return doc - -def OpenDocumentImage(): - """ Creates an image document """ - doc = OpenDocument('application/vnd.oasis.opendocument.image') - doc.image = Image() - doc.body.addElement(doc.image) - return doc - -def OpenDocumentPresentation(): - """ Creates a presentation document """ - doc = OpenDocument('application/vnd.oasis.opendocument.presentation') - doc.presentation = Presentation() - doc.body.addElement(doc.presentation) - return doc - -def OpenDocumentSpreadsheet(): - """ Creates a spreadsheet document """ - doc = OpenDocument('application/vnd.oasis.opendocument.spreadsheet') - doc.spreadsheet = Spreadsheet() - doc.body.addElement(doc.spreadsheet) - return doc - -def OpenDocumentText(): - """ Creates a text document """ - doc = OpenDocument('application/vnd.oasis.opendocument.text') - doc.text = Text() - doc.body.addElement(doc.text) - return doc - -def OpenDocumentTextMaster(): - """ Creates a text master document """ - doc = OpenDocument('application/vnd.oasis.opendocument.text-master') - doc.text = Text() - doc.body.addElement(doc.text) - return doc - -def __loadxmlparts(z, manifest, doc, objectpath): - from .load import LoadParser - from xml.sax import make_parser, handler - - for xmlfile in (objectpath+'settings.xml', objectpath+'meta.xml', objectpath+'content.xml', objectpath+'styles.xml'): - if xmlfile not in manifest: - continue - try: - xmlpart = z.read(xmlfile) - doc._parsing = xmlfile - - parser = make_parser() - parser.setFeature(handler.feature_namespaces, 1) - parser.setContentHandler(LoadParser(doc)) - parser.setErrorHandler(handler.ErrorHandler()) - - inpsrc = InputSource() - inpsrc.setByteStream(StringIO(xmlpart)) - parser.parse(inpsrc) - del doc._parsing - except KeyError as v: pass - -def load(odffile): - """ Load an ODF file into memory - Returns a reference to the structure - """ - z = zipfile.ZipFile(odffile) - mimetype = z.read('mimetype') - doc = OpenDocument(mimetype, add_generator=False) - - # Look in the manifest file to see if which of the four files there are - manifestpart = z.read('META-INF/manifest.xml') - manifest = manifestlist(manifestpart) - __loadxmlparts(z, manifest, doc, '') - for mentry,mvalue in list(manifest.items()): - if mentry[:9] == "Pictures/" and len(mentry) > 9: - doc.addPicture(mvalue['full-path'], mvalue['media-type'], z.read(mentry)) - elif mentry == "Thumbnails/thumbnail.png": - doc.addThumbnail(z.read(mentry)) - elif mentry in ('settings.xml', 'meta.xml', 'content.xml', 'styles.xml'): - pass - # Load subobjects into structure - elif mentry[:7] == "Object " and len(mentry) < 11 and mentry[-1] == "/": - subdoc = OpenDocument(mvalue['media-type'], add_generator=False) - doc.addObject(subdoc, "/" + mentry[:-1]) - __loadxmlparts(z, manifest, subdoc, mentry) - elif mentry[:7] == "Object ": - pass # Don't load subobjects as opaque objects - else: - if mvalue['full-path'][-1] == '/': - doc._extra.append(OpaqueObject(mvalue['full-path'], mvalue['media-type'], None)) - else: - doc._extra.append(OpaqueObject(mvalue['full-path'], mvalue['media-type'], z.read(mentry))) - # Add the SUN junk here to the struct somewhere - # It is cached data, so it can be out-of-date - z.close() - b = doc.getElementsByType(Body) - if mimetype[:39] == 'application/vnd.oasis.opendocument.text': - doc.text = b[0].firstChild - elif mimetype[:43] == 'application/vnd.oasis.opendocument.graphics': - doc.graphics = b[0].firstChild - elif mimetype[:47] == 'application/vnd.oasis.opendocument.presentation': - doc.presentation = b[0].firstChild - elif mimetype[:46] == 'application/vnd.oasis.opendocument.spreadsheet': - doc.spreadsheet = b[0].firstChild - elif mimetype[:40] == 'application/vnd.oasis.opendocument.chart': - doc.chart = b[0].firstChild - elif mimetype[:40] == 'application/vnd.oasis.opendocument.image': - doc.image = b[0].firstChild - elif mimetype[:42] == 'application/vnd.oasis.opendocument.formula': - doc.formula = b[0].firstChild - return doc - -# vim: set expandtab sw=4 : diff --git a/tablib/packages/odf3/presentation.py b/tablib/packages/odf3/presentation.py deleted file mode 100644 index 71c3d833..00000000 --- a/tablib/packages/odf3/presentation.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- 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 PRESENTATIONNS -from .element import Element - -# ODF 1.0 section 9.6 and 9.7 -# Autogenerated -def AnimationGroup(**args): - return Element(qname = (PRESENTATIONNS,'animation-group'), **args) - -def Animations(**args): - return Element(qname = (PRESENTATIONNS,'animations'), **args) - -def DateTime(**args): - return Element(qname = (PRESENTATIONNS,'date-time'), **args) - -def DateTimeDecl(**args): - return Element(qname = (PRESENTATIONNS,'date-time-decl'), **args) - -def Dim(**args): - return Element(qname = (PRESENTATIONNS,'dim'), **args) - -def EventListener(**args): - return Element(qname = (PRESENTATIONNS,'event-listener'), **args) - -def Footer(**args): - return Element(qname = (PRESENTATIONNS,'footer'), **args) - -def FooterDecl(**args): - return Element(qname = (PRESENTATIONNS,'footer-decl'), **args) - -def Header(**args): - return Element(qname = (PRESENTATIONNS,'header'), **args) - -def HeaderDecl(**args): - return Element(qname = (PRESENTATIONNS,'header-decl'), **args) - -def HideShape(**args): - return Element(qname = (PRESENTATIONNS,'hide-shape'), **args) - -def HideText(**args): - return Element(qname = (PRESENTATIONNS,'hide-text'), **args) - -def Notes(**args): - return Element(qname = (PRESENTATIONNS,'notes'), **args) - -def Placeholder(**args): - return Element(qname = (PRESENTATIONNS,'placeholder'), **args) - -def Play(**args): - return Element(qname = (PRESENTATIONNS,'play'), **args) - -def Settings(**args): - return Element(qname = (PRESENTATIONNS,'settings'), **args) - -def Show(**args): - return Element(qname = (PRESENTATIONNS,'show'), **args) - -def ShowShape(**args): - return Element(qname = (PRESENTATIONNS,'show-shape'), **args) - -def ShowText(**args): - return Element(qname = (PRESENTATIONNS,'show-text'), **args) - -def Sound(**args): - return Element(qname = (PRESENTATIONNS,'sound'), **args) - diff --git a/tablib/packages/odf3/script.py b/tablib/packages/odf3/script.py deleted file mode 100644 index 210e4eb1..00000000 --- a/tablib/packages/odf3/script.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- 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 SCRIPTNS -from .element import Element - -# ODF 1.0 section 12.4.1 -# The element binds an event to a macro. - -# Autogenerated -def EventListener(**args): - return Element(qname = (SCRIPTNS,'event-listener'), **args) - diff --git a/tablib/packages/odf3/style.py b/tablib/packages/odf3/style.py deleted file mode 100644 index ebaf3fb7..00000000 --- a/tablib/packages/odf3/style.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- 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 STYLENS -from .element import Element - -def StyleElement(**args): - e = Element(**args) - if args.get('check_grammar', True) == True: - if 'displayname' not in args: - e.setAttrNS(STYLENS,'display-name', args.get('name')) - return e - -# Autogenerated -def BackgroundImage(**args): - return Element(qname = (STYLENS,'background-image'), **args) - -def ChartProperties(**args): - return Element(qname = (STYLENS,'chart-properties'), **args) - -def Column(**args): - return Element(qname = (STYLENS,'column'), **args) - -def ColumnSep(**args): - return Element(qname = (STYLENS,'column-sep'), **args) - -def Columns(**args): - return Element(qname = (STYLENS,'columns'), **args) - -def DefaultStyle(**args): - return Element(qname = (STYLENS,'default-style'), **args) - -def DrawingPageProperties(**args): - return Element(qname = (STYLENS,'drawing-page-properties'), **args) - -def DropCap(**args): - return Element(qname = (STYLENS,'drop-cap'), **args) - -def FontFace(**args): - return Element(qname = (STYLENS,'font-face'), **args) - -def Footer(**args): - return Element(qname = (STYLENS,'footer'), **args) - -def FooterLeft(**args): - return Element(qname = (STYLENS,'footer-left'), **args) - -def FooterStyle(**args): - return Element(qname = (STYLENS,'footer-style'), **args) - -def FootnoteSep(**args): - return Element(qname = (STYLENS,'footnote-sep'), **args) - -def GraphicProperties(**args): - return Element(qname = (STYLENS,'graphic-properties'), **args) - -def HandoutMaster(**args): - return Element(qname = (STYLENS,'handout-master'), **args) - -def Header(**args): - return Element(qname = (STYLENS,'header'), **args) - -def HeaderFooterProperties(**args): - return Element(qname = (STYLENS,'header-footer-properties'), **args) - -def HeaderLeft(**args): - return Element(qname = (STYLENS,'header-left'), **args) - -def HeaderStyle(**args): - return Element(qname = (STYLENS,'header-style'), **args) - -def ListLevelProperties(**args): - return Element(qname = (STYLENS,'list-level-properties'), **args) - -def Map(**args): - return Element(qname = (STYLENS,'map'), **args) - -def MasterPage(**args): - return StyleElement(qname = (STYLENS,'master-page'), **args) - -def PageLayout(**args): - return Element(qname = (STYLENS,'page-layout'), **args) - -def PageLayoutProperties(**args): - return Element(qname = (STYLENS,'page-layout-properties'), **args) - -def ParagraphProperties(**args): - return Element(qname = (STYLENS,'paragraph-properties'), **args) - -def PresentationPageLayout(**args): - return StyleElement(qname = (STYLENS,'presentation-page-layout'), **args) - -def RegionCenter(**args): - return Element(qname = (STYLENS,'region-center'), **args) - -def RegionLeft(**args): - return Element(qname = (STYLENS,'region-left'), **args) - -def RegionRight(**args): - return Element(qname = (STYLENS,'region-right'), **args) - -def RubyProperties(**args): - return Element(qname = (STYLENS,'ruby-properties'), **args) - -def SectionProperties(**args): - return Element(qname = (STYLENS,'section-properties'), **args) - -def Style(**args): - return StyleElement(qname = (STYLENS,'style'), **args) - -def TabStop(**args): - return Element(qname = (STYLENS,'tab-stop'), **args) - -def TabStops(**args): - return Element(qname = (STYLENS,'tab-stops'), **args) - -def TableCellProperties(**args): - return Element(qname = (STYLENS,'table-cell-properties'), **args) - -def TableColumnProperties(**args): - return Element(qname = (STYLENS,'table-column-properties'), **args) - -def TableProperties(**args): - return Element(qname = (STYLENS,'table-properties'), **args) - -def TableRowProperties(**args): - return Element(qname = (STYLENS,'table-row-properties'), **args) - -def TextProperties(**args): - return Element(qname = (STYLENS,'text-properties'), **args) - diff --git a/tablib/packages/odf3/svg.py b/tablib/packages/odf3/svg.py deleted file mode 100644 index 1881dbfb..00000000 --- a/tablib/packages/odf3/svg.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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 SVGNS -from .element import Element -from .draw import DrawElement - -# Autogenerated -def DefinitionSrc(**args): - return Element(qname = (SVGNS,'definition-src'), **args) - -def Desc(**args): - return Element(qname = (SVGNS,'desc'), **args) - -def FontFaceFormat(**args): - return Element(qname = (SVGNS,'font-face-format'), **args) - -def FontFaceName(**args): - return Element(qname = (SVGNS,'font-face-name'), **args) - -def FontFaceSrc(**args): - return Element(qname = (SVGNS,'font-face-src'), **args) - -def FontFaceUri(**args): - return Element(qname = (SVGNS,'font-face-uri'), **args) - -def Lineargradient(**args): - return DrawElement(qname = (SVGNS,'linearGradient'), **args) - -def Radialgradient(**args): - return DrawElement(qname = (SVGNS,'radialGradient'), **args) - -def Stop(**args): - return Element(qname = (SVGNS,'stop'), **args) - -def Title(**args): - return Element(qname = (SVGNS,'title'), **args) diff --git a/tablib/packages/odf3/table.py b/tablib/packages/odf3/table.py deleted file mode 100644 index 5d27881e..00000000 --- a/tablib/packages/odf3/table.py +++ /dev/null @@ -1,307 +0,0 @@ -# -*- 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 TABLENS -from .element import Element - - -# Autogenerated -def Body(**args): - return Element(qname = (TABLENS,'body'), **args) - -def CalculationSettings(**args): - return Element(qname = (TABLENS,'calculation-settings'), **args) - -def CellAddress(**args): - return Element(qname = (TABLENS,'cell-address'), **args) - -def CellContentChange(**args): - return Element(qname = (TABLENS,'cell-content-change'), **args) - -def CellContentDeletion(**args): - return Element(qname = (TABLENS,'cell-content-deletion'), **args) - -def CellRangeSource(**args): - return Element(qname = (TABLENS,'cell-range-source'), **args) - -def ChangeDeletion(**args): - return Element(qname = (TABLENS,'change-deletion'), **args) - -def ChangeTrackTableCell(**args): - return Element(qname = (TABLENS,'change-track-table-cell'), **args) - -def Consolidation(**args): - return Element(qname = (TABLENS,'consolidation'), **args) - -def ContentValidation(**args): - return Element(qname = (TABLENS,'content-validation'), **args) - -def ContentValidations(**args): - return Element(qname = (TABLENS,'content-validations'), **args) - -def CoveredTableCell(**args): - return Element(qname = (TABLENS,'covered-table-cell'), **args) - -def CutOffs(**args): - return Element(qname = (TABLENS,'cut-offs'), **args) - -def DataPilotDisplayInfo(**args): - return Element(qname = (TABLENS,'data-pilot-display-info'), **args) - -def DataPilotField(**args): - return Element(qname = (TABLENS,'data-pilot-field'), **args) - -def DataPilotFieldReference(**args): - return Element(qname = (TABLENS,'data-pilot-field-reference'), **args) - -def DataPilotGroup(**args): - return Element(qname = (TABLENS,'data-pilot-group'), **args) - -def DataPilotGroupMember(**args): - return Element(qname = (TABLENS,'data-pilot-group-member'), **args) - -def DataPilotGroups(**args): - return Element(qname = (TABLENS,'data-pilot-groups'), **args) - -def DataPilotLayoutInfo(**args): - return Element(qname = (TABLENS,'data-pilot-layout-info'), **args) - -def DataPilotLevel(**args): - return Element(qname = (TABLENS,'data-pilot-level'), **args) - -def DataPilotMember(**args): - return Element(qname = (TABLENS,'data-pilot-member'), **args) - -def DataPilotMembers(**args): - return Element(qname = (TABLENS,'data-pilot-members'), **args) - -def DataPilotSortInfo(**args): - return Element(qname = (TABLENS,'data-pilot-sort-info'), **args) - -def DataPilotSubtotal(**args): - return Element(qname = (TABLENS,'data-pilot-subtotal'), **args) - -def DataPilotSubtotals(**args): - return Element(qname = (TABLENS,'data-pilot-subtotals'), **args) - -def DataPilotTable(**args): - return Element(qname = (TABLENS,'data-pilot-table'), **args) - -def DataPilotTables(**args): - return Element(qname = (TABLENS,'data-pilot-tables'), **args) - -def DatabaseRange(**args): - return Element(qname = (TABLENS,'database-range'), **args) - -def DatabaseRanges(**args): - return Element(qname = (TABLENS,'database-ranges'), **args) - -def DatabaseSourceQuery(**args): - return Element(qname = (TABLENS,'database-source-query'), **args) - -def DatabaseSourceSql(**args): - return Element(qname = (TABLENS,'database-source-sql'), **args) - -def DatabaseSourceTable(**args): - return Element(qname = (TABLENS,'database-source-table'), **args) - -def DdeLink(**args): - return Element(qname = (TABLENS,'dde-link'), **args) - -def DdeLinks(**args): - return Element(qname = (TABLENS,'dde-links'), **args) - -def Deletion(**args): - return Element(qname = (TABLENS,'deletion'), **args) - -def Deletions(**args): - return Element(qname = (TABLENS,'deletions'), **args) - -def Dependencies(**args): - return Element(qname = (TABLENS,'dependencies'), **args) - -def Dependency(**args): - return Element(qname = (TABLENS,'dependency'), **args) - -def Detective(**args): - return Element(qname = (TABLENS,'detective'), **args) - -def ErrorMacro(**args): - return Element(qname = (TABLENS,'error-macro'), **args) - -def ErrorMessage(**args): - return Element(qname = (TABLENS,'error-message'), **args) - -def EvenColumns(**args): - return Element(qname = (TABLENS,'even-columns'), **args) - -def EvenRows(**args): - return Element(qname = (TABLENS,'even-rows'), **args) - -def Filter(**args): - return Element(qname = (TABLENS,'filter'), **args) - -def FilterAnd(**args): - return Element(qname = (TABLENS,'filter-and'), **args) - -def FilterCondition(**args): - return Element(qname = (TABLENS,'filter-condition'), **args) - -def FilterOr(**args): - return Element(qname = (TABLENS,'filter-or'), **args) - -def FirstColumn(**args): - return Element(qname = (TABLENS,'first-column'), **args) - -def FirstRow(**args): - return Element(qname = (TABLENS,'first-row'), **args) - -def HelpMessage(**args): - return Element(qname = (TABLENS,'help-message'), **args) - -def HighlightedRange(**args): - return Element(qname = (TABLENS,'highlighted-range'), **args) - -def Insertion(**args): - return Element(qname = (TABLENS,'insertion'), **args) - -def InsertionCutOff(**args): - return Element(qname = (TABLENS,'insertion-cut-off'), **args) - -def Iteration(**args): - return Element(qname = (TABLENS,'iteration'), **args) - -def LabelRange(**args): - return Element(qname = (TABLENS,'label-range'), **args) - -def LabelRanges(**args): - return Element(qname = (TABLENS,'label-ranges'), **args) - -def LastColumn(**args): - return Element(qname = (TABLENS,'last-column'), **args) - -def LastRow(**args): - return Element(qname = (TABLENS,'last-row'), **args) - -def Movement(**args): - return Element(qname = (TABLENS,'movement'), **args) - -def MovementCutOff(**args): - return Element(qname = (TABLENS,'movement-cut-off'), **args) - -def NamedExpression(**args): - return Element(qname = (TABLENS,'named-expression'), **args) - -def NamedExpressions(**args): - return Element(qname = (TABLENS,'named-expressions'), **args) - -def NamedRange(**args): - return Element(qname = (TABLENS,'named-range'), **args) - -def NullDate(**args): - return Element(qname = (TABLENS,'null-date'), **args) - -def OddColumns(**args): - return Element(qname = (TABLENS,'odd-columns'), **args) - -def OddRows(**args): - return Element(qname = (TABLENS,'odd-rows'), **args) - -def Operation(**args): - return Element(qname = (TABLENS,'operation'), **args) - -def Previous(**args): - return Element(qname = (TABLENS,'previous'), **args) - -def Scenario(**args): - return Element(qname = (TABLENS,'scenario'), **args) - -def Shapes(**args): - return Element(qname = (TABLENS,'shapes'), **args) - -def Sort(**args): - return Element(qname = (TABLENS,'sort'), **args) - -def SortBy(**args): - return Element(qname = (TABLENS,'sort-by'), **args) - -def SortGroups(**args): - return Element(qname = (TABLENS,'sort-groups'), **args) - -def SourceCellRange(**args): - return Element(qname = (TABLENS,'source-cell-range'), **args) - -def SourceRangeAddress(**args): - return Element(qname = (TABLENS,'source-range-address'), **args) - -def SourceService(**args): - return Element(qname = (TABLENS,'source-service'), **args) - -def SubtotalField(**args): - return Element(qname = (TABLENS,'subtotal-field'), **args) - -def SubtotalRule(**args): - return Element(qname = (TABLENS,'subtotal-rule'), **args) - -def SubtotalRules(**args): - return Element(qname = (TABLENS,'subtotal-rules'), **args) - -def Table(**args): - return Element(qname = (TABLENS,'table'), **args) - -def TableCell(**args): - return Element(qname = (TABLENS,'table-cell'), **args) - -def TableColumn(**args): - return Element(qname = (TABLENS,'table-column'), **args) - -def TableColumnGroup(**args): - return Element(qname = (TABLENS,'table-column-group'), **args) - -def TableColumns(**args): - return Element(qname = (TABLENS,'table-columns'), **args) - -def TableHeaderColumns(**args): - return Element(qname = (TABLENS,'table-header-columns'), **args) - -def TableHeaderRows(**args): - return Element(qname = (TABLENS,'table-header-rows'), **args) - -def TableRow(**args): - return Element(qname = (TABLENS,'table-row'), **args) - -def TableRowGroup(**args): - return Element(qname = (TABLENS,'table-row-group'), **args) - -def TableRows(**args): - return Element(qname = (TABLENS,'table-rows'), **args) - -def TableSource(**args): - return Element(qname = (TABLENS,'table-source'), **args) - -def TableTemplate(**args): - return Element(qname = (TABLENS,'table-template'), **args) - -def TargetRangeAddress(**args): - return Element(qname = (TABLENS,'target-range-address'), **args) - -def TrackedChanges(**args): - return Element(qname = (TABLENS,'tracked-changes'), **args) - diff --git a/tablib/packages/odf3/teletype.py b/tablib/packages/odf3/teletype.py deleted file mode 100644 index 8dc5a575..00000000 --- a/tablib/packages/odf3/teletype.py +++ /dev/null @@ -1,137 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Create and extract text from ODF, handling whitespace correctly. -# 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. - - -""" -Class for handling whitespace properly in OpenDocument. - -While it is possible to use getTextContent() and setTextContent() -to extract or create ODF content, these won't extract or create -the appropriate , , or -elements. This module takes care of that problem. -""" - -from odf.element import Node -import odf.opendocument -from odf.text import S,LineBreak,Tab - -class WhitespaceText(object): - - def __init__(self): - self.textBuffer = [] - self.spaceCount = 0 - - def addTextToElement(self, odfElement, s): - """ Process an input string, inserting - elements for '\t', - elements for '\n', and - elements for runs of more than one blank. - These will be added to the given element. - """ - i = 0 - ch = ' ' - - # When we encounter a tab or newline, we can immediately - # dump any accumulated text and then emit the appropriate - # ODF element. - # - # When we encounter a space, we add it to the text buffer, - # and then collect more spaces. If there are more spaces - # after the first one, we dump the text buffer and then - # then emit the appropriate element. - - while i < len(s): - ch = s[i] - if ch == '\t': - self._emitTextBuffer(odfElement) - odfElement.addElement(Tab()) - i += 1 - elif ch == '\n': - self._emitTextBuffer(odfElement); - odfElement.addElement(LineBreak()) - i += 1 - elif ch == ' ': - self.textBuffer.append(' ') - i += 1 - self.spaceCount = 0 - while i < len(s) and (s[i] == ' '): - self.spaceCount += 1 - i += 1 - if self.spaceCount > 0: - self._emitTextBuffer(odfElement) - self._emitSpaces(odfElement) - else: - self.textBuffer.append(ch) - i += 1 - - self._emitTextBuffer(odfElement) - - def _emitTextBuffer(self, odfElement): - """ Creates a Text Node whose contents are the current textBuffer. - Side effect: clears the text buffer. - """ - if len(self.textBuffer) > 0: - odfElement.addText(''.join(self.textBuffer)) - self.textBuffer = [] - - - def _emitSpaces(self, odfElement): - """ Creates a element for the current spaceCount. - Side effect: sets spaceCount back to zero - """ - if self.spaceCount > 0: - spaceElement = S(c=self.spaceCount) - odfElement.addElement(spaceElement) - self.spaceCount = 0 - -def addTextToElement(odfElement, s): - wst = WhitespaceText() - wst.addTextToElement(odfElement, s) - -def extractText(odfElement): - """ Extract text content from an Element, with whitespace represented - properly. Returns the text, with tabs, spaces, and newlines - correctly evaluated. This method recursively descends through the - children of the given element, accumulating text and "unwrapping" - , , and elements along the way. - """ - result = []; - - if len(odfElement.childNodes) != 0: - for child in odfElement.childNodes: - if child.nodeType == Node.TEXT_NODE: - result.append(child.data) - elif child.nodeType == Node.ELEMENT_NODE: - subElement = child - tagName = subElement.qname; - if tagName == ("urn:oasis:names:tc:opendocument:xmlns:text:1.0", "line-break"): - result.append("\n") - elif tagName == ("urn:oasis:names:tc:opendocument:xmlns:text:1.0", "tab"): - result.append("\t") - elif tagName == ("urn:oasis:names:tc:opendocument:xmlns:text:1.0", "s"): - c = subElement.getAttribute('c') - if c: - spaceCount = int(c) - else: - spaceCount = 1 - - result.append(" " * spaceCount) - else: - result.append(extractText(subElement)) - return ''.join(result) diff --git a/tablib/packages/odf3/text.py b/tablib/packages/odf3/text.py deleted file mode 100644 index 9191fb7e..00000000 --- a/tablib/packages/odf3/text.py +++ /dev/null @@ -1,562 +0,0 @@ -# -*- 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 TEXTNS -from .element import Element -from .style import StyleElement - -# Autogenerated -def A(**args): - return Element(qname = (TEXTNS,'a'), **args) - -def AlphabeticalIndex(**args): - return Element(qname = (TEXTNS,'alphabetical-index'), **args) - -def AlphabeticalIndexAutoMarkFile(**args): - return Element(qname = (TEXTNS,'alphabetical-index-auto-mark-file'), **args) - -def AlphabeticalIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'alphabetical-index-entry-template'), **args) - -def AlphabeticalIndexMark(**args): - return Element(qname = (TEXTNS,'alphabetical-index-mark'), **args) - -def AlphabeticalIndexMarkEnd(**args): - return Element(qname = (TEXTNS,'alphabetical-index-mark-end'), **args) - -def AlphabeticalIndexMarkStart(**args): - return Element(qname = (TEXTNS,'alphabetical-index-mark-start'), **args) - -def AlphabeticalIndexSource(**args): - return Element(qname = (TEXTNS,'alphabetical-index-source'), **args) - -def AuthorInitials(**args): - return Element(qname = (TEXTNS,'author-initials'), **args) - -def AuthorName(**args): - return Element(qname = (TEXTNS,'author-name'), **args) - -def Bibliography(**args): - return Element(qname = (TEXTNS,'bibliography'), **args) - -def BibliographyConfiguration(**args): - return Element(qname = (TEXTNS,'bibliography-configuration'), **args) - -def BibliographyEntryTemplate(**args): - return Element(qname = (TEXTNS,'bibliography-entry-template'), **args) - -def BibliographyMark(**args): - return Element(qname = (TEXTNS,'bibliography-mark'), **args) - -def BibliographySource(**args): - return Element(qname = (TEXTNS,'bibliography-source'), **args) - -def Bookmark(**args): - return Element(qname = (TEXTNS,'bookmark'), **args) - -def BookmarkEnd(**args): - return Element(qname = (TEXTNS,'bookmark-end'), **args) - -def BookmarkRef(**args): - return Element(qname = (TEXTNS,'bookmark-ref'), **args) - -def BookmarkStart(**args): - return Element(qname = (TEXTNS,'bookmark-start'), **args) - -def Change(**args): - return Element(qname = (TEXTNS,'change'), **args) - -def ChangeEnd(**args): - return Element(qname = (TEXTNS,'change-end'), **args) - -def ChangeStart(**args): - return Element(qname = (TEXTNS,'change-start'), **args) - -def ChangedRegion(**args): - return Element(qname = (TEXTNS,'changed-region'), **args) - -def Chapter(**args): - return Element(qname = (TEXTNS,'chapter'), **args) - -def CharacterCount(**args): - return Element(qname = (TEXTNS,'character-count'), **args) - -def ConditionalText(**args): - return Element(qname = (TEXTNS,'conditional-text'), **args) - -def CreationDate(**args): - return Element(qname = (TEXTNS,'creation-date'), **args) - -def CreationTime(**args): - return Element(qname = (TEXTNS,'creation-time'), **args) - -def Creator(**args): - return Element(qname = (TEXTNS,'creator'), **args) - -def DatabaseDisplay(**args): - return Element(qname = (TEXTNS,'database-display'), **args) - -def DatabaseName(**args): - return Element(qname = (TEXTNS,'database-name'), **args) - -def DatabaseNext(**args): - return Element(qname = (TEXTNS,'database-next'), **args) - -def DatabaseRowNumber(**args): - return Element(qname = (TEXTNS,'database-row-number'), **args) - -def DatabaseRowSelect(**args): - return Element(qname = (TEXTNS,'database-row-select'), **args) - -def Date(**args): - return Element(qname = (TEXTNS,'date'), **args) - -def DdeConnection(**args): - return Element(qname = (TEXTNS,'dde-connection'), **args) - -def DdeConnectionDecl(**args): - return Element(qname = (TEXTNS,'dde-connection-decl'), **args) - -def DdeConnectionDecls(**args): - return Element(qname = (TEXTNS,'dde-connection-decls'), **args) - -def Deletion(**args): - return Element(qname = (TEXTNS,'deletion'), **args) - -def Description(**args): - return Element(qname = (TEXTNS,'description'), **args) - -def EditingCycles(**args): - return Element(qname = (TEXTNS,'editing-cycles'), **args) - -def EditingDuration(**args): - return Element(qname = (TEXTNS,'editing-duration'), **args) - -def ExecuteMacro(**args): - return Element(qname = (TEXTNS,'execute-macro'), **args) - -def Expression(**args): - return Element(qname = (TEXTNS,'expression'), **args) - -def FileName(**args): - return Element(qname = (TEXTNS,'file-name'), **args) - -def FormatChange(**args): - return Element(qname = (TEXTNS,'format-change'), **args) - -def H(**args): - return Element(qname = (TEXTNS, 'h'), **args) - -def HiddenParagraph(**args): - return Element(qname = (TEXTNS,'hidden-paragraph'), **args) - -def HiddenText(**args): - return Element(qname = (TEXTNS,'hidden-text'), **args) - -def IllustrationIndex(**args): - return Element(qname = (TEXTNS,'illustration-index'), **args) - -def IllustrationIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'illustration-index-entry-template'), **args) - -def IllustrationIndexSource(**args): - return Element(qname = (TEXTNS,'illustration-index-source'), **args) - -def ImageCount(**args): - return Element(qname = (TEXTNS,'image-count'), **args) - -def IndexBody(**args): - return Element(qname = (TEXTNS,'index-body'), **args) - -def IndexEntryBibliography(**args): - return Element(qname = (TEXTNS,'index-entry-bibliography'), **args) - -def IndexEntryChapter(**args): - return Element(qname = (TEXTNS,'index-entry-chapter'), **args) - -def IndexEntryLinkEnd(**args): - return Element(qname = (TEXTNS,'index-entry-link-end'), **args) - -def IndexEntryLinkStart(**args): - return Element(qname = (TEXTNS,'index-entry-link-start'), **args) - -def IndexEntryPageNumber(**args): - return Element(qname = (TEXTNS,'index-entry-page-number'), **args) - -def IndexEntrySpan(**args): - return Element(qname = (TEXTNS,'index-entry-span'), **args) - -def IndexEntryTabStop(**args): - return Element(qname = (TEXTNS,'index-entry-tab-stop'), **args) - -def IndexEntryText(**args): - return Element(qname = (TEXTNS,'index-entry-text'), **args) - -def IndexSourceStyle(**args): - return Element(qname = (TEXTNS,'index-source-style'), **args) - -def IndexSourceStyles(**args): - return Element(qname = (TEXTNS,'index-source-styles'), **args) - -def IndexTitle(**args): - return Element(qname = (TEXTNS,'index-title'), **args) - -def IndexTitleTemplate(**args): - return Element(qname = (TEXTNS,'index-title-template'), **args) - -def InitialCreator(**args): - return Element(qname = (TEXTNS,'initial-creator'), **args) - -def Insertion(**args): - return Element(qname = (TEXTNS,'insertion'), **args) - -def Keywords(**args): - return Element(qname = (TEXTNS,'keywords'), **args) - -def LineBreak(**args): - return Element(qname = (TEXTNS,'line-break'), **args) - -def LinenumberingConfiguration(**args): - return Element(qname = (TEXTNS,'linenumbering-configuration'), **args) - -def LinenumberingSeparator(**args): - return Element(qname = (TEXTNS,'linenumbering-separator'), **args) - -def List(**args): - return Element(qname = (TEXTNS,'list'), **args) - -def ListHeader(**args): - return Element(qname = (TEXTNS,'list-header'), **args) - -def ListItem(**args): - return Element(qname = (TEXTNS,'list-item'), **args) - -def ListLevelStyleBullet(**args): - return Element(qname = (TEXTNS,'list-level-style-bullet'), **args) - -def ListLevelStyleImage(**args): - return Element(qname = (TEXTNS,'list-level-style-image'), **args) - -def ListLevelStyleNumber(**args): - return Element(qname = (TEXTNS,'list-level-style-number'), **args) - -def ListStyle(**args): - return StyleElement(qname = (TEXTNS,'list-style'), **args) - -def Measure(**args): - return Element(qname = (TEXTNS,'measure'), **args) - -def ModificationDate(**args): - return Element(qname = (TEXTNS,'modification-date'), **args) - -def ModificationTime(**args): - return Element(qname = (TEXTNS,'modification-time'), **args) - -def Note(**args): - return Element(qname = (TEXTNS,'note'), **args) - -def NoteBody(**args): - return Element(qname = (TEXTNS,'note-body'), **args) - -def NoteCitation(**args): - return Element(qname = (TEXTNS,'note-citation'), **args) - -def NoteContinuationNoticeBackward(**args): - return Element(qname = (TEXTNS,'note-continuation-notice-backward'), **args) - -def NoteContinuationNoticeForward(**args): - return Element(qname = (TEXTNS,'note-continuation-notice-forward'), **args) - -def NoteRef(**args): - return Element(qname = (TEXTNS,'note-ref'), **args) - -def NotesConfiguration(**args): - return Element(qname = (TEXTNS,'notes-configuration'), **args) - -def Number(**args): - return Element(qname = (TEXTNS,'number'), **args) - -def NumberedParagraph(**args): - return Element(qname = (TEXTNS,'numbered-paragraph'), **args) - -def ObjectCount(**args): - return Element(qname = (TEXTNS,'object-count'), **args) - -def ObjectIndex(**args): - return Element(qname = (TEXTNS,'object-index'), **args) - -def ObjectIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'object-index-entry-template'), **args) - -def ObjectIndexSource(**args): - return Element(qname = (TEXTNS,'object-index-source'), **args) - -def OutlineLevelStyle(**args): - return Element(qname = (TEXTNS,'outline-level-style'), **args) - -def OutlineStyle(**args): - return Element(qname = (TEXTNS,'outline-style'), **args) - -def P(**args): - return Element(qname = (TEXTNS, 'p'), **args) - -def Page(**args): - return Element(qname = (TEXTNS,'page'), **args) - -def PageContinuation(**args): - return Element(qname = (TEXTNS,'page-continuation'), **args) - -def PageCount(**args): - return Element(qname = (TEXTNS,'page-count'), **args) - -def PageNumber(**args): - return Element(qname = (TEXTNS,'page-number'), **args) - -def PageSequence(**args): - return Element(qname = (TEXTNS,'page-sequence'), **args) - -def PageVariableGet(**args): - return Element(qname = (TEXTNS,'page-variable-get'), **args) - -def PageVariableSet(**args): - return Element(qname = (TEXTNS,'page-variable-set'), **args) - -def ParagraphCount(**args): - return Element(qname = (TEXTNS,'paragraph-count'), **args) - -def Placeholder(**args): - return Element(qname = (TEXTNS,'placeholder'), **args) - -def PrintDate(**args): - return Element(qname = (TEXTNS,'print-date'), **args) - -def PrintTime(**args): - return Element(qname = (TEXTNS,'print-time'), **args) - -def PrintedBy(**args): - return Element(qname = (TEXTNS,'printed-by'), **args) - -def ReferenceMark(**args): - return Element(qname = (TEXTNS,'reference-mark'), **args) - -def ReferenceMarkEnd(**args): - return Element(qname = (TEXTNS,'reference-mark-end'), **args) - -def ReferenceMarkStart(**args): - return Element(qname = (TEXTNS,'reference-mark-start'), **args) - -def ReferenceRef(**args): - return Element(qname = (TEXTNS,'reference-ref'), **args) - -def Ruby(**args): - return Element(qname = (TEXTNS,'ruby'), **args) - -def RubyBase(**args): - return Element(qname = (TEXTNS,'ruby-base'), **args) - -def RubyText(**args): - return Element(qname = (TEXTNS,'ruby-text'), **args) - -def S(**args): - return Element(qname = (TEXTNS,'s'), **args) - -def Script(**args): - return Element(qname = (TEXTNS,'script'), **args) - -def Section(**args): - return Element(qname = (TEXTNS,'section'), **args) - -def SectionSource(**args): - return Element(qname = (TEXTNS,'section-source'), **args) - -def SenderCity(**args): - return Element(qname = (TEXTNS,'sender-city'), **args) - -def SenderCompany(**args): - return Element(qname = (TEXTNS,'sender-company'), **args) - -def SenderCountry(**args): - return Element(qname = (TEXTNS,'sender-country'), **args) - -def SenderEmail(**args): - return Element(qname = (TEXTNS,'sender-email'), **args) - -def SenderFax(**args): - return Element(qname = (TEXTNS,'sender-fax'), **args) - -def SenderFirstname(**args): - return Element(qname = (TEXTNS,'sender-firstname'), **args) - -def SenderInitials(**args): - return Element(qname = (TEXTNS,'sender-initials'), **args) - -def SenderLastname(**args): - return Element(qname = (TEXTNS,'sender-lastname'), **args) - -def SenderPhonePrivate(**args): - return Element(qname = (TEXTNS,'sender-phone-private'), **args) - -def SenderPhoneWork(**args): - return Element(qname = (TEXTNS,'sender-phone-work'), **args) - -def SenderPosition(**args): - return Element(qname = (TEXTNS,'sender-position'), **args) - -def SenderPostalCode(**args): - return Element(qname = (TEXTNS,'sender-postal-code'), **args) - -def SenderStateOrProvince(**args): - return Element(qname = (TEXTNS,'sender-state-or-province'), **args) - -def SenderStreet(**args): - return Element(qname = (TEXTNS,'sender-street'), **args) - -def SenderTitle(**args): - return Element(qname = (TEXTNS,'sender-title'), **args) - -def Sequence(**args): - return Element(qname = (TEXTNS,'sequence'), **args) - -def SequenceDecl(**args): - return Element(qname = (TEXTNS,'sequence-decl'), **args) - -def SequenceDecls(**args): - return Element(qname = (TEXTNS,'sequence-decls'), **args) - -def SequenceRef(**args): - return Element(qname = (TEXTNS,'sequence-ref'), **args) - -def SheetName(**args): - return Element(qname = (TEXTNS,'sheet-name'), **args) - -def SoftPageBreak(**args): - return Element(qname = (TEXTNS,'soft-page-break'), **args) - -def SortKey(**args): - return Element(qname = (TEXTNS,'sort-key'), **args) - -def Span(**args): - return Element(qname = (TEXTNS,'span'), **args) - -def Subject(**args): - return Element(qname = (TEXTNS,'subject'), **args) - -def Tab(**args): - return Element(qname = (TEXTNS,'tab'), **args) - -def TableCount(**args): - return Element(qname = (TEXTNS,'table-count'), **args) - -def TableFormula(**args): - return Element(qname = (TEXTNS,'table-formula'), **args) - -def TableIndex(**args): - return Element(qname = (TEXTNS,'table-index'), **args) - -def TableIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'table-index-entry-template'), **args) - -def TableIndexSource(**args): - return Element(qname = (TEXTNS,'table-index-source'), **args) - -def TableOfContent(**args): - return Element(qname = (TEXTNS,'table-of-content'), **args) - -def TableOfContentEntryTemplate(**args): - return Element(qname = (TEXTNS,'table-of-content-entry-template'), **args) - -def TableOfContentSource(**args): - return Element(qname = (TEXTNS,'table-of-content-source'), **args) - -def TemplateName(**args): - return Element(qname = (TEXTNS,'template-name'), **args) - -def TextInput(**args): - return Element(qname = (TEXTNS,'text-input'), **args) - -def Time(**args): - return Element(qname = (TEXTNS,'time'), **args) - -def Title(**args): - return Element(qname = (TEXTNS,'title'), **args) - -def TocMark(**args): - return Element(qname = (TEXTNS,'toc-mark'), **args) - -def TocMarkEnd(**args): - return Element(qname = (TEXTNS,'toc-mark-end'), **args) - -def TocMarkStart(**args): - return Element(qname = (TEXTNS,'toc-mark-start'), **args) - -def TrackedChanges(**args): - return Element(qname = (TEXTNS,'tracked-changes'), **args) - -def UserDefined(**args): - return Element(qname = (TEXTNS,'user-defined'), **args) - -def UserFieldDecl(**args): - return Element(qname = (TEXTNS,'user-field-decl'), **args) - -def UserFieldDecls(**args): - return Element(qname = (TEXTNS,'user-field-decls'), **args) - -def UserFieldGet(**args): - return Element(qname = (TEXTNS,'user-field-get'), **args) - -def UserFieldInput(**args): - return Element(qname = (TEXTNS,'user-field-input'), **args) - -def UserIndex(**args): - return Element(qname = (TEXTNS,'user-index'), **args) - -def UserIndexEntryTemplate(**args): - return Element(qname = (TEXTNS,'user-index-entry-template'), **args) - -def UserIndexMark(**args): - return Element(qname = (TEXTNS,'user-index-mark'), **args) - -def UserIndexMarkEnd(**args): - return Element(qname = (TEXTNS,'user-index-mark-end'), **args) - -def UserIndexMarkStart(**args): - return Element(qname = (TEXTNS,'user-index-mark-start'), **args) - -def UserIndexSource(**args): - return Element(qname = (TEXTNS,'user-index-source'), **args) - -def VariableDecl(**args): - return Element(qname = (TEXTNS,'variable-decl'), **args) - -def VariableDecls(**args): - return Element(qname = (TEXTNS,'variable-decls'), **args) - -def VariableGet(**args): - return Element(qname = (TEXTNS,'variable-get'), **args) - -def VariableInput(**args): - return Element(qname = (TEXTNS,'variable-input'), **args) - -def VariableSet(**args): - return Element(qname = (TEXTNS,'variable-set'), **args) - -def WordCount(**args): - return Element(qname = (TEXTNS,'word-count'), **args) - diff --git a/tablib/packages/odf3/thumbnail.py b/tablib/packages/odf3/thumbnail.py deleted file mode 100644 index d6388ccb..00000000 --- a/tablib/packages/odf3/thumbnail.py +++ /dev/null @@ -1,427 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# This contains a 128x128 px thumbnail in PNG format -# Taken from http://www.zwahlendesign.ch/en/node/20 -# openoffice_icons/openoffice_icons_linux/openoffice11.png -# License: Freeware -import base64 - -iconstr = """\ -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 -N38FAAAAAElFTkSuQmCC\ -""" - -def thumbnail(): - icon = base64.decodestring(iconstr) - return icon - -if __name__ == "__main__": - icon = thumbnail() - f = file("thumbnail.png","wb") - f.write(icon) - f.close() diff --git a/tablib/packages/odf3/userfield.py b/tablib/packages/odf3/userfield.py deleted file mode 100644 index fd36dec0..00000000 --- a/tablib/packages/odf3/userfield.py +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright (C) 2006-2009 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): Michael Howitz, gocept gmbh & co. kg -# -# $Id: userfield.py 447 2008-07-10 20:01:30Z roug $ - -"""Class to show and manipulate user fields in odf documents.""" - -import sys -import zipfile - -from odf.text import UserFieldDecl -from odf.namespaces import OFFICENS -from odf.opendocument import load - -OUTENCODING = "utf-8" - - -# OpenDocument v.1.0 section 6.7.1 -VALUE_TYPES = { - 'float': (OFFICENS, 'value'), - 'percentage': (OFFICENS, 'value'), - 'currency': (OFFICENS, 'value'), - 'date': (OFFICENS, 'date-value'), - 'time': (OFFICENS, 'time-value'), - 'boolean': (OFFICENS, 'boolean-value'), - 'string': (OFFICENS, 'string-value'), - } - - -class UserFields(object): - """List, view and manipulate user fields.""" - - # these attributes can be a filename or a file like object - src_file = None - dest_file = None - - def __init__(self, src=None, dest=None): - """Constructor - - src ... source document name, file like object or None for stdin - dest ... destination document name, file like object or None for stdout - - """ - self.src_file = src - self.dest_file = dest - self.document = None - - def loaddoc(self): - if isinstance(self.src_file, str): - # src_file is a filename, check if it is a zip-file - if not zipfile.is_zipfile(self.src_file): - raise TypeError("%s is no odt file." % self.src_file) - elif self.src_file is None: - # use stdin if no file given - self.src_file = sys.stdin - - self.document = load(self.src_file) - - def savedoc(self): - # write output - if self.dest_file is None: - # use stdout if no filename given - self.document.save('-') - else: - self.document.save(self.dest_file) - - def list_fields(self): - """List (extract) all known user-fields. - - Returns list of user-field names. - - """ - return [x[0] for x in self.list_fields_and_values()] - - def list_fields_and_values(self, field_names=None): - """List (extract) user-fields with type and value. - - field_names ... list of field names to show or None for all. - - Returns list of tuples (, , ). - - """ - self.loaddoc() - found_fields = [] - all_fields = self.document.getElementsByType(UserFieldDecl) - for f in all_fields: - value_type = f.getAttribute('valuetype') - if value_type == 'string': - value = f.getAttribute('stringvalue') - else: - value = f.getAttribute('value') - field_name = f.getAttribute('name') - - if field_names is None or field_name in field_names: - found_fields.append((field_name.encode(OUTENCODING), - value_type.encode(OUTENCODING), - value.encode(OUTENCODING))) - return found_fields - - def list_values(self, field_names): - """Extract the contents of given field names from the file. - - field_names ... list of field names - - Returns list of field values. - - """ - return [x[2] for x in self.list_fields_and_values(field_names)] - - def get(self, field_name): - """Extract the contents of this field from the file. - - Returns field value or None if field does not exist. - - """ - values = self.list_values([field_name]) - if not values: - return None - return values[0] - - def get_type_and_value(self, field_name): - """Extract the type and contents of this field from the file. - - Returns tuple (, ) or None if field does not exist. - - """ - fields = self.list_fields_and_values([field_name]) - if not fields: - return None - field_name, value_type, value = fields[0] - return value_type, value - - def update(self, data): - """Set the value of user fields. The field types will be the same. - - data ... dict, with field name as key, field value as value - - Returns None - - """ - self.loaddoc() - all_fields = self.document.getElementsByType(UserFieldDecl) - for f in all_fields: - field_name = f.getAttribute('name') - if field_name in data: - value_type = f.getAttribute('valuetype') - value = data.get(field_name) - if value_type == 'string': - f.setAttribute('stringvalue', value) - else: - f.setAttribute('value', value) - self.savedoc() - diff --git a/tablib/packages/odf3/xforms.py b/tablib/packages/odf3/xforms.py deleted file mode 100644 index bbc05acd..00000000 --- a/tablib/packages/odf3/xforms.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- 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 XFORMSNS -from .element import Element - -# ODF 1.0 section 11.2 -# XForms is designed to be embedded in another XML format. -# Autogenerated -def Model(**args): - return Element(qname = (XFORMSNS,'model'), **args) - -def Instance(**args): - return Element(qname = (XFORMSNS,'instance'), **args) - -def Bind(**args): - return Element(qname = (XFORMSNS,'bind'), **args) diff --git a/tablib/packages/ods.py b/tablib/packages/ods.py new file mode 100644 index 00000000..bcbd04ba --- /dev/null +++ b/tablib/packages/ods.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2005-2016 Entr'ouvert +# +# 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, see . + +import tempfile +import zipfile + +from tablib.packages import loxun +from tablib.compat import unicode + +OFFICE_NS = 'urn:oasis:names:tc:opendocument:xmlns:office:1.0' +TABLE_NS = 'urn:oasis:names:tc:opendocument:xmlns:table:1.0' +TEXT_NS = 'urn:oasis:names:tc:opendocument:xmlns:text:1.0' +XLINK_NS = 'http://www.w3.org/1999/xlink' +STYLE_NS = 'urn:oasis:names:tc:opendocument:xmlns:style:1.0' + + +class ODSWorkbook(object): + OPENED = 1 + CLOSED = 2 + INSHEET = 3 + INROW = 4 + + def __init__(self, output): + z = self.z = zipfile.ZipFile(output, 'w') + z.writestr('mimetype', 'application/vnd.oasis.opendocument.spreadsheet') + z.writestr('META-INF/manifest.xml', ''' + + + + + + +''') + z.writestr('styles.xml', ''' + +''') + self.content = tempfile.NamedTemporaryFile() + xml = self.xmlwriter = loxun.XmlWriter(self.content, pretty=False) + xml.addNamespace('office', OFFICE_NS) + xml.addNamespace('style', STYLE_NS) + xml.addNamespace('table', TABLE_NS) + xml.addNamespace('xlink', XLINK_NS) + xml.addNamespace('text', TEXT_NS) + # add bold style for headers + xml.startTag('office:document-content') + xml.startTag('office:automatic-styles') + xml.startTag('style:style', { + 'style:family': 'paragraph', + 'style:name': 'bold', + 'style:display-name': 'bold', + }) + xml.tag('style:text-properties', { + 'style:font-weight-complex': 'bold', + 'style:font-weight': 'bold', + 'style:font-weight-asian': 'bold' + }) + xml.endTag() + xml.endTag() + xml.startTag('office:body') + xml.startTag('office:spreadsheet') + self.status = self.OPENED + + def close(self): + assert self.status == self.OPENED + self.status = self.CLOSED + xml = self.xmlwriter + xml.endTag() + xml.endTag() + xml.endTag() + self.z.write(self.content.name, 'content.xml') + self.content.close() + self.z.close() + del self.z + del self.xmlwriter + del self.content + + def start_sheet(self, columns, title=None): + assert self.status == self.OPENED + self.status = self.INSHEET + xml = self.xmlwriter + attribs = {} + if title: + attribs['table:name'] = title + xml.startTag('table:table', attribs) + for i in range(columns): + xml.tag('table:table-column') + + def end_sheet(self): + assert self.status == self.INSHEET + self.status = self.OPENED + self.xmlwriter.endTag() + + def add_headers(self, headers): + self.add_row(headers, { + 'table:style-name': 'bold', + 'table:default-cell-style-name': 'bold', + }, hint='header') + + def add_row(self, row, attribs={}, hint=None): + self.start_row(attribs) + for cell in row: + self.add_cell(cell, hint=hint) + self.end_row() + + def start_row(self, attribs={}): + assert self.status == self.INSHEET + self.status = self.INROW + self.xmlwriter.startTag('table:table-row', attribs) + + def end_row(self): + assert self.status == self.INROW + self.status = self.INSHEET + self.xmlwriter.endTag() + + def add_cell(self, content, hint=None): + assert self.status == self.INROW + content = unicode(content) + self.xmlwriter.startTag('table:table-cell', { + 'office:value-type': 'string', + }) + self.xmlwriter.startTag('text:p') + attribs = {} + if hint == 'header': + attribs['text:style-name'] = 'bold' + self.xmlwriter.startTag('text:span', attribs) + self.xmlwriter.text(content) + self.xmlwriter.endTag() + self.xmlwriter.endTag() + self.xmlwriter.endTag() + + def __del__(self): + if getattr(self, 'content', None) is not None: + try: + self.content.close() + except: + pass