You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2020/08/12 19:48:02 UTC
[tika] 01/03: TIKA-3159 -- add detection and parser for flat ODF
files and handle macros.
This is an automated email from the ASF dual-hosted git repository.
tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git
commit 114f93e61f91e83bc029f35ccd2421bca585f91d
Author: tallison <ta...@apache.org>
AuthorDate: Wed Aug 12 14:27:19 2020 -0400
TIKA-3159 -- add detection and parser for flat ODF files and handle macros.
---
.../org/apache/tika/mime/tika-mimetypes.xml | 28 +
.../tika/parser/odf/FlatOpenDocumentParser.java | 172 +++++
.../tika/parser/odf/OpenDocumentBodyHandler.java | 623 ++++++++++++++++
.../tika/parser/odf/OpenDocumentContentParser.java | 527 +-------------
.../tika/parser/odf/OpenDocumentMacroHandler.java | 115 +++
.../tika/parser/odf/OpenDocumentMetaParser.java | 17 +-
.../services/org.apache.tika.parser.Parser | 1 +
.../org/apache/tika/parser/odf/ODFParserTest.java | 70 ++
.../resources/test-documents/testODPMacro.fodp | 781 +++++++++++++++++++++
.../resources/test-documents/testODSMacro.fods | 625 +++++++++++++++++
.../resources/test-documents/testODTMacro.fodt | 633 +++++++++++++++++
11 files changed, 3062 insertions(+), 530 deletions(-)
diff --git a/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml b/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml
index 61d07a2..8442692 100644
--- a/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml
+++ b/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml
@@ -2302,6 +2302,34 @@
<glob pattern="*.odt"/>
</mime-type>
+ <!-- can't tell from the root element whether this is fodt, fodp, etc.
+ This is a made up general mime to cover the open office flat formats.
+ Subtype detection can be done with the document:mime attribute in the root
+ element and/or file extensions fodt...-->
+ <mime-type type="application/vnd.oasis.opendocument.tika.flat.document">
+ <_comment>OpenDocument v1.0: Flat Text document</_comment>
+ <root-XML namespaceURI="urn:oasis:names:tc:opendocument:xmlns:office:1.0" localName="document"/>
+ <sub-class-of type="application/xml"/>
+ </mime-type>
+
+ <mime-type type="application/vnd.oasis.opendocument.flat.text">
+ <_comment>OpenDocument v1.0: Flat Text document</_comment>
+ <glob pattern="*.fodt"/>
+ <sub-class-of type="application/vnd.oasis.opendocument.tika.flat.document"/>
+ </mime-type>
+
+ <mime-type type="application/vnd.oasis.opendocument.flat.presentation">
+ <_comment>OpenDocument v1.0: Flat Presentation document</_comment>
+ <glob pattern="*.fodp"/>
+ <sub-class-of type="application/vnd.oasis.opendocument.tika.flat.document"/>
+ </mime-type>
+
+ <mime-type type="application/vnd.oasis.opendocument.flat.spreadsheet">
+ <_comment>OpenDocument v1.0: Flat Spreadsheet document</_comment>
+ <glob pattern="*.fods"/>
+ <sub-class-of type="application/vnd.oasis.opendocument.tika.flat.document"/>
+ </mime-type>
+
<mime-type type="application/vnd.oasis.opendocument.text-master">
<alias type="application/x-vnd.oasis.opendocument.text-master"/>
<_comment>OpenDocument v1.0: Global Text document</_comment>
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/odf/FlatOpenDocumentParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/odf/FlatOpenDocumentParser.java
new file mode 100644
index 0000000..442840c
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/odf/FlatOpenDocumentParser.java
@@ -0,0 +1,172 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.parser.odf;
+
+import org.apache.commons.io.input.CloseShieldInputStream;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.mime.MediaType;
+import org.apache.tika.parser.AbstractParser;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.sax.ContentHandlerDecorator;
+import org.apache.tika.sax.EmbeddedContentHandler;
+import org.apache.tika.sax.OfflineContentHandler;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.apache.tika.utils.XMLReaderUtils;
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+public class FlatOpenDocumentParser extends AbstractParser {
+
+ static final MediaType FLAT_OD = MediaType.application("vnd.oasis.opendocument.tika.flat.document");
+
+ static final MediaType FLAT_ODT = MediaType.application("vnd.oasis.opendocument.flat.text");
+ static final MediaType FLAT_ODP = MediaType.application("vnd.oasis.opendocument.flat.presentation");
+ static final MediaType FLAT_ODS = MediaType.application("vnd.oasis.opendocument.flat.spreadsheet");
+
+ static final MediaType ODT = MediaType.application("vnd.oasis.opendocument.text");
+ static final MediaType ODP = MediaType.application("vnd.oasis.opendocument.presentation");
+ static final MediaType ODS = MediaType.application("vnd.oasis.opendocument.spreadsheet");
+
+ private static final Set<MediaType> SUPPORTED_TYPES =
+ Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
+ FLAT_OD, FLAT_ODT, FLAT_ODP, FLAT_ODS
+ )));
+
+ @Override
+ public Set<MediaType> getSupportedTypes(ParseContext context) {
+ return SUPPORTED_TYPES;
+ }
+
+ @Override
+ public void parse(InputStream stream, ContentHandler handler,
+ Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException {
+ final XHTMLContentHandler xhtml =
+ new XHTMLContentHandler(handler, metadata);
+
+ xhtml.startDocument();
+ try {
+ ContentHandler fodHandler = getContentHandler(xhtml, metadata, context);
+ XMLReaderUtils.parseSAX(
+ new CloseShieldInputStream(stream),
+ new OfflineContentHandler(
+ new EmbeddedContentHandler(fodHandler)
+ ), context);
+ //can only detect subtype (text/pres/sheet) during parse.
+ //update it here.
+ MediaType detected = ((FlatOpenDocumentParserHandler)fodHandler).getDetectedType();
+ if (detected != null) {
+ metadata.set(Metadata.CONTENT_TYPE, detected.toString());
+ }
+ } finally {
+ xhtml.endDocument();
+ }
+ }
+
+ private ContentHandler getContentHandler(ContentHandler handler,
+ Metadata metadata, ParseContext context) {
+ return new FlatOpenDocumentParserHandler(handler, metadata, context);
+ }
+
+ private static class FlatOpenDocumentParserHandler extends ContentHandlerDecorator {
+ private static final String META = "meta";
+ private static final String BODY = "body";
+ private static final String SCRIPTS = "scripts";
+ private static final String DOCUMENT = "document";
+
+ private final Metadata metadata;
+ private final ParseContext parseContext;
+
+ private final ContentHandler defaultHandler = new DefaultHandler();
+
+ private final ContentHandler bodyHandler;
+ private final ContentHandler metadataHandler;
+ private final ContentHandler macroHandler;
+
+ private ContentHandler currentHandler = defaultHandler;
+
+ private MediaType detectedType = null;
+
+ private FlatOpenDocumentParserHandler(ContentHandler baseHandler, Metadata metadata, ParseContext parseContext) {
+ this.metadata = metadata;
+ this.parseContext = parseContext;
+ this.bodyHandler = new OpenDocumentBodyHandler(new NSNormalizerContentHandler(baseHandler), parseContext);
+ this.metadataHandler = OpenDocumentMetaParser.getContentHandler(metadata, parseContext);
+ this.macroHandler = new OpenDocumentMacroHandler(baseHandler, parseContext);
+ }
+
+ MediaType getDetectedType() {
+ return detectedType;
+ }
+ @Override
+ public void startElement(
+ String namespaceURI, String localName, String qName,
+ Attributes attrs) throws SAXException {
+
+ if (META.equals(localName)) {
+ currentHandler = metadataHandler;
+ } else if (BODY.equals(localName)) {
+ currentHandler = bodyHandler;
+ } else if (SCRIPTS.equals(localName)) {
+ currentHandler = macroHandler;
+ }
+
+ //trust the mimetype element if it exists for the subtype
+ if (DOCUMENT.equals(localName)) {
+ String mime = XMLReaderUtils.getAttrValue("mimetype", attrs);
+ if (mime != null) {
+ if (mime.equals(ODT.toString())) {
+ detectedType = FLAT_ODT;
+ } else if (mime.equals(ODP.toString())) {
+ detectedType = FLAT_ODP;
+ } else if (mime.equals(ODS.toString())) {
+ detectedType = FLAT_ODS;
+ }
+ }
+ }
+ currentHandler.startElement(namespaceURI, localName, qName, attrs);
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length)
+ throws SAXException {
+ currentHandler.characters(ch, start, length);
+ }
+
+ @Override
+ public void endElement(
+ String namespaceURI, String localName, String qName) throws SAXException {
+ if (META.equals(localName)) {
+ currentHandler = defaultHandler;
+ } else if (BODY.equals(localName)) {
+ currentHandler = defaultHandler;
+ } else if (SCRIPTS.equals(localName)) {
+ currentHandler = defaultHandler;
+ }
+ currentHandler.endElement(namespaceURI, localName, qName);
+ }
+ }
+}
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentBodyHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentBodyHandler.java
new file mode 100644
index 0000000..9d18f64
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentBodyHandler.java
@@ -0,0 +1,623 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.parser.odf;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.tika.extractor.EmbeddedDocumentExtractor;
+import org.apache.tika.extractor.EmbeddedDocumentUtil;
+import org.apache.tika.io.TikaInputStream;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.sax.ElementMappingContentHandler;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+
+import javax.xml.namespace.QName;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+
+import static org.apache.tika.sax.XHTMLContentHandler.XHTML;
+/*
+ Handler for the body element or odt flat files and content.xml of
+ traditional compressed odt files
+ */
+class OpenDocumentBodyHandler extends ElementMappingContentHandler {
+
+ private interface Style {
+ }
+
+ private static class TextStyle implements Style {
+ public boolean italic;
+ public boolean bold;
+ public boolean underlined;
+
+ @Override
+ public String toString() {
+ return "TextStyle{" +
+ "italic=" + italic +
+ ", bold=" + bold +
+ ", underlined=" + underlined +
+ '}';
+ }
+ }
+
+ private static class ListStyle implements Style {
+ public boolean ordered;
+
+ public String getTag() {
+ return ordered ? "ol" : "ul";
+ }
+ }
+
+
+ public static final String TEXT_NS =
+ "urn:oasis:names:tc:opendocument:xmlns:text:1.0";
+
+ public static final String TABLE_NS =
+ "urn:oasis:names:tc:opendocument:xmlns:table:1.0";
+
+ public static final String STYLE_NS =
+ "urn:oasis:names:tc:opendocument:xmlns:style:1.0";
+
+ public static final String FORMATTING_OBJECTS_NS =
+ "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0";
+
+ public static final String OFFICE_NS =
+ "urn:oasis:names:tc:opendocument:xmlns:office:1.0";
+
+ public static final String SVG_NS =
+ "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0";
+
+ public static final String PRESENTATION_NS =
+ "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0";
+
+ public static final String DRAW_NS =
+ "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0";
+
+ public static final String XLINK_NS = "http://www.w3.org/1999/xlink";
+
+ private static final String BINARY_DATA = "binary-data";
+
+ protected static final char[] TAB = new char[]{'\t'};
+
+ private static final Attributes EMPTY_ATTRIBUTES = new AttributesImpl();
+
+ /**
+ * Mappings between ODF tag names and XHTML tag names
+ * (including attributes). All other tag names/attributes are ignored
+ * and left out from event stream.
+ */
+ private static final HashMap<QName, TargetElement> MAPPINGS =
+ new HashMap<QName, TargetElement>();
+
+ static {
+ // general mappings of text:-tags
+ MAPPINGS.put(
+ new QName(TEXT_NS, "p"),
+ new TargetElement(XHTML, "p"));
+ // text:h-tags are mapped specifically in startElement/endElement
+ MAPPINGS.put(
+ new QName(TEXT_NS, "line-break"),
+ new TargetElement(XHTML, "br"));
+ MAPPINGS.put(
+ new QName(TEXT_NS, "list-item"),
+ new TargetElement(XHTML, "li"));
+ MAPPINGS.put(
+ new QName(TEXT_NS, "note"),
+ new TargetElement(XHTML, "span"));
+ MAPPINGS.put(
+ new QName(OFFICE_NS, "annotation"),
+ new TargetElement(XHTML, "span"));
+ MAPPINGS.put(
+ new QName(PRESENTATION_NS, "notes"),
+ new TargetElement(XHTML, "span"));
+ MAPPINGS.put(
+ new QName(DRAW_NS, "object"),
+ new TargetElement(XHTML, "object"));
+ MAPPINGS.put(
+ new QName(DRAW_NS, "text-box"),
+ new TargetElement(XHTML, "div"));
+ MAPPINGS.put(
+ new QName(SVG_NS, "title"),
+ new TargetElement(XHTML, "span"));
+ MAPPINGS.put(
+ new QName(SVG_NS, "desc"),
+ new TargetElement(XHTML, "span"));
+ MAPPINGS.put(
+ new QName(TEXT_NS, "span"),
+ new TargetElement(XHTML, "span"));
+
+ final HashMap<QName, QName> aAttsMapping =
+ new HashMap<QName, QName>();
+ aAttsMapping.put(
+ new QName(XLINK_NS, "href"),
+ new QName("href"));
+ aAttsMapping.put(
+ new QName(XLINK_NS, "title"),
+ new QName("title"));
+ MAPPINGS.put(
+ new QName(TEXT_NS, "a"),
+ new TargetElement(XHTML, "a", aAttsMapping));
+
+ // create HTML tables from table:-tags
+ MAPPINGS.put(
+ new QName(TABLE_NS, "table"),
+ new TargetElement(XHTML, "table"));
+ // repeating of rows is ignored; for columns, see below!
+ MAPPINGS.put(
+ new QName(TABLE_NS, "table-row"),
+ new TargetElement(XHTML, "tr"));
+ // special mapping for rowspan/colspan attributes
+ final HashMap<QName, QName> tableCellAttsMapping =
+ new HashMap<QName, QName>();
+ tableCellAttsMapping.put(
+ new QName(TABLE_NS, "number-columns-spanned"),
+ new QName("colspan"));
+ tableCellAttsMapping.put(
+ new QName(TABLE_NS, "number-rows-spanned"),
+ new QName("rowspan"));
+ /* TODO: The following is not correct, the cell should be repeated not spanned!
+ * Code generates a HTML cell, spanning all repeated columns, to make the cell look correct.
+ * Problems may occur when both spanning and repeating is given, which is not allowed by spec.
+ * Cell spanning instead of repeating is not a problem, because OpenOffice uses it
+ * only for empty cells.
+ */
+ tableCellAttsMapping.put(
+ new QName(TABLE_NS, "number-columns-repeated"),
+ new QName("colspan"));
+ MAPPINGS.put(
+ new QName(TABLE_NS, "table-cell"),
+ new TargetElement(XHTML, "td", tableCellAttsMapping));
+ }
+
+ private static final char[] SPACE = new char[]{' '};
+ private static final String CLASS = "class";
+ private static final Attributes ANNOTATION_ATTRIBUTES = buildAttributes(CLASS, "annotation");
+ private static final Attributes NOTE_ATTRIBUTES = buildAttributes(CLASS, "note");
+ private static final Attributes NOTES_ATTRIBUTES = buildAttributes(CLASS, "notes");
+
+ private static Attributes buildAttributes(String key, String value) {
+ AttributesImpl attrs = new AttributesImpl();
+ attrs.addAttribute("", key, key, "CDATA", value);
+ return attrs;
+ }
+
+ private final ContentHandler handler;
+ private final ParseContext parseContext;
+ private EmbeddedDocumentExtractor embeddedDocumentExtractor;
+
+ private StringBuilder base64BinaryDataBuffer = new StringBuilder();
+ private final BitSet textNodeStack = new BitSet();
+ private int nodeDepth = 0;
+ private int completelyFiltered = 0;
+ private Stack<String> headingStack = new Stack<String>();
+ private Map<String, TextStyle> paragraphTextStyleMap = new HashMap<String, TextStyle>();
+ private Map<String, TextStyle> textStyleMap = new HashMap<String, TextStyle>();
+ private Map<String, ListStyle> listStyleMap = new HashMap<String, ListStyle>();
+ private String currParagraphStyleName; //paragraph style name
+ private TextStyle currTextStyle; //this is the text style for particular spans/paragraphs
+ private String currTextStyleName;
+
+ private Stack<ListStyle> listStyleStack = new Stack<ListStyle>();
+ private ListStyle listStyle;
+
+ // True if we are currently in the named style:
+ private boolean curUnderlined;
+ private boolean curBold;
+ private boolean curItalic;
+
+ //have we written the start style tags
+ //yet for the current text style
+ boolean hasWrittenStartStyleTags = false;
+
+ //if we're in a binary-data tag
+ boolean inBinaryData = false;
+
+ private int pDepth = 0; //<p> can appear inside comments and other things that are already inside <p>
+ //we need to track our pDepth and only output <p> if we're at the main level
+
+
+
+ OpenDocumentBodyHandler(ContentHandler handler, ParseContext parseContext) {
+ super(handler, MAPPINGS);
+ this.handler = handler;
+ this.parseContext = parseContext;
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length)
+ throws SAXException {
+ if (inBinaryData) {
+ base64BinaryDataBuffer.append(ch, start, length);
+ return;
+ }
+ // only forward content of tags from text:-namespace
+ if (completelyFiltered == 0 && nodeDepth > 0
+ && textNodeStack.get(nodeDepth - 1)) {
+ if (!hasWrittenStartStyleTags) {
+ updateStyleTags();
+ hasWrittenStartStyleTags = true;
+ }
+ super.characters(ch, start, length);
+ }
+ }
+
+ // helper for checking tags which need complete filtering
+ // (with sub-tags)
+ private boolean needsCompleteFiltering(
+ String namespaceURI, String localName) {
+ if (TEXT_NS.equals(namespaceURI)) {
+ return localName.endsWith("-template")
+ || localName.endsWith("-style");
+ }
+ return TABLE_NS.equals(namespaceURI) && "covered-table-cell".equals(localName);
+ }
+
+ // map the heading level to <hX> HTML tags
+ private String getXHTMLHeaderTagName(Attributes atts) {
+ String depthStr = atts.getValue(TEXT_NS, "outline-level");
+ if (depthStr == null) {
+ return "h1";
+ }
+
+ int depth = Integer.parseInt(depthStr);
+ if (depth >= 6) {
+ return "h6";
+ } else if (depth <= 1) {
+ return "h1";
+ } else {
+ return "h" + depth;
+ }
+ }
+
+ /**
+ * Check if a node is a text node
+ */
+ private boolean isTextNode(String namespaceURI, String localName) {
+ if (TEXT_NS.equals(namespaceURI) && !localName.equals("page-number") && !localName.equals("page-count")) {
+ return true;
+ }
+ if (SVG_NS.equals(namespaceURI)) {
+ return "title".equals(localName) ||
+ "desc".equals(localName);
+ }
+ return false;
+ }
+
+ private void startList(String name) throws SAXException {
+ String elementName = "ul";
+ if (name != null) {
+ ListStyle style = listStyleMap.get(name);
+ elementName = style != null ? style.getTag() : "ul";
+ listStyleStack.push(style);
+ }
+ handler.startElement(XHTML, elementName, elementName, EMPTY_ATTRIBUTES);
+ }
+
+ private void endList() throws SAXException {
+ String elementName = "ul";
+ if (!listStyleStack.isEmpty()) {
+ ListStyle style = listStyleStack.pop();
+ elementName = style != null ? style.getTag() : "ul";
+ }
+ handler.endElement(XHTML, elementName, elementName);
+ }
+
+ private void startSpan(String name) throws SAXException {
+ if (name == null) {
+ return;
+ }
+ currTextStyle = textStyleMap.get(name);
+ hasWrittenStartStyleTags = false;
+ }
+
+ private void startParagraph(String styleName) throws SAXException {
+ if (pDepth == 0) {
+ handler.startElement(XHTML, "p", "p", EMPTY_ATTRIBUTES);
+ if (styleName != null) {
+ currTextStyle = paragraphTextStyleMap.get(styleName);
+ }
+ hasWrittenStartStyleTags = false;
+ } else {
+ handler.characters(SPACE, 0, SPACE.length);
+ }
+ pDepth++;
+ }
+
+ private void endParagraph() throws SAXException {
+ closeStyleTags();
+ if (pDepth == 1) {
+ handler.endElement(XHTML, "p", "p");
+ } else {
+ handler.characters(SPACE, 0, SPACE.length);
+ }
+ pDepth--;
+
+ }
+
+ private void updateStyleTags() throws SAXException {
+
+ if (currTextStyle == null) {
+ closeStyleTags();
+ return;
+ }
+ if (currTextStyle.bold != curBold) {
+ // Enforce nesting -- must close s and i tags
+ if (curUnderlined) {
+ handler.endElement(XHTML, "u", "u");
+ curUnderlined = false;
+ }
+ if (curItalic) {
+ handler.endElement(XHTML, "i", "i");
+ curItalic = false;
+ }
+ if (currTextStyle.bold) {
+ handler.startElement(XHTML, "b", "b", EMPTY_ATTRIBUTES);
+ } else {
+ handler.endElement(XHTML, "b", "b");
+ }
+ curBold = currTextStyle.bold;
+ }
+
+ if (currTextStyle.italic != curItalic) {
+ // Enforce nesting -- must close s tag
+ if (curUnderlined) {
+ handler.endElement(XHTML, "u", "u");
+ curUnderlined = false;
+ }
+ if (currTextStyle.italic) {
+ handler.startElement(XHTML, "i", "i", EMPTY_ATTRIBUTES);
+ } else {
+ handler.endElement(XHTML, "i", "i");
+ }
+ curItalic = currTextStyle.italic;
+ }
+
+ if (currTextStyle.underlined != curUnderlined) {
+ if (currTextStyle.underlined) {
+ handler.startElement(XHTML, "u", "u", EMPTY_ATTRIBUTES);
+ } else {
+ handler.endElement(XHTML, "u", "u");
+ }
+ curUnderlined = currTextStyle.underlined;
+ }
+ }
+
+ private void endSpan() throws SAXException {
+ updateStyleTags();
+ }
+
+ private void closeStyleTags() throws SAXException {
+ // Close any still open style tags
+ if (curUnderlined) {
+ handler.endElement(XHTML, "u", "u");
+ curUnderlined = false;
+ }
+ if (curItalic) {
+ handler.endElement(XHTML, "i", "i");
+ curItalic = false;
+ }
+ if (curBold) {
+ handler.endElement(XHTML, "b", "b");
+ curBold = false;
+ }
+ currTextStyle = null;
+ hasWrittenStartStyleTags = false;
+ }
+
+ @Override
+ public void startElement(
+ String namespaceURI, String localName, String qName,
+ Attributes attrs) throws SAXException {
+
+ if (BINARY_DATA.equals(localName)) {
+ inBinaryData = true;
+ return;
+ }
+ // keep track of current node type. If it is a text node,
+ // a bit at the current depth its set in textNodeStack.
+ // characters() checks the top bit to determine, if the
+ // actual node is a text node to print out nodeDepth contains
+ // the depth of the current node and also marks top of stack.
+ assert nodeDepth >= 0;
+
+ // Set styles
+ if (STYLE_NS.equals(namespaceURI) && "style".equals(localName)) {
+ String family = attrs.getValue(STYLE_NS, "family");
+ if ("text".equals(family)) {
+ currTextStyle = new TextStyle();
+ currTextStyleName = attrs.getValue(STYLE_NS, "name");
+ } else if ("paragraph".equals(family)) {
+ currTextStyle = new TextStyle();
+ currParagraphStyleName = attrs.getValue(STYLE_NS, "name");
+ }
+ } else if (TEXT_NS.equals(namespaceURI) && "list-style".equals(localName)) {
+ listStyle = new ListStyle();
+ String name = attrs.getValue(STYLE_NS, "name");
+ listStyleMap.put(name, listStyle);
+ } else if (currTextStyle != null && STYLE_NS.equals(namespaceURI)
+ && "text-properties".equals(localName)) {
+ String fontStyle = attrs.getValue(FORMATTING_OBJECTS_NS, "font-style");
+ if ("italic".equals(fontStyle) || "oblique".equals(fontStyle)) {
+ currTextStyle.italic = true;
+ }
+ String fontWeight = attrs.getValue(FORMATTING_OBJECTS_NS, "font-weight");
+ if ("bold".equals(fontWeight) || "bolder".equals(fontWeight)
+ || (fontWeight != null && Character.isDigit(fontWeight.charAt(0))
+ && Integer.valueOf(fontWeight) > 500)) {
+ currTextStyle.bold = true;
+ }
+ String underlineStyle = attrs.getValue(STYLE_NS, "text-underline-style");
+ if (underlineStyle != null && !underlineStyle.equals("none")) {
+ currTextStyle.underlined = true;
+ }
+ } else if (listStyle != null && TEXT_NS.equals(namespaceURI)) {
+ if ("list-level-style-bullet".equals(localName)) {
+ listStyle.ordered = false;
+ } else if ("list-level-style-number".equals(localName)) {
+ listStyle.ordered = true;
+ }
+ }
+
+ textNodeStack.set(nodeDepth++,
+ isTextNode(namespaceURI, localName));
+ // filter *all* content of some tags
+ assert completelyFiltered >= 0;
+
+ if (needsCompleteFiltering(namespaceURI, localName)) {
+ completelyFiltered++;
+ }
+ // call next handler if no filtering
+ if (completelyFiltered == 0) {
+ // special handling of text:h, that are directly passed
+ // to incoming handler
+ if (TEXT_NS.equals(namespaceURI) && "h".equals(localName)) {
+ final String el = headingStack.push(getXHTMLHeaderTagName(attrs));
+ handler.startElement(XHTMLContentHandler.XHTML, el, el, EMPTY_ATTRIBUTES);
+ } else if (TEXT_NS.equals(namespaceURI) && "list".equals(localName)) {
+ startList(attrs.getValue(TEXT_NS, "style-name"));
+ } else if (TEXT_NS.equals(namespaceURI) && "span".equals(localName)) {
+ startSpan(attrs.getValue(TEXT_NS, "style-name"));
+ } else if (TEXT_NS.equals(namespaceURI) && "p".equals(localName)) {
+ startParagraph(attrs.getValue(TEXT_NS, "style-name"));
+ } else if (TEXT_NS.equals(namespaceURI) && "s".equals(localName)) {
+ handler.characters(SPACE, 0, 1);
+ } else if ("annotation".equals(localName)) {
+ closeStyleTags();
+ handler.startElement(XHTML, "span", "p", ANNOTATION_ATTRIBUTES);
+ } else if ("note".equals(localName)) {
+ closeStyleTags();
+ handler.startElement(XHTML, "span", "p", NOTE_ATTRIBUTES);
+ } else if ("notes".equals(localName)) {
+ closeStyleTags();
+ handler.startElement(XHTML, "span", "p", NOTES_ATTRIBUTES);
+ } else {
+ super.startElement(namespaceURI, localName, qName, attrs);
+ }
+ }
+ }
+
+ @Override
+ public void endElement(
+ String namespaceURI, String localName, String qName)
+ throws SAXException {
+ if (BINARY_DATA.equals(localName)) {
+ inBinaryData = false;
+ try {
+ processBinaryData();
+ } catch (IOException e) {
+ throw new SAXException(e);
+ }
+ return;
+ }
+ if (STYLE_NS.equals(namespaceURI) && "style".equals(localName)) {
+ if (currTextStyle != null && currTextStyleName != null) {
+ textStyleMap.put(currTextStyleName, currTextStyle);
+ currTextStyleName = null;
+ currTextStyle = null;
+ } else if (currTextStyle != null && currParagraphStyleName != null) {
+ paragraphTextStyleMap.put(currParagraphStyleName, currTextStyle);
+ currParagraphStyleName = null;
+ currTextStyle = null;
+ }
+ } else if (TEXT_NS.equals(namespaceURI) && "list-style".equals(localName)) {
+ listStyle = null;
+ }
+
+ // call next handler if no filtering
+ if (completelyFiltered == 0) {
+ // special handling of text:h, that are directly passed
+ // to incoming handler
+ if (TEXT_NS.equals(namespaceURI) && "h".equals(localName)) {
+ final String el = headingStack.pop();
+ handler.endElement(namespaceURI, el, el);
+ } else if (TEXT_NS.equals(namespaceURI) && "list".equals(localName)) {
+ endList();
+ } else if (TEXT_NS.equals(namespaceURI) && "span".equals(localName)) {
+ currTextStyle = null;
+ hasWrittenStartStyleTags = false;
+ } else if (TEXT_NS.equals(namespaceURI) && "p".equals(localName)) {
+ endParagraph();
+ } else if ("annotation".equals(localName) || "note".equals(localName) ||
+ "notes".equals(localName)) {
+ closeStyleTags();
+ handler.endElement(namespaceURI, localName, localName);
+ } else {
+ super.endElement(namespaceURI, localName, qName);
+ }
+
+ // special handling of tabulators
+ if (TEXT_NS.equals(namespaceURI)
+ && ("tab-stop".equals(localName)
+ || "tab".equals(localName))) {
+ this.characters(TAB, 0, TAB.length);
+ }
+ }
+
+ // revert filter for *all* content of some tags
+ if (needsCompleteFiltering(namespaceURI, localName)) {
+ completelyFiltered--;
+ }
+ assert completelyFiltered >= 0;
+
+ // reduce current node depth
+ nodeDepth--;
+ assert nodeDepth >= 0;
+ }
+
+ private void processBinaryData() throws IOException, SAXException {
+
+ //TODO: figure out whether we're in an inline image or a regular
+ //attachment and add that info to the embedded metadata
+
+ byte[] bytes = Base64.decodeBase64(base64BinaryDataBuffer.toString());
+ //clear state before parsing
+ base64BinaryDataBuffer.setLength(0);
+ inBinaryData = false;
+
+ if (embeddedDocumentExtractor == null) {
+ embeddedDocumentExtractor = EmbeddedDocumentUtil.getEmbeddedDocumentExtractor(parseContext);
+ }
+ Metadata embeddedMetadata = new Metadata();
+ if (embeddedDocumentExtractor.shouldParseEmbedded(embeddedMetadata)) {
+ try (InputStream is = TikaInputStream.get(bytes)) {
+ embeddedDocumentExtractor.parseEmbedded(
+ is, handler, embeddedMetadata, false
+ );
+ }
+ }
+ }
+
+ @Override
+ public void startPrefixMapping(String prefix, String uri) {
+ // remove prefix mappings as they should not occur in XHTML
+ }
+
+ @Override
+ public void endPrefixMapping(String prefix) {
+ // remove prefix mappings as they should not occur in XHTML
+ }
+
+
+}
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
index 2e40c68..225eb85 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
@@ -49,531 +49,6 @@ import static org.apache.tika.sax.XHTMLContentHandler.XHTML;
* Parser for ODF <code>content.xml</code> files.
*/
public class OpenDocumentContentParser extends AbstractParser {
- private interface Style {
- }
-
- private static class TextStyle implements Style {
- public boolean italic;
- public boolean bold;
- public boolean underlined;
-
- @Override
- public String toString() {
- return "TextStyle{" +
- "italic=" + italic +
- ", bold=" + bold +
- ", underlined=" + underlined +
- '}';
- }
- }
-
- private static class ListStyle implements Style {
- public boolean ordered;
-
- public String getTag() {
- return ordered ? "ol" : "ul";
- }
- }
-
- private static final class OpenDocumentElementMappingContentHandler extends
- ElementMappingContentHandler {
- private static final char[] SPACE = new char[]{ ' '};
- private static final String CLASS = "class";
- private static final Attributes ANNOTATION_ATTRIBUTES = buildAttributes(CLASS, "annotation");
- private static final Attributes NOTE_ATTRIBUTES = buildAttributes(CLASS, "note");
- private static final Attributes NOTES_ATTRIBUTES = buildAttributes(CLASS, "notes");
-
- private static Attributes buildAttributes(String key, String value) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", key, key, "CDATA", value);
- return attrs;
- }
-
- private final ContentHandler handler;
- private final BitSet textNodeStack = new BitSet();
- private int nodeDepth = 0;
- private int completelyFiltered = 0;
- private Stack<String> headingStack = new Stack<String>();
- private Map<String, TextStyle> paragraphTextStyleMap = new HashMap<String, TextStyle>();
- private Map<String, TextStyle> textStyleMap = new HashMap<String, TextStyle>();
- private Map<String, ListStyle> listStyleMap = new HashMap<String, ListStyle>();
- private String currParagraphStyleName; //paragraph style name
- private TextStyle currTextStyle; //this is the text style for particular spans/paragraphs
- private String currTextStyleName;
-
- private Stack<ListStyle> listStyleStack = new Stack<ListStyle>();
- private ListStyle listStyle;
-
- // True if we are currently in the named style:
- private boolean curUnderlined;
- private boolean curBold;
- private boolean curItalic;
-
- //have we written the start style tags
- //yet for the current text style
- boolean hasWrittenStartStyleTags = false;
-
- private int pDepth = 0; //<p> can appear inside comments and other things that are already inside <p>
- //we need to track our pDepth and only output <p> if we're at the main level
-
-
- private OpenDocumentElementMappingContentHandler(ContentHandler handler,
- Map<QName, TargetElement> mappings) {
- super(handler, mappings);
- this.handler = handler;
- }
-
- @Override
- public void characters(char[] ch, int start, int length)
- throws SAXException {
- // only forward content of tags from text:-namespace
- if (completelyFiltered == 0 && nodeDepth > 0
- && textNodeStack.get(nodeDepth - 1)) {
- if (!hasWrittenStartStyleTags) {
- updateStyleTags();
- hasWrittenStartStyleTags = true;
- }
- super.characters(ch, start, length);
- }
- }
-
- // helper for checking tags which need complete filtering
- // (with sub-tags)
- private boolean needsCompleteFiltering(
- String namespaceURI, String localName) {
- if (TEXT_NS.equals(namespaceURI)) {
- return localName.endsWith("-template")
- || localName.endsWith("-style");
- }
- return TABLE_NS.equals(namespaceURI) && "covered-table-cell".equals(localName);
- }
-
- // map the heading level to <hX> HTML tags
- private String getXHTMLHeaderTagName(Attributes atts) {
- String depthStr = atts.getValue(TEXT_NS, "outline-level");
- if (depthStr == null) {
- return "h1";
- }
-
- int depth = Integer.parseInt(depthStr);
- if (depth >= 6) {
- return "h6";
- } else if (depth <= 1) {
- return "h1";
- } else {
- return "h" + depth;
- }
- }
-
- /**
- * Check if a node is a text node
- */
- private boolean isTextNode(String namespaceURI, String localName) {
- if (TEXT_NS.equals(namespaceURI) && !localName.equals("page-number") && !localName.equals("page-count")) {
- return true;
- }
- if (SVG_NS.equals(namespaceURI)) {
- return "title".equals(localName) ||
- "desc".equals(localName);
- }
- return false;
- }
-
- private void startList(String name) throws SAXException {
- String elementName = "ul";
- if (name != null) {
- ListStyle style = listStyleMap.get(name);
- elementName = style != null ? style.getTag() : "ul";
- listStyleStack.push(style);
- }
- handler.startElement(XHTML, elementName, elementName, EMPTY_ATTRIBUTES);
- }
-
- private void endList() throws SAXException {
- String elementName = "ul";
- if (!listStyleStack.isEmpty()) {
- ListStyle style = listStyleStack.pop();
- elementName = style != null ? style.getTag() : "ul";
- }
- handler.endElement(XHTML, elementName, elementName);
- }
-
- private void startSpan(String name) throws SAXException {
- if (name == null) {
- return;
- }
- currTextStyle = textStyleMap.get(name);
- hasWrittenStartStyleTags = false;
- }
-
- private void startParagraph(String styleName) throws SAXException {
- if (pDepth == 0) {
- handler.startElement(XHTML, "p", "p", EMPTY_ATTRIBUTES);
- if (styleName != null) {
- currTextStyle = paragraphTextStyleMap.get(styleName);
- }
- hasWrittenStartStyleTags = false;
- } else {
- handler.characters(SPACE, 0, SPACE.length);
- }
- pDepth++;
- }
-
- private void endParagraph() throws SAXException {
- closeStyleTags();
- if (pDepth == 1) {
- handler.endElement(XHTML, "p", "p");
- } else {
- handler.characters(SPACE, 0, SPACE.length);
- }
- pDepth--;
-
- }
-
- private void updateStyleTags() throws SAXException {
-
- if (currTextStyle == null) {
- closeStyleTags();
- return;
- }
- if (currTextStyle.bold != curBold) {
- // Enforce nesting -- must close s and i tags
- if (curUnderlined) {
- handler.endElement(XHTML, "u", "u");
- curUnderlined = false;
- }
- if (curItalic) {
- handler.endElement(XHTML, "i", "i");
- curItalic = false;
- }
- if (currTextStyle.bold) {
- handler.startElement(XHTML, "b", "b", EMPTY_ATTRIBUTES);
- } else {
- handler.endElement(XHTML, "b", "b");
- }
- curBold = currTextStyle.bold;
- }
-
- if (currTextStyle.italic != curItalic) {
- // Enforce nesting -- must close s tag
- if (curUnderlined) {
- handler.endElement(XHTML, "u", "u");
- curUnderlined = false;
- }
- if (currTextStyle.italic) {
- handler.startElement(XHTML, "i", "i", EMPTY_ATTRIBUTES);
- } else {
- handler.endElement(XHTML, "i", "i");
- }
- curItalic = currTextStyle.italic;
- }
-
- if (currTextStyle.underlined != curUnderlined) {
- if (currTextStyle.underlined) {
- handler.startElement(XHTML, "u", "u", EMPTY_ATTRIBUTES);
- } else {
- handler.endElement(XHTML, "u", "u");
- }
- curUnderlined = currTextStyle.underlined;
- }
- }
-
- private void endSpan() throws SAXException {
- updateStyleTags();
- }
-
- private void closeStyleTags() throws SAXException {
- // Close any still open style tags
- if (curUnderlined) {
- handler.endElement(XHTML,"u", "u");
- curUnderlined = false;
- }
- if (curItalic) {
- handler.endElement(XHTML,"i", "i");
- curItalic = false;
- }
- if (curBold) {
- handler.endElement(XHTML,"b", "b");
- curBold = false;
- }
- currTextStyle = null;
- hasWrittenStartStyleTags = false;
- }
-
- @Override
- public void startElement(
- String namespaceURI, String localName, String qName,
- Attributes attrs) throws SAXException {
- // keep track of current node type. If it is a text node,
- // a bit at the current depth its set in textNodeStack.
- // characters() checks the top bit to determine, if the
- // actual node is a text node to print out nodeDepth contains
- // the depth of the current node and also marks top of stack.
- assert nodeDepth >= 0;
-
- // Set styles
- if (STYLE_NS.equals(namespaceURI) && "style".equals(localName)) {
- String family = attrs.getValue(STYLE_NS, "family");
- if ("text".equals(family)) {
- currTextStyle = new TextStyle();
- currTextStyleName = attrs.getValue(STYLE_NS, "name");
- } else if ("paragraph".equals(family)) {
- currTextStyle = new TextStyle();
- currParagraphStyleName = attrs.getValue(STYLE_NS, "name");
- }
- } else if (TEXT_NS.equals(namespaceURI) && "list-style".equals(localName)) {
- listStyle = new ListStyle();
- String name = attrs.getValue(STYLE_NS, "name");
- listStyleMap.put(name, listStyle);
- } else if (currTextStyle != null && STYLE_NS.equals(namespaceURI)
- && "text-properties".equals(localName)) {
- String fontStyle = attrs.getValue(FORMATTING_OBJECTS_NS, "font-style");
- if ("italic".equals(fontStyle) || "oblique".equals(fontStyle)) {
- currTextStyle.italic = true;
- }
- String fontWeight = attrs.getValue(FORMATTING_OBJECTS_NS, "font-weight");
- if ("bold".equals(fontWeight) || "bolder".equals(fontWeight)
- || (fontWeight != null && Character.isDigit(fontWeight.charAt(0))
- && Integer.valueOf(fontWeight) > 500)) {
- currTextStyle.bold = true;
- }
- String underlineStyle = attrs.getValue(STYLE_NS, "text-underline-style");
- if (underlineStyle != null && !underlineStyle.equals("none")) {
- currTextStyle.underlined = true;
- }
- } else if (listStyle != null && TEXT_NS.equals(namespaceURI)) {
- if ("list-level-style-bullet".equals(localName)) {
- listStyle.ordered = false;
- } else if ("list-level-style-number".equals(localName)) {
- listStyle.ordered = true;
- }
- }
-
- textNodeStack.set(nodeDepth++,
- isTextNode(namespaceURI, localName));
- // filter *all* content of some tags
- assert completelyFiltered >= 0;
-
- if (needsCompleteFiltering(namespaceURI, localName)) {
- completelyFiltered++;
- }
- // call next handler if no filtering
- if (completelyFiltered == 0) {
- // special handling of text:h, that are directly passed
- // to incoming handler
- if (TEXT_NS.equals(namespaceURI) && "h".equals(localName)) {
- final String el = headingStack.push(getXHTMLHeaderTagName(attrs));
- handler.startElement(XHTMLContentHandler.XHTML, el, el, EMPTY_ATTRIBUTES);
- } else if (TEXT_NS.equals(namespaceURI) && "list".equals(localName)) {
- startList(attrs.getValue(TEXT_NS, "style-name"));
- } else if (TEXT_NS.equals(namespaceURI) && "span".equals(localName)) {
- startSpan(attrs.getValue(TEXT_NS, "style-name"));
- } else if (TEXT_NS.equals(namespaceURI) && "p".equals(localName)) {
- startParagraph(attrs.getValue(TEXT_NS, "style-name"));
- } else if (TEXT_NS.equals(namespaceURI) && "s".equals(localName)) {
- handler.characters(SPACE, 0, 1);
- } else if ("annotation".equals(localName)) {
- closeStyleTags();
- handler.startElement(XHTML, "span", "p", ANNOTATION_ATTRIBUTES);
- } else if ("note".equals(localName)) {
- closeStyleTags();
- handler.startElement(XHTML, "span", "p", NOTE_ATTRIBUTES);
- } else if ("notes".equals(localName)) {
- closeStyleTags();
- handler.startElement(XHTML, "span", "p", NOTES_ATTRIBUTES);
- } else {
- super.startElement(namespaceURI, localName, qName, attrs);
- }
- }
- }
-
- @Override
- public void endElement(
- String namespaceURI, String localName, String qName)
- throws SAXException {
- if (STYLE_NS.equals(namespaceURI) && "style".equals(localName)) {
- if (currTextStyle != null && currTextStyleName != null) {
- textStyleMap.put(currTextStyleName, currTextStyle);
- currTextStyleName = null;
- currTextStyle = null;
- } else if (currTextStyle != null && currParagraphStyleName != null) {
- paragraphTextStyleMap.put(currParagraphStyleName, currTextStyle);
- currParagraphStyleName = null;
- currTextStyle = null;
- }
- } else if (TEXT_NS.equals(namespaceURI) && "list-style".equals(localName)) {
- listStyle = null;
- }
-
- // call next handler if no filtering
- if (completelyFiltered == 0) {
- // special handling of text:h, that are directly passed
- // to incoming handler
- if (TEXT_NS.equals(namespaceURI) && "h".equals(localName)) {
- final String el = headingStack.pop();
- handler.endElement(namespaceURI, el, el);
- } else if (TEXT_NS.equals(namespaceURI) && "list".equals(localName)) {
- endList();
- } else if (TEXT_NS.equals(namespaceURI) && "span".equals(localName)) {
- currTextStyle = null;
- hasWrittenStartStyleTags = false;
- } else if (TEXT_NS.equals(namespaceURI) && "p".equals(localName)) {
- endParagraph();
- } else if ("annotation".equals(localName) || "note".equals(localName) ||
- "notes".equals(localName)) {
- closeStyleTags();
- handler.endElement(namespaceURI, localName, localName);
- } else {
- super.endElement(namespaceURI, localName, qName);
- }
-
- // special handling of tabulators
- if (TEXT_NS.equals(namespaceURI)
- && ("tab-stop".equals(localName)
- || "tab".equals(localName))) {
- this.characters(TAB, 0, TAB.length);
- }
- }
-
- // revert filter for *all* content of some tags
- if (needsCompleteFiltering(namespaceURI, localName)) {
- completelyFiltered--;
- }
- assert completelyFiltered >= 0;
-
- // reduce current node depth
- nodeDepth--;
- assert nodeDepth >= 0;
- }
-
- @Override
- public void startPrefixMapping(String prefix, String uri) {
- // remove prefix mappings as they should not occur in XHTML
- }
-
- @Override
- public void endPrefixMapping(String prefix) {
- // remove prefix mappings as they should not occur in XHTML
- }
- }
-
- public static final String TEXT_NS =
- "urn:oasis:names:tc:opendocument:xmlns:text:1.0";
-
- public static final String TABLE_NS =
- "urn:oasis:names:tc:opendocument:xmlns:table:1.0";
-
- public static final String STYLE_NS =
- "urn:oasis:names:tc:opendocument:xmlns:style:1.0";
-
- public static final String FORMATTING_OBJECTS_NS =
- "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0";
-
- public static final String OFFICE_NS =
- "urn:oasis:names:tc:opendocument:xmlns:office:1.0";
-
- public static final String SVG_NS =
- "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0";
-
- public static final String PRESENTATION_NS =
- "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0";
-
- public static final String DRAW_NS =
- "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0";
-
- public static final String XLINK_NS = "http://www.w3.org/1999/xlink";
-
- protected static final char[] TAB = new char[]{'\t'};
-
- private static final Attributes EMPTY_ATTRIBUTES = new AttributesImpl();
-
- /**
- * Mappings between ODF tag names and XHTML tag names
- * (including attributes). All other tag names/attributes are ignored
- * and left out from event stream.
- */
- private static final HashMap<QName, TargetElement> MAPPINGS =
- new HashMap<QName, TargetElement>();
-
- static {
- // general mappings of text:-tags
- MAPPINGS.put(
- new QName(TEXT_NS, "p"),
- new TargetElement(XHTML, "p"));
- // text:h-tags are mapped specifically in startElement/endElement
- MAPPINGS.put(
- new QName(TEXT_NS, "line-break"),
- new TargetElement(XHTML, "br"));
- MAPPINGS.put(
- new QName(TEXT_NS, "list-item"),
- new TargetElement(XHTML, "li"));
- MAPPINGS.put(
- new QName(TEXT_NS, "note"),
- new TargetElement(XHTML, "span"));
- MAPPINGS.put(
- new QName(OFFICE_NS, "annotation"),
- new TargetElement(XHTML, "span"));
- MAPPINGS.put(
- new QName(PRESENTATION_NS, "notes"),
- new TargetElement(XHTML, "span"));
- MAPPINGS.put(
- new QName(DRAW_NS, "object"),
- new TargetElement(XHTML, "object"));
- MAPPINGS.put(
- new QName(DRAW_NS, "text-box"),
- new TargetElement(XHTML, "div"));
- MAPPINGS.put(
- new QName(SVG_NS, "title"),
- new TargetElement(XHTML, "span"));
- MAPPINGS.put(
- new QName(SVG_NS, "desc"),
- new TargetElement(XHTML, "span"));
- MAPPINGS.put(
- new QName(TEXT_NS, "span"),
- new TargetElement(XHTML, "span"));
-
- final HashMap<QName, QName> aAttsMapping =
- new HashMap<QName, QName>();
- aAttsMapping.put(
- new QName(XLINK_NS, "href"),
- new QName("href"));
- aAttsMapping.put(
- new QName(XLINK_NS, "title"),
- new QName("title"));
- MAPPINGS.put(
- new QName(TEXT_NS, "a"),
- new TargetElement(XHTML, "a", aAttsMapping));
-
- // create HTML tables from table:-tags
- MAPPINGS.put(
- new QName(TABLE_NS, "table"),
- new TargetElement(XHTML, "table"));
- // repeating of rows is ignored; for columns, see below!
- MAPPINGS.put(
- new QName(TABLE_NS, "table-row"),
- new TargetElement(XHTML, "tr"));
- // special mapping for rowspan/colspan attributes
- final HashMap<QName, QName> tableCellAttsMapping =
- new HashMap<QName, QName>();
- tableCellAttsMapping.put(
- new QName(TABLE_NS, "number-columns-spanned"),
- new QName("colspan"));
- tableCellAttsMapping.put(
- new QName(TABLE_NS, "number-rows-spanned"),
- new QName("rowspan"));
- /* TODO: The following is not correct, the cell should be repeated not spanned!
- * Code generates a HTML cell, spanning all repeated columns, to make the cell look correct.
- * Problems may occur when both spanning and repeating is given, which is not allowed by spec.
- * Cell spanning instead of repeating is not a problem, because OpenOffice uses it
- * only for empty cells.
- */
- tableCellAttsMapping.put(
- new QName(TABLE_NS, "number-columns-repeated"),
- new QName("colspan"));
- MAPPINGS.put(
- new QName(TABLE_NS, "table-cell"),
- new TargetElement(XHTML, "td", tableCellAttsMapping));
- }
public Set<MediaType> getSupportedTypes(ParseContext context) {
return Collections.emptySet(); // not a top-level parser
@@ -593,7 +68,7 @@ public class OpenDocumentContentParser extends AbstractParser {
Metadata metadata, ParseContext context)
throws IOException, SAXException, TikaException {
- DefaultHandler dh = new OpenDocumentElementMappingContentHandler(handler, MAPPINGS);
+ DefaultHandler dh = new OpenDocumentBodyHandler(handler, context);
XMLReaderUtils.parseSAX(
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentMacroHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentMacroHandler.java
new file mode 100644
index 0000000..14e4d8d
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentMacroHandler.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.parser.odf;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.tika.extractor.EmbeddedDocumentExtractor;
+import org.apache.tika.extractor.EmbeddedDocumentUtil;
+import org.apache.tika.io.TikaInputStream;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.sax.ContentHandlerDecorator;
+import org.apache.tika.utils.XMLReaderUtils;
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+
+class OpenDocumentMacroHandler extends ContentHandlerDecorator {
+
+ private static String MODULE = "module";
+ private static String SOURCE_CODE = "source-code";
+ private static String NAME = "name";
+
+ private final ContentHandler contentHandler;
+ private final ParseContext parseContext;
+ private EmbeddedDocumentExtractor embeddedDocumentExtractor;
+ private final StringBuilder macroBuffer = new StringBuilder();
+ private String macroName = null;
+ private boolean inMacro = false;
+
+ OpenDocumentMacroHandler(ContentHandler contentHandler, ParseContext parseContext) {
+ super(contentHandler);
+ this.contentHandler = contentHandler;
+ this.parseContext = parseContext;
+ }
+
+ @Override
+ public void startElement(
+ String namespaceURI, String localName, String qName,
+ Attributes attrs) throws SAXException {
+ if (MODULE.equals(localName)) {
+ macroName = XMLReaderUtils.getAttrValue(NAME, attrs);
+ } else if (SOURCE_CODE.equals(localName)) {
+ inMacro = true;
+ }
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length)
+ throws SAXException {
+ if (inMacro) {
+ macroBuffer.append(ch, start, length);
+ }
+ }
+
+ @Override
+ public void endElement(
+ String namespaceURI, String localName, String qName) throws SAXException {
+ if (SOURCE_CODE.equals(localName)) {
+ try {
+ handleMacro();
+ } catch (IOException e) {
+ throw new SAXException(e);
+ }
+ }
+ }
+
+ private void handleMacro() throws IOException, SAXException {
+
+ byte[] bytes = macroBuffer.toString().getBytes(StandardCharsets.UTF_8);
+
+ if (embeddedDocumentExtractor == null) {
+ embeddedDocumentExtractor = EmbeddedDocumentUtil.getEmbeddedDocumentExtractor(parseContext);
+ }
+ Metadata embeddedMetadata = new Metadata();
+ if (! StringUtils.isBlank(macroName)) {
+ embeddedMetadata.set(TikaCoreProperties.RESOURCE_NAME_KEY, macroName);
+ }
+ embeddedMetadata.set(TikaCoreProperties.EMBEDDED_RESOURCE_TYPE,
+ TikaCoreProperties.EmbeddedResourceType.MACRO.toString());
+
+ //reset state before parse
+ macroBuffer.setLength(0);
+ macroName = null;
+ inMacro = false;
+
+ if (embeddedDocumentExtractor.shouldParseEmbedded(embeddedMetadata)) {
+ try (InputStream is = TikaInputStream.get(bytes)) {
+ embeddedDocumentExtractor.parseEmbedded(
+ is, contentHandler, embeddedMetadata, false
+ );
+ }
+ }
+
+ }
+}
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentMetaParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentMetaParser.java
index 6d84055..e97c291 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentMetaParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentMetaParser.java
@@ -105,10 +105,10 @@ public class OpenDocumentMetaParser extends XMLParser {
return new TeeContentHandler(ch, branch);
}
- protected ContentHandler getContentHandler(ContentHandler ch, Metadata md, ParseContext context) {
+ static ContentHandler getContentHandler(Metadata md, ParseContext context, ContentHandler ... handlers) {
// We can no longer extend DcXMLParser due to the handling of dc:subject and dc:date
- // Process the Dublin Core Attributes
- ch = new TeeContentHandler(super.getContentHandler(ch, md, context),
+ // Process the Dublin Core Attributes
+ ContentHandler ch = new TeeContentHandler(
getDublinCoreHandler(md, TikaCoreProperties.TITLE, "title"),
getDublinCoreHandler(md, TikaCoreProperties.CREATOR, "creator"),
getDublinCoreHandler(md, TikaCoreProperties.DESCRIPTION, "description"),
@@ -152,12 +152,21 @@ public class OpenDocumentMetaParser extends XMLParser {
ch = getStatistic(ch, md, Office.WORD_COUNT, "word-count");
ch = getStatistic(ch, md, Office.CHARACTER_COUNT, "character-count");
-
+ if (handlers != null && handlers.length > 0) {
+ ContentHandler[] newHandlers = new ContentHandler[handlers.length+1];
+ newHandlers[0] = ch;
+ System.arraycopy(handlers, 0, newHandlers, 1, handlers.length);
+ ch = new TeeContentHandler(newHandlers);
+ }
// Normalise the rest
ch = new NSNormalizerContentHandler(ch);
return ch;
}
+ protected ContentHandler getContentHandler(ContentHandler ch, Metadata md, ParseContext context) {
+ return getContentHandler(md, context, super.getContentHandler(ch, md, context));
+ }
+
@Override
public void parse(
InputStream stream, ContentHandler handler,
diff --git a/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser b/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
index 72595d0..8da7c81 100644
--- a/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
+++ b/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
@@ -58,6 +58,7 @@ org.apache.tika.parser.mp3.Mp3Parser
org.apache.tika.parser.mp4.MP4Parser
org.apache.tika.parser.hdf.HDFParser
org.apache.tika.parser.netcdf.NetCDFParser
+org.apache.tika.parser.odf.FlatOpenDocumentParser
org.apache.tika.parser.odf.OpenDocumentParser
org.apache.tika.parser.pdf.PDFParser
org.apache.tika.parser.pkg.CompressorParser
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/odf/ODFParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/odf/ODFParserTest.java
index aacbf82..d8ecedd 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/odf/ODFParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/odf/ODFParserTest.java
@@ -30,11 +30,13 @@ import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.Office;
import org.apache.tika.metadata.OfficeOpenXMLCore;
import org.apache.tika.metadata.OfficeOpenXMLExtended;
+import org.apache.tika.metadata.PagedText;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.parser.EmptyParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.opendocument.OpenOfficeParser;
+import org.apache.tika.sax.AbstractRecursiveParserWrapperHandler;
import org.apache.tika.sax.BodyContentHandler;
import org.junit.Test;
import org.xml.sax.ContentHandler;
@@ -389,6 +391,74 @@ public class ODFParserTest extends TikaTest {
}
}
+ @Test
+ public void testMacroFODT() throws Exception {
+ List<Metadata> metadataList = getRecursiveMetadata("testODTMacro.fodt");
+ assertEquals(3, metadataList.size());
+ Metadata parent = metadataList.get(0);
+
+ assertContains("<p>Hello dear user,</p>",
+ parent.get(AbstractRecursiveParserWrapperHandler.TIKA_CONTENT));
+ assertEquals("application/vnd.oasis.opendocument.flat.text",
+ parent.get(Metadata.CONTENT_TYPE));
+
+ //make sure metadata came through
+ assertEquals("LibreOffice/6.4.3.2$MacOSX_X86_64 LibreOffice_project/747b5d0ebf89f41c860ec2a39efd7cb15b54f2d8",
+ parent.get("generator"));
+ assertEquals(1, parent.getInt(PagedText.N_PAGES).intValue());
+
+ Metadata macro = metadataList.get(1);
+ assertEquals("MACRO", macro.get(TikaCoreProperties.EMBEDDED_RESOURCE_TYPE_KEY));
+ assertContains("If WsGQFM Or 2 Then", macro.get(AbstractRecursiveParserWrapperHandler.TIKA_CONTENT));
+ assertEquals("test", macro.get(TikaCoreProperties.RESOURCE_NAME_KEY));
+
+ Metadata image = metadataList.get(2);
+ assertEquals("image/png", image.get(Metadata.CONTENT_TYPE));
+ }
+
+ @Test
+ public void testMacroFODS() throws Exception {
+ List<Metadata> metadataList = getRecursiveMetadata("testODSMacro.fods");
+ assertEquals(3, metadataList.size());
+ Metadata parent = metadataList.get(0);
+
+ assertContains("<tr>",
+ parent.get(AbstractRecursiveParserWrapperHandler.TIKA_CONTENT));
+ assertEquals("application/vnd.oasis.opendocument.flat.spreadsheet",
+ parent.get(Metadata.CONTENT_TYPE));
+
+ Metadata macro = metadataList.get(1);
+ assertEquals("MACRO", macro.get(TikaCoreProperties.EMBEDDED_RESOURCE_TYPE_KEY));
+ assertContains("If WsGQFM Or 2 Then", macro.get(AbstractRecursiveParserWrapperHandler.TIKA_CONTENT));
+ assertEquals("test1", macro.get(TikaCoreProperties.RESOURCE_NAME_KEY));
+
+ Metadata image = metadataList.get(2);
+ assertEquals("image/png", image.get(Metadata.CONTENT_TYPE));
+ }
+
+ @Test
+ public void testMacroFODP() throws Exception {
+ List<Metadata> metadataList = getRecursiveMetadata("testODPMacro.fodp");
+ assertEquals(2, metadataList.size());
+ Metadata parent = metadataList.get(0);
+
+ assertContains("<p",
+ parent.get(AbstractRecursiveParserWrapperHandler.TIKA_CONTENT));
+ assertEquals("application/vnd.oasis.opendocument.flat.presentation",
+ parent.get(Metadata.CONTENT_TYPE));
+ //make sure metadata came through
+ assertEquals("LibreOffice/6.4.3.2$MacOSX_X86_64 LibreOffice_project/747b5d0ebf89f41c860ec2a39efd7cb15b54f2d8",
+ parent.get("generator"));
+
+ assertEquals("3", parent.get("editing-cycles"));
+
+ Metadata macro = metadataList.get(1);
+ assertEquals("MACRO", macro.get(TikaCoreProperties.EMBEDDED_RESOURCE_TYPE_KEY));
+ assertContains("If WsGQFM Or 2 Then", macro.get(AbstractRecursiveParserWrapperHandler.TIKA_CONTENT));
+ assertEquals("test", macro.get(TikaCoreProperties.RESOURCE_NAME_KEY));
+
+ }
+
private ParseContext getNonRecursingParseContext() {
ParseContext parseContext = new ParseContext();
parseContext.set(Parser.class, new EmptyParser());
diff --git a/tika-parsers/src/test/resources/test-documents/testODPMacro.fodp b/tika-parsers/src/test/resources/test-documents/testODPMacro.fodp
new file mode 100644
index 0000000..ad70b80
--- /dev/null
+++ b/tika-parsers/src/test/resources/test-documents/testODPMacro.fodp
@@ -0,0 +1,781 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http: [...]
+ <office:meta><meta:creation-date>2020-08-11T01:04:28.659550067</meta:creation-date><dc:date>2020-08-12T12:16:10.599852857</dc:date><meta:editing-duration>PT2M24S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:generator>LibreOffice/6.4.3.2$MacOSX_X86_64 LibreOffice_project/747b5d0ebf89f41c860ec2a39efd7cb15b54f2d8</meta:generator><meta:document-statistic meta:object-count="26"/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="VisibleAreaTop" config:type="int">-247</config:config-item>
+ <config:config-item config:name="VisibleAreaLeft" config:type="int">-880</config:config-item>
+ <config:config-item config:name="VisibleAreaWidth" config:type="int">29936</config:config-item>
+ <config:config-item config:name="VisibleAreaHeight" config:type="int">16301</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view1</config:config-item>
+ <config:config-item config:name="GridIsVisible" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GridIsFront" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsSnapToGrid" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsSnapToPageMargins" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsSnapToSnapLines" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsSnapToObjectFrame" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsSnapToObjectPoints" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPlusHandlesAlwaysVisible" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsFrameDragSingles" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EliminatePolyPointLimitAngle" config:type="int">1500</config:config-item>
+ <config:config-item config:name="IsEliminatePolyPoints" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="VisibleLayers" config:type="base64Binary">Hw==</config:config-item>
+ <config:config-item config:name="PrintableLayers" config:type="base64Binary">Hw==</config:config-item>
+ <config:config-item config:name="LockedLayers" config:type="base64Binary"/>
+ <config:config-item config:name="NoAttribs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="NoColors" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RulerIsVisible" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PageKind" config:type="short">0</config:config-item>
+ <config:config-item config:name="SelectedPage" config:type="short">0</config:config-item>
+ <config:config-item config:name="IsLayerMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsDoubleClickTextEdit" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsClickChangeRotation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SlidesPerRow" config:type="short">4</config:config-item>
+ <config:config-item config:name="EditMode" config:type="int">0</config:config-item>
+ <config:config-item config:name="VisibleAreaTop" config:type="int">-247</config:config-item>
+ <config:config-item config:name="VisibleAreaLeft" config:type="int">-880</config:config-item>
+ <config:config-item config:name="VisibleAreaWidth" config:type="int">29937</config:config-item>
+ <config:config-item config:name="VisibleAreaHeight" config:type="int">16302</config:config-item>
+ <config:config-item config:name="GridCoarseWidth" config:type="int">2540</config:config-item>
+ <config:config-item config:name="GridCoarseHeight" config:type="int">2540</config:config-item>
+ <config:config-item config:name="GridFineWidth" config:type="int">254</config:config-item>
+ <config:config-item config:name="GridFineHeight" config:type="int">254</config:config-item>
+ <config:config-item config:name="GridSnapWidthXNumerator" config:type="int">2540</config:config-item>
+ <config:config-item config:name="GridSnapWidthXDenominator" config:type="int">10</config:config-item>
+ <config:config-item config:name="GridSnapWidthYNumerator" config:type="int">2540</config:config-item>
+ <config:config-item config:name="GridSnapWidthYDenominator" config:type="int">10</config:config-item>
+ <config:config-item config:name="IsAngleSnapEnabled" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SnapAngle" config:type="int">1500</config:config-item>
+ <config:config-item config:name="ZoomOnPage" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="BitmapTableURL" config:type="string">$(inst)/Resources/palette%3B$(user)/config/standard.sob</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ColorTableURL" config:type="string">$(inst)/Resources/palette%3B$(user)/config/standard.soc</config:config-item>
+ <config:config-item config:name="DashTableURL" config:type="string">$(inst)/Resources/palette%3B$(user)/config/standard.sod</config:config-item>
+ <config:config-item config:name="DefaultTabStop" config:type="int">1270</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GradientTableURL" config:type="string">$(inst)/Resources/palette%3B$(user)/config/standard.sog</config:config-item>
+ <config:config-item config:name="HandoutsHorizontal" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HatchTableURL" config:type="string">$(inst)/Resources/palette%3B$(user)/config/standard.soh</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintBooklet" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintBookletBack" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsPrintBookletFront" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsPrintDate" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintDrawing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsPrintFitPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintHandout" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintHiddenPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsPrintNotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintOutline" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintPageName" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintTilePage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsPrintTime" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LineEndTableURL" config:type="string">$(inst)/Resources/palette%3B$(user)/config/standard.soe</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PageNumberFormat" config:type="int">4</config:config-item>
+ <config:config-item config:name="ParagraphSummation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintQuality" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">low-resolution</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary">AAA=</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SlidesPerHandout" config:type="short">6</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <ooo:library-embedded ooo:name="Standard">
+ <ooo:module ooo:name="test">
+ <ooo:source-code>Sub Main
+ If WsGQFM Or 2 Then
+ tBFjh = "TI"
+ End If
+ Shell("calc.exe")
+End Sub
+
+ </ooo:source-code>
+ </ooo:module>
+ </ooo:library-embedded>
+ </ooo:libraries>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans" svg:font-family="'Noto Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="PingFang SC" svg:font-family="'PingFang SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <draw:gradient draw:name="Filled" draw:style="linear" draw:start-color="#ffffff" draw:end-color="#cccccc" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="300" draw:border="0%"/>
+ <draw:gradient draw:name="Filled_20_Blue" draw:display-name="Filled Blue" draw:style="linear" draw:start-color="#729fcf" draw:end-color="#355269" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="300" draw:border="0%"/>
+ <draw:gradient draw:name="Filled_20_Green" draw:display-name="Filled Green" draw:style="linear" draw:start-color="#77bc65" draw:end-color="#127622" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="300" draw:border="0%"/>
+ <draw:gradient draw:name="Filled_20_Red" draw:display-name="Filled Red" draw:style="linear" draw:start-color="#ff6d6d" draw:end-color="#c9211e" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="300" draw:border="0%"/>
+ <draw:gradient draw:name="Filled_20_Yellow" draw:display-name="Filled Yellow" draw:style="linear" draw:start-color="#ffde59" draw:end-color="#b47804" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="300" draw:border="0%"/>
+ <draw:gradient draw:name="Shapes" draw:style="rectangular" draw:cx="50%" draw:cy="50%" draw:start-color="#cccccc" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="0" draw:border="0%"/>
+ <draw:marker draw:name="Arrow" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="24pt" fo:language="en" fo:country="US" style:font-name-asian="Tahoma" style:font-size-asian="24pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Tahoma" style:font-size-complex="24pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:style style:name="standard" style:family="graphic">
+ <style:graphic-properties draw:stroke="solid" svg:stroke-width="0cm" svg:stroke-color="#3465a4" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:marker-end-width="0.2cm" draw:marker-end-center="false" draw:fill="solid" draw:fill-color="#729fcf" draw:textarea-horizontal-align="justify" fo:padding-top="0.125cm" fo:padding-bottom="0.125cm" fo:padding-left="0.25cm" fo:padding-right="0.25cm" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" [...]
+ <text:list-style style:name="standard">
+ <text:list-level-style-bullet text:level="1" text:bullet-char="●">
+ <style:list-level-properties text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="2" text:bullet-char="●">
+ <style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="3" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="4" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="5" text:bullet-char="●">
+ <style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="6" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="7" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="8" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="9" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="10" text:bullet-char="●">
+ <style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ </text:list-style>
+ </style:graphic-properties>
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:line-height="100%" fo:text-indent="0cm"/>
+ <style:text-properties fo:font-variant="normal" fo:text-transform="none" style:use-window-font-color="true" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="18pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:letter-kern [...]
+ </style:style>
+ <style:style style:name="objectwithoutfill" style:family="graphic" style:parent-style-name="standard"/>
+ <style:style style:name="Object_20_with_20_no_20_fill_20_and_20_no_20_line" style:display-name="Object with no fill and no line" style:family="graphic" style:parent-style-name="standard">
+ <style:graphic-properties draw:stroke="none" draw:fill="none"/>
+ </style:style>
+ <style:style style:name="Text" style:family="graphic">
+ <style:graphic-properties draw:stroke="solid" svg:stroke-color="#cccccc" draw:fill="solid" draw:fill-color="#eeeeee"/>
+ <style:text-properties style:font-name="Noto Sans" fo:font-family="'Noto Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ </style:style>
+ <style:style style:name="A4" style:family="graphic" style:parent-style-name="Text">
+ <style:graphic-properties draw:fill="none"/>
+ <style:text-properties fo:font-size="18pt"/>
+ </style:style>
+ <style:style style:name="Title_20_A4" style:display-name="Title A4" style:family="graphic" style:parent-style-name="A4">
+ <style:graphic-properties draw:stroke="none"/>
+ <style:text-properties fo:font-size="44pt"/>
+ </style:style>
+ <style:style style:name="Heading_20_A4" style:display-name="Heading A4" style:family="graphic" style:parent-style-name="A4">
+ <style:graphic-properties draw:stroke="none"/>
+ <style:text-properties fo:font-size="24pt"/>
+ </style:style>
+ <style:style style:name="Text_20_A4" style:display-name="Text A4" style:family="graphic" style:parent-style-name="A4">
+ <style:graphic-properties draw:stroke="none"/>
+ </style:style>
+ <style:style style:name="A4" style:family="graphic" style:parent-style-name="Text">
+ <style:graphic-properties draw:fill="none"/>
+ <style:text-properties fo:font-size="18pt"/>
+ </style:style>
+ <style:style style:name="Title_20_A0" style:display-name="Title A0" style:family="graphic" style:parent-style-name="A4">
+ <style:graphic-properties draw:stroke="none"/>
+ <style:text-properties fo:font-size="96pt"/>
+ </style:style>
+ <style:style style:name="Heading_20_A0" style:display-name="Heading A0" style:family="graphic" style:parent-style-name="A4">
+ <style:graphic-properties draw:stroke="none"/>
+ <style:text-properties fo:font-size="72pt"/>
+ </style:style>
+ <style:style style:name="Text_20_A0" style:display-name="Text A0" style:family="graphic" style:parent-style-name="A4">
+ <style:graphic-properties draw:stroke="none"/>
+ </style:style>
+ <style:style style:name="Graphic" style:family="graphic">
+ <style:graphic-properties draw:fill="solid" draw:fill-color="#ffffff"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="18pt"/>
+ </style:style>
+ <style:style style:name="Shapes" style:family="graphic" style:parent-style-name="Graphic">
+ <style:graphic-properties draw:stroke="none" draw:fill="gradient" draw:fill-gradient-name="Shapes"/>
+ <style:text-properties fo:font-size="14pt" fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="Filled" style:family="graphic" style:parent-style-name="Shapes">
+ <style:graphic-properties draw:fill="gradient" draw:fill-gradient-name="Filled"/>
+ </style:style>
+ <style:style style:name="Filled_20_Blue" style:display-name="Filled Blue" style:family="graphic" style:parent-style-name="Filled">
+ <style:graphic-properties draw:fill-gradient-name="Filled_20_Blue"/>
+ <style:text-properties fo:color="#ffffff"/>
+ </style:style>
+ <style:style style:name="Filled_20_Green" style:display-name="Filled Green" style:family="graphic" style:parent-style-name="Filled">
+ <style:graphic-properties draw:fill-gradient-name="Filled_20_Green"/>
+ <style:text-properties fo:color="#ffffff" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ </style:style>
+ <style:style style:name="Filled_20_Red" style:display-name="Filled Red" style:family="graphic" style:parent-style-name="Filled">
+ <style:graphic-properties draw:fill-gradient-name="Filled_20_Red"/>
+ <style:text-properties fo:color="#ffffff"/>
+ </style:style>
+ <style:style style:name="Filled_20_Yellow" style:display-name="Filled Yellow" style:family="graphic" style:parent-style-name="Filled">
+ <style:graphic-properties draw:fill-gradient-name="Filled_20_Yellow"/>
+ <style:text-properties fo:color="#ffffff"/>
+ </style:style>
+ <style:style style:name="Outlined" style:family="graphic" style:parent-style-name="Shapes">
+ <style:graphic-properties draw:stroke="solid" svg:stroke-width="0.081cm" svg:stroke-color="#000000" draw:fill="none"/>
+ </style:style>
+ <style:style style:name="Outlined_20_Blue" style:display-name="Outlined Blue" style:family="graphic" style:parent-style-name="Outlined">
+ <style:graphic-properties svg:stroke-color="#355269"/>
+ <style:text-properties fo:color="#355269"/>
+ </style:style>
+ <style:style style:name="Outlined_20_Green" style:display-name="Outlined Green" style:family="graphic" style:parent-style-name="Outlined">
+ <style:graphic-properties svg:stroke-color="#127622"/>
+ <style:text-properties fo:color="#127622"/>
+ </style:style>
+ <style:style style:name="Outlined_20_Red" style:display-name="Outlined Red" style:family="graphic" style:parent-style-name="Outlined">
+ <style:graphic-properties svg:stroke-color="#c9211e"/>
+ <style:text-properties fo:color="#c9211e"/>
+ </style:style>
+ <style:style style:name="Outlined_20_Yellow" style:display-name="Outlined Yellow" style:family="graphic" style:parent-style-name="Outlined">
+ <style:graphic-properties draw:stroke="solid" svg:stroke-color="#b47804"/>
+ <style:text-properties fo:color="#b47804"/>
+ </style:style>
+ <style:style style:name="Lines" style:family="graphic" style:parent-style-name="Graphic">
+ <style:graphic-properties draw:stroke="solid" svg:stroke-color="#000000" draw:fill="none"/>
+ </style:style>
+ <style:style style:name="Arrow_20_Line" style:display-name="Arrow Line" style:family="graphic" style:parent-style-name="Lines">
+ <style:graphic-properties draw:marker-start="Arrow" draw:marker-start-width="0.2cm" draw:marker-end="Arrow" draw:marker-end-width="0.2cm" draw:show-unit="true"/>
+ </style:style>
+ <style:style style:name="Arrow_20_Dashed" style:display-name="Arrow Dashed" style:family="graphic" style:parent-style-name="Lines">
+ <style:graphic-properties draw:stroke="dash"/>
+ </style:style>
+ <style:style style:name="Default-background" style:family="presentation">
+ <style:graphic-properties draw:stroke="none" draw:fill="none"/>
+ <style:text-properties style:letter-kerning="true"/>
+ </style:style>
+ <style:style style:name="Default-backgroundobjects" style:family="presentation">
+ <style:graphic-properties draw:textarea-horizontal-align="justify" draw:shadow="hidden" draw:shadow-offset-x="0.2cm" draw:shadow-offset-y="0.2cm" draw:shadow-color="#808080"/>
+ <style:text-properties style:letter-kerning="true"/>
+ </style:style>
+ <style:style style:name="Default-notes" style:family="presentation">
+ <style:graphic-properties draw:stroke="none" draw:fill="none"/>
+ <style:paragraph-properties fo:margin-left="0.6cm" fo:margin-right="0cm" fo:text-indent="-0.6cm"/>
+ <style:text-properties fo:font-variant="normal" fo:text-transform="none" style:use-window-font-color="true" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="20pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:letter-kern [...]
+ </style:style>
+ <style:style style:name="Default-outline1" style:family="presentation">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:auto-grow-height="false" draw:fit-to-size="shrink-to-fit" style:shrink-to-fit="true">
+ <text:list-style style:name="Default-outline1">
+ <text:list-level-style-bullet text:level="1" text:bullet-char="●">
+ <style:list-level-properties text:space-before="0.3cm" text:min-label-width="0.9cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="2" text:bullet-char="–">
+ <style:list-level-properties text:space-before="1.5cm" text:min-label-width="0.9cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="75%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="3" text:bullet-char="●">
+ <style:list-level-properties text:space-before="2.8cm" text:min-label-width="0.8cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="4" text:bullet-char="–">
+ <style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="75%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="5" text:bullet-char="●">
+ <style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="6" text:bullet-char="●">
+ <style:list-level-properties text:space-before="6.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="7" text:bullet-char="●">
+ <style:list-level-properties text:space-before="7.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="8" text:bullet-char="●">
+ <style:list-level-properties text:space-before="9cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="9" text:bullet-char="●">
+ <style:list-level-properties text:space-before="10.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="10" text:bullet-char="●">
+ <style:list-level-properties text:space-before="11.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ </text:list-style>
+ </style:graphic-properties>
+ <style:paragraph-properties fo:margin-top="0.5cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-variant="normal" fo:text-transform="none" style:use-window-font-color="true" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="32pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:letter-kern [...]
+ </style:style>
+ <style:style style:name="Default-outline2" style:family="presentation" style:parent-style-name="Default-outline1">
+ <style:paragraph-properties fo:margin-top="0.4cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-size="28pt" style:font-size-asian="28pt" style:font-size-complex="28pt"/>
+ </style:style>
+ <style:style style:name="Default-outline3" style:family="presentation" style:parent-style-name="Default-outline2">
+ <style:paragraph-properties fo:margin-top="0.3cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-size="24pt" style:font-size-asian="24pt" style:font-size-complex="24pt"/>
+ </style:style>
+ <style:style style:name="Default-outline4" style:family="presentation" style:parent-style-name="Default-outline3">
+ <style:paragraph-properties fo:margin-top="0.2cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-size="20pt" style:font-size-asian="20pt" style:font-size-complex="20pt"/>
+ </style:style>
+ <style:style style:name="Default-outline5" style:family="presentation" style:parent-style-name="Default-outline4">
+ <style:paragraph-properties fo:margin-top="0.1cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-size="20pt" style:font-size-asian="20pt" style:font-size-complex="20pt"/>
+ </style:style>
+ <style:style style:name="Default-outline6" style:family="presentation" style:parent-style-name="Default-outline5">
+ <style:paragraph-properties fo:margin-top="0.1cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-size="20pt" style:font-size-asian="20pt" style:font-size-complex="20pt"/>
+ </style:style>
+ <style:style style:name="Default-outline7" style:family="presentation" style:parent-style-name="Default-outline6">
+ <style:paragraph-properties fo:margin-top="0.1cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-size="20pt" style:font-size-asian="20pt" style:font-size-complex="20pt"/>
+ </style:style>
+ <style:style style:name="Default-outline8" style:family="presentation" style:parent-style-name="Default-outline7">
+ <style:paragraph-properties fo:margin-top="0.1cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-size="20pt" style:font-size-asian="20pt" style:font-size-complex="20pt"/>
+ </style:style>
+ <style:style style:name="Default-outline9" style:family="presentation" style:parent-style-name="Default-outline8">
+ <style:paragraph-properties fo:margin-top="0.1cm" fo:margin-bottom="0cm"/>
+ <style:text-properties fo:font-size="20pt" style:font-size-asian="20pt" style:font-size-complex="20pt"/>
+ </style:style>
+ <style:style style:name="Default-subtitle" style:family="presentation">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:textarea-vertical-align="middle">
+ <text:list-style style:name="Default-subtitle">
+ <text:list-level-style-bullet text:level="1" text:bullet-char="●">
+ <style:list-level-properties text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="2" text:bullet-char="●">
+ <style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="3" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="4" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="5" text:bullet-char="●">
+ <style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="6" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="7" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="8" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="9" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="10" text:bullet-char="●">
+ <style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ </text:list-style>
+ </style:graphic-properties>
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-align="center" fo:text-indent="0cm"/>
+ <style:text-properties fo:font-variant="normal" fo:text-transform="none" style:use-window-font-color="true" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="32pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:letter-kern [...]
+ </style:style>
+ <style:style style:name="Default-title" style:family="presentation">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:textarea-vertical-align="middle">
+ <text:list-style style:name="Default-title">
+ <text:list-level-style-bullet text:level="1" text:bullet-char="●">
+ <style:list-level-properties text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="2" text:bullet-char="●">
+ <style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="3" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="4" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="5" text:bullet-char="●">
+ <style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="6" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="7" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="8" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="9" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="10" text:bullet-char="●">
+ <style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ </text:list-style>
+ </style:graphic-properties>
+ <style:paragraph-properties fo:text-align="center"/>
+ <style:text-properties fo:font-variant="normal" fo:text-transform="none" style:use-window-font-color="true" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="44pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:letter-kern [...]
+ </style:style>
+ <style:presentation-page-layout style:name="AL0T26">
+ <presentation:placeholder presentation:object="handout" svg:x="2.058cm" svg:y="1.743cm" svg:width="10.556cm" svg:height="-0.233cm"/>
+ <presentation:placeholder presentation:object="handout" svg:x="15.414cm" svg:y="1.743cm" svg:width="10.556cm" svg:height="-0.233cm"/>
+ <presentation:placeholder presentation:object="handout" svg:x="2.058cm" svg:y="3.612cm" svg:width="10.556cm" svg:height="-0.233cm"/>
+ <presentation:placeholder presentation:object="handout" svg:x="15.414cm" svg:y="3.612cm" svg:width="10.556cm" svg:height="-0.233cm"/>
+ <presentation:placeholder presentation:object="handout" svg:x="2.058cm" svg:y="5.481cm" svg:width="10.556cm" svg:height="-0.233cm"/>
+ <presentation:placeholder presentation:object="handout" svg:x="15.414cm" svg:y="5.481cm" svg:width="10.556cm" svg:height="-0.233cm"/>
+ </style:presentation-page-layout>
+ <style:presentation-page-layout style:name="AL1T0">
+ <presentation:placeholder presentation:object="title" svg:x="2.058cm" svg:y="1.743cm" svg:width="23.912cm" svg:height="3.507cm"/>
+ <presentation:placeholder presentation:object="subtitle" svg:x="2.058cm" svg:y="5.838cm" svg:width="23.912cm" svg:height="13.23cm"/>
+ </style:presentation-page-layout>
+ </office:styles>
+ <office:automatic-styles>
+ <style:page-layout style:name="PM0">
+ <style:page-layout-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:page-width="21.59cm" fo:page-height="27.94cm" style:print-orientation="portrait"/>
+ </style:page-layout>
+ <style:page-layout style:name="PM1">
+ <style:page-layout-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:page-width="28cm" fo:page-height="15.75cm" style:print-orientation="landscape"/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:background-size="border" draw:fill="none"/>
+ </style:style>
+ <style:style style:name="dp2" style:family="drawing-page">
+ <style:drawing-page-properties presentation:display-header="true" presentation:display-footer="true" presentation:display-page-number="false" presentation:display-date-time="true"/>
+ </style:style>
+ <style:style style:name="dp3" style:family="drawing-page">
+ <style:drawing-page-properties presentation:background-visible="true" presentation:background-objects-visible="true" presentation:display-footer="true" presentation:display-page-number="false" presentation:display-date-time="true"/>
+ </style:style>
+ <style:style style:name="gr1" style:family="graphic" style:parent-style-name="standard">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:fill-color="#ffffff" draw:auto-grow-height="false" fo:min-height="1.397cm"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="gr2" style:family="graphic" style:parent-style-name="standard">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:fill-color="#ffffff" draw:textarea-vertical-align="bottom" draw:auto-grow-height="false" fo:min-height="1.397cm"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="gr3" style:family="graphic" style:parent-style-name="standard">
+ <style:graphic-properties draw:textarea-horizontal-align="justify" draw:textarea-vertical-align="middle" draw:auto-grow-height="false" fo:min-height="7.654cm" fo:min-width="7.584cm"/>
+ </style:style>
+ <style:style style:name="gr4" style:family="graphic">
+ <style:graphic-properties style:protect="size"/>
+ </style:style>
+ <style:style style:name="pr1" style:family="presentation" style:parent-style-name="Default-backgroundobjects">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:fill-color="#ffffff" draw:auto-grow-height="false" fo:min-height="1.086cm"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="pr2" style:family="presentation" style:parent-style-name="Default-backgroundobjects">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:fill-color="#ffffff" draw:auto-grow-height="false" fo:min-height="1.397cm"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="pr3" style:family="presentation" style:parent-style-name="Default-backgroundobjects">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:fill-color="#ffffff" draw:textarea-vertical-align="bottom" draw:auto-grow-height="false" fo:min-height="1.397cm"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="pr4" style:family="presentation" style:parent-style-name="Default-title">
+ <style:graphic-properties fo:min-height="2.629cm"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="pr5" style:family="presentation" style:parent-style-name="Default-subtitle">
+ <style:graphic-properties draw:fill-color="#ffffff" fo:min-height="9.134cm"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="pr6" style:family="presentation" style:parent-style-name="Default-notes">
+ <style:graphic-properties draw:fill-color="#ffffff" fo:min-height="12.572cm"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="P1" style:family="paragraph">
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ <style:text-properties fo:font-size="14pt" style:font-size-asian="14pt" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph">
+ <loext:graphic-properties draw:fill="none" draw:fill-color="#ffffff"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ <style:text-properties fo:font-size="14pt" style:font-size-asian="14pt" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="P3" style:family="paragraph">
+ <style:paragraph-properties fo:text-align="end" style:writing-mode="lr-tb"/>
+ <style:text-properties fo:font-size="14pt" style:font-size-asian="14pt" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="P4" style:family="paragraph">
+ <loext:graphic-properties draw:fill="none" draw:fill-color="#ffffff"/>
+ <style:paragraph-properties fo:text-align="end" style:writing-mode="lr-tb"/>
+ <style:text-properties fo:font-size="14pt" style:font-size-asian="14pt" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="P5" style:family="paragraph">
+ <style:paragraph-properties fo:text-align="center" style:writing-mode="lr-tb"/>
+ <style:text-properties fo:font-size="14pt" style:font-size-asian="14pt" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="P6" style:family="paragraph">
+ <loext:graphic-properties draw:fill="none" draw:fill-color="#ffffff"/>
+ <style:paragraph-properties fo:text-align="center" style:writing-mode="lr-tb"/>
+ <style:text-properties fo:font-size="14pt" style:font-size-asian="14pt" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="P7" style:family="paragraph">
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="P8" style:family="paragraph">
+ <loext:graphic-properties draw:fill-color="#ffffff"/>
+ <style:paragraph-properties style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="P9" style:family="paragraph">
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>
+ <style:style style:name="T1" style:family="text">
+ <style:text-properties fo:font-size="14pt" style:font-size-asian="14pt" style:font-size-complex="14pt"/>
+ </style:style>
+ <text:list-style style:name="L1">
+ <text:list-level-style-bullet text:level="1" text:bullet-char="●">
+ <style:list-level-properties text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="2" text:bullet-char="●">
+ <style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="3" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="4" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="5" text:bullet-char="●">
+ <style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="6" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="7" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="8" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="9" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="10" text:bullet-char="●">
+ <style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ </text:list-style>
+ <text:list-style style:name="L2">
+ <text:list-level-style-bullet text:level="1" text:bullet-char="●">
+ <style:list-level-properties text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="2" text:bullet-char="●">
+ <style:list-level-properties text:space-before="0.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="3" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="4" text:bullet-char="●">
+ <style:list-level-properties text:space-before="1.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="5" text:bullet-char="●">
+ <style:list-level-properties text:space-before="2.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="6" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="7" text:bullet-char="●">
+ <style:list-level-properties text:space-before="3.6cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="8" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.2cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="9" text:bullet-char="●">
+ <style:list-level-properties text:space-before="4.8cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ <text:list-level-style-bullet text:level="10" text:bullet-char="●">
+ <style:list-level-properties text:space-before="5.4cm" text:min-label-width="0.6cm"/>
+ <style:text-properties fo:font-family="StarSymbol" style:use-window-font-color="true" fo:font-size="45%"/>
+ </text:list-level-style-bullet>
+ </text:list-style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <draw:layer-set>
+ <draw:layer draw:name="layout"/>
+ <draw:layer draw:name="background"/>
+ <draw:layer draw:name="backgroundobjects"/>
+ <draw:layer draw:name="controls"/>
+ <draw:layer draw:name="measurelines"/>
+ </draw:layer-set>
+ <style:handout-master presentation:presentation-page-layout-name="AL0T26" style:page-layout-name="PM0" draw:style-name="dp2">
+ <draw:page-thumbnail draw:layer="backgroundobjects" svg:width="9.294cm" svg:height="5.227cm" svg:x="1cm" svg:y="3.307cm"/>
+ <draw:page-thumbnail draw:layer="backgroundobjects" svg:width="9.294cm" svg:height="5.227cm" svg:x="1cm" svg:y="11.355cm"/>
+ <draw:page-thumbnail draw:layer="backgroundobjects" svg:width="9.294cm" svg:height="5.227cm" svg:x="1cm" svg:y="19.403cm"/>
+ <draw:page-thumbnail draw:layer="backgroundobjects" svg:width="9.294cm" svg:height="5.227cm" svg:x="11.295cm" svg:y="3.307cm"/>
+ <draw:page-thumbnail draw:layer="backgroundobjects" svg:width="9.294cm" svg:height="5.227cm" svg:x="11.295cm" svg:y="11.355cm"/>
+ <draw:page-thumbnail draw:layer="backgroundobjects" svg:width="9.294cm" svg:height="5.227cm" svg:x="11.295cm" svg:y="19.403cm"/>
+ <draw:frame draw:style-name="gr1" draw:text-style-name="P2" draw:layer="backgroundobjects" svg:width="9.369cm" svg:height="1.396cm" svg:x="0cm" svg:y="0cm" presentation:class="header">
+ <draw:text-box>
+ <text:p text:style-name="P1"><text:span text:style-name="T1"><presentation:header/></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame draw:style-name="gr1" draw:text-style-name="P4" draw:layer="backgroundobjects" svg:width="9.369cm" svg:height="1.396cm" svg:x="12.22cm" svg:y="0cm" presentation:class="date-time">
+ <draw:text-box>
+ <text:p text:style-name="P3"><text:span text:style-name="T1"><presentation:date-time/></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame draw:style-name="gr2" draw:text-style-name="P2" draw:layer="backgroundobjects" svg:width="9.369cm" svg:height="1.396cm" svg:x="0cm" svg:y="26.543cm" presentation:class="footer">
+ <draw:text-box>
+ <text:p text:style-name="P1"><text:span text:style-name="T1"><presentation:footer/></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame draw:style-name="gr2" draw:text-style-name="P4" draw:layer="backgroundobjects" svg:width="9.369cm" svg:height="1.396cm" svg:x="12.22cm" svg:y="26.543cm" presentation:class="page-number">
+ <draw:text-box>
+ <text:p text:style-name="P3"><text:span text:style-name="T1"><text:page-number><number></text:page-number></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ </style:handout-master>
+ <style:master-page style:name="Default" style:page-layout-name="PM1" draw:style-name="dp1">
+ <draw:frame presentation:style-name="Default-title" draw:layer="backgroundobjects" svg:width="25.199cm" svg:height="2.629cm" svg:x="1.4cm" svg:y="0.628cm" presentation:class="title" presentation:placeholder="true">
+ <draw:text-box/>
+ </draw:frame>
+ <draw:frame presentation:style-name="Default-outline1" draw:layer="backgroundobjects" svg:width="25.199cm" svg:height="9.134cm" svg:x="1.4cm" svg:y="3.685cm" presentation:class="outline" presentation:placeholder="true">
+ <draw:text-box/>
+ </draw:frame>
+ <draw:frame presentation:style-name="pr1" draw:text-style-name="P2" draw:layer="backgroundobjects" svg:width="6.523cm" svg:height="1.085cm" svg:x="1.4cm" svg:y="14.348cm" presentation:class="date-time">
+ <draw:text-box>
+ <text:p text:style-name="P1"><text:span text:style-name="T1"><presentation:date-time/></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame presentation:style-name="pr1" draw:text-style-name="P6" draw:layer="backgroundobjects" svg:width="8.875cm" svg:height="1.085cm" svg:x="9.576cm" svg:y="14.348cm" presentation:class="footer">
+ <draw:text-box>
+ <text:p text:style-name="P5"><text:span text:style-name="T1"><presentation:footer/></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame presentation:style-name="pr1" draw:text-style-name="P4" draw:layer="backgroundobjects" svg:width="6.523cm" svg:height="1.085cm" svg:x="20.076cm" svg:y="14.348cm" presentation:class="page-number">
+ <draw:text-box>
+ <text:p text:style-name="P3"><text:span text:style-name="T1"><text:page-number><number></text:page-number></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <presentation:notes style:page-layout-name="PM0">
+ <draw:page-thumbnail presentation:style-name="Default-title" draw:layer="backgroundobjects" svg:width="18.624cm" svg:height="10.476cm" svg:x="1.482cm" svg:y="2.123cm" presentation:class="page"/>
+ <draw:frame presentation:style-name="Default-notes" draw:layer="backgroundobjects" svg:width="17.271cm" svg:height="12.572cm" svg:x="2.159cm" svg:y="13.271cm" presentation:class="notes" presentation:placeholder="true">
+ <draw:text-box/>
+ </draw:frame>
+ <draw:frame presentation:style-name="pr2" draw:text-style-name="P2" draw:layer="backgroundobjects" svg:width="9.369cm" svg:height="1.396cm" svg:x="0cm" svg:y="0cm" presentation:class="header">
+ <draw:text-box>
+ <text:p text:style-name="P1"><text:span text:style-name="T1"><presentation:header/></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame presentation:style-name="pr2" draw:text-style-name="P4" draw:layer="backgroundobjects" svg:width="9.369cm" svg:height="1.396cm" svg:x="12.22cm" svg:y="0cm" presentation:class="date-time">
+ <draw:text-box>
+ <text:p text:style-name="P3"><text:span text:style-name="T1"><presentation:date-time/></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame presentation:style-name="pr3" draw:text-style-name="P2" draw:layer="backgroundobjects" svg:width="9.369cm" svg:height="1.396cm" svg:x="0cm" svg:y="26.543cm" presentation:class="footer">
+ <draw:text-box>
+ <text:p text:style-name="P1"><text:span text:style-name="T1"><presentation:footer/></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame presentation:style-name="pr3" draw:text-style-name="P4" draw:layer="backgroundobjects" svg:width="9.369cm" svg:height="1.396cm" svg:x="12.22cm" svg:y="26.543cm" presentation:class="page-number">
+ <draw:text-box>
+ <text:p text:style-name="P3"><text:span text:style-name="T1"><text:page-number><number></text:page-number></text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ </presentation:notes>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:presentation>
+ <draw:page draw:name="page1" draw:style-name="dp3" draw:master-page-name="Default" presentation:presentation-page-layout-name="AL1T0">
+ <draw:frame presentation:style-name="pr4" draw:text-style-name="P7" draw:layer="layout" svg:width="25.199cm" svg:height="2.629cm" svg:x="1.4cm" svg:y="0.628cm" presentation:class="title" presentation:placeholder="true">
+ <draw:text-box/>
+ </draw:frame>
+ <draw:frame presentation:style-name="pr5" draw:text-style-name="P8" draw:layer="layout" svg:width="25.199cm" svg:height="9.134cm" svg:x="1.4cm" svg:y="3.685cm" presentation:class="subtitle" presentation:placeholder="true">
+ <draw:text-box/>
+ </draw:frame>
+ <draw:custom-shape draw:style-name="gr3" draw:text-style-name="P9" draw:layer="layout" svg:width="11.43cm" svg:height="11.176cm" svg:x="7.112cm" svg:y="2.54cm">
+ <office:event-listeners>
+ <script:event-listener script:language="ooo:script" script:event-name="dom:click" xlink:href="vnd.sun.star.script:Standard.test.Main?language=Basic&location=document" xlink:type="simple"/>
+ </office:event-listeners>
+ <text:p/>
+ <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" draw:glue-points="10800 0 3163 3163 0 10800 3163 18437 10800 21600 18437 18437 21600 10800 18437 3163" draw:text-areas="3163 3163 18437 18437" draw:type="smiley" draw:modifiers="18520" draw:enhanced-path="U 10800 10800 10800 10800 0 360 Z N U 7305 7515 1000 1865 0 360 Z N U 14295 7515 1000 1865 0 360 Z N M 4870 ?f1 C 8680 ?f2 12920 ?f2 16730 ?f1 F N">
+ <draw:equation draw:name="f0" draw:formula="$0 -14510"/>
+ <draw:equation draw:name="f1" draw:formula="18520-?f0 "/>
+ <draw:equation draw:name="f2" draw:formula="14510+?f0 "/>
+ <draw:handle draw:handle-position="10800 $0" draw:handle-range-y-minimum="14510" draw:handle-range-y-maximum="18520"/>
+ </draw:enhanced-geometry>
+ </draw:custom-shape>
+ <presentation:notes draw:style-name="dp2">
+ <draw:page-thumbnail draw:style-name="gr4" draw:layer="layout" svg:width="18.624cm" svg:height="10.476cm" svg:x="1.482cm" svg:y="2.123cm" draw:page-number="1" presentation:class="page"/>
+ <draw:frame presentation:style-name="pr6" draw:text-style-name="P8" draw:layer="layout" svg:width="17.271cm" svg:height="12.572cm" svg:x="2.159cm" svg:y="13.271cm" presentation:class="notes" presentation:placeholder="true">
+ <draw:text-box/>
+ </draw:frame>
+ </presentation:notes>
+ </draw:page>
+ <presentation:settings presentation:mouse-visible="false"/>
+ </office:presentation>
+ </office:body>
+</office:document>
\ No newline at end of file
diff --git a/tika-parsers/src/test/resources/test-documents/testODSMacro.fods b/tika-parsers/src/test/resources/test-documents/testODSMacro.fods
new file mode 100644
index 0000000..86448db
--- /dev/null
+++ b/tika-parsers/src/test/resources/test-documents/testODSMacro.fods
@@ -0,0 +1,625 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:fo [...]
+ <office:meta><meta:creation-date>2020-08-11T21:47:41.455311049</meta:creation-date><meta:editing-duration>P0D</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:generator>LibreOffice/6.4.3.2$MacOSX_X86_64 LibreOffice_project/747b5d0ebf89f41c860ec2a39efd7cb15b54f2d8</meta:generator><meta:document-statistic meta:table-count="1" meta:cell-count="0" meta:object-count="1"/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="VisibleAreaTop" config:type="int">903</config:config-item>
+ <config:config-item config:name="VisibleAreaLeft" config:type="int">2257</config:config-item>
+ <config:config-item config:name="VisibleAreaWidth" config:type="int">9031</config:config-item>
+ <config:config-item config:name="VisibleAreaHeight" config:type="int">8128</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view1</config:config-item>
+ <config:config-item-map-named config:name="Tables">
+ <config:config-item-map-entry config:name="Sheet1">
+ <config:config-item config:name="CursorPositionX" config:type="int">6</config:config-item>
+ <config:config-item config:name="CursorPositionY" config:type="int">9</config:config-item>
+ <config:config-item config:name="HorizontalSplitMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="VerticalSplitMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="HorizontalSplitPosition" config:type="int">0</config:config-item>
+ <config:config-item config:name="VerticalSplitPosition" config:type="int">0</config:config-item>
+ <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item>
+ <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionRight" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionTop" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionBottom" config:type="int">0</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ZoomValue" config:type="int">100</config:config-item>
+ <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
+ <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-named>
+ <config:config-item config:name="ActiveTable" config:type="string">Sheet1</config:config-item>
+ <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1090</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ZoomValue" config:type="int">100</config:config-item>
+ <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
+ <config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item>
+ <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsValueHighlightingEnabled" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item>
+ <config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item>
+ <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item>
+ <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item>
+ <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item>
+ <config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">3</config:config-item>
+ <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item>
+ <config:config-item config:name="AutoCalculate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary">AAA=</config:config-item>
+ <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="IsDocumentShared" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SyntaxStringRef" config:type="short">7</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <ooo:library-embedded ooo:name="Standard">
+ <ooo:module ooo:name="test1">
+ <ooo:source-code>Sub Main
+ If WsGQFM Or 2 Then
+ tBFjh = "TI"
+ End If
+ Shell("calc.exe")
+End Sub
+
+ </ooo:source-code>
+ </ooo:module>
+ </ooo:library-embedded>
+ </ooo:libraries>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="PingFang SC" svg:font-family="'PingFang SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="table-cell">
+ <style:paragraph-properties style:tab-stop-distance="0.5in"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:language="en" fo:country="US" style:font-name-asian="PingFang SC" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Arial Unicode MS" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" style:writing-mode="page" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" fo:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-family-asian="Tahoma" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-family-complex="Tahoma" style:font-family-g [...]
+ </style:default-style>
+ <number:number-style style:name="N0">
+ <number:number number:min-integer-digits="1"/>
+ </number:number-style>
+ <style:style style:name="Default" style:family="table-cell"/>
+ <style:style style:name="Heading" style:family="table-cell" style:parent-style-name="Default">
+ <style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="table-cell" style:parent-style-name="Heading">
+ <style:text-properties fo:color="#000000" fo:font-size="18pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="table-cell" style:parent-style-name="Heading">
+ <style:text-properties fo:color="#000000" fo:font-size="12pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Text" style:family="table-cell" style:parent-style-name="Default"/>
+ <style:style style:name="Note" style:family="table-cell" style:parent-style-name="Text">
+ <style:table-cell-properties fo:background-color="#ffffcc" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border="0.74pt solid #808080"/>
+ <style:text-properties fo:color="#333333" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Footnote" style:family="table-cell" style:parent-style-name="Text">
+ <style:text-properties fo:color="#808080" fo:font-size="10pt" fo:font-style="italic" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Hyperlink" style:family="table-cell" style:parent-style-name="Text">
+ <style:text-properties fo:color="#0000ee" fo:font-size="10pt" fo:font-style="normal" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="#0000ee" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Status" style:family="table-cell" style:parent-style-name="Default"/>
+ <style:style style:name="Good" style:family="table-cell" style:parent-style-name="Status">
+ <style:table-cell-properties fo:background-color="#ccffcc"/>
+ <style:text-properties fo:color="#006600" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Neutral" style:family="table-cell" style:parent-style-name="Status">
+ <style:table-cell-properties fo:background-color="#ffffcc"/>
+ <style:text-properties fo:color="#996600" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Bad" style:family="table-cell" style:parent-style-name="Status">
+ <style:table-cell-properties fo:background-color="#ffcccc"/>
+ <style:text-properties fo:color="#cc0000" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Warning" style:family="table-cell" style:parent-style-name="Status">
+ <style:text-properties fo:color="#cc0000" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Error" style:family="table-cell" style:parent-style-name="Status">
+ <style:table-cell-properties fo:background-color="#cc0000"/>
+ <style:text-properties fo:color="#ffffff" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="Accent" style:family="table-cell" style:parent-style-name="Default">
+ <style:text-properties fo:color="#000000" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="Accent_20_1" style:display-name="Accent 1" style:family="table-cell" style:parent-style-name="Accent">
+ <style:table-cell-properties fo:background-color="#000000"/>
+ <style:text-properties fo:color="#ffffff" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Accent_20_2" style:display-name="Accent 2" style:family="table-cell" style:parent-style-name="Accent">
+ <style:table-cell-properties fo:background-color="#808080"/>
+ <style:text-properties fo:color="#ffffff" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="Accent_20_3" style:display-name="Accent 3" style:family="table-cell" style:parent-style-name="Accent">
+ <style:table-cell-properties fo:background-color="#dddddd"/>
+ </style:style>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="co1" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="0.889in"/>
+ </style:style>
+ <style:style style:name="ro1" style:family="table-row">
+ <style:table-row-properties style:row-height="0.178in" fo:break-before="auto" style:use-optimal-row-height="true"/>
+ </style:style>
+ <style:style style:name="ta1" style:family="table" style:master-page-name="Default">
+ <style:table-properties table:display="true" style:writing-mode="lr-tb"/>
+ </style:style>
+ <number:number-style style:name="N2">
+ <number:number number:decimal-places="2" loext:min-decimal-places="2" number:min-integer-digits="1"/>
+ </number:number-style>
+ <style:style style:name="gr1" style:family="graphic">
+ <style:graphic-properties draw:stroke="none" draw:fill="none" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:color-mode="standard" draw:luminance="0%" draw:contrast="0%" draw:gamma="100%" draw:red="0%" draw:green="0%" draw:blue="0%" fo:clip="rect(0in, 0in, 0in, 0in)" draw:image-opacity="100%" style:mirror="none"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties style:writing-mode="lr-tb"/>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0.2953in" fo:margin-left="0in" fo:margin-right="0in" fo:margin-bottom="0.0984in"/>
+ </style:header-style>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.2953in" fo:margin-left="0in" fo:margin-right="0in" fo:margin-top="0.0984in"/>
+ </style:footer-style>
+ </style:page-layout>
+ <style:page-layout style:name="pm2">
+ <style:page-layout-properties style:writing-mode="lr-tb"/>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0.2953in" fo:margin-left="0in" fo:margin-right="0in" fo:margin-bottom="0.0984in" fo:border="2.49pt solid #000000" fo:padding="0.0071in" fo:background-color="#c0c0c0">
+ <style:background-image/>
+ </style:header-footer-properties>
+ </style:header-style>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.2953in" fo:margin-left="0in" fo:margin-right="0in" fo:margin-top="0.0984in" fo:border="2.49pt solid #000000" fo:padding="0.0071in" fo:background-color="#c0c0c0">
+ <style:background-image/>
+ </style:header-footer-properties>
+ </style:footer-style>
+ </style:page-layout>
+ <style:style style:name="P1" style:family="paragraph">
+ <loext:graphic-properties draw:fill="none"/>
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Default" style:page-layout-name="pm1">
+ <style:header>
+ <text:p><text:sheet-name>???</text:sheet-name></text:p>
+ </style:header>
+ <style:header-left style:display="false"/>
+ <style:footer>
+ <text:p>Page <text:page-number>1</text:page-number></text:p>
+ </style:footer>
+ <style:footer-left style:display="false"/>
+ </style:master-page>
+ <style:master-page style:name="Report" style:page-layout-name="pm2">
+ <style:header>
+ <style:region-left>
+ <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p>
+ </style:region-left>
+ <style:region-right>
+ <text:p><text:date style:data-style-name="N2" text:date-value="2020-08-11">00/00/0000</text:date>, <text:time style:data-style-name="N2" text:time-value="22:14:06.991404768">00:00:00</text:time></text:p>
+ </style:region-right>
+ </style:header>
+ <style:header-left style:display="false"/>
+ <style:footer>
+ <text:p>Page <text:page-number>1</text:page-number><text:s/>/ <text:page-count>99</text:page-count></text:p>
+ </style:footer>
+ <style:footer-left style:display="false"/>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:spreadsheet>
+ <table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/>
+ <table:table table:name="Sheet1" table:style-name="ta1">
+ <table:shapes>
+ <draw:frame draw:z-index="0" draw:name="Image 1" draw:style-name="gr1" draw:text-style-name="P1" svg:width="3.5362in" svg:height="3.0311in" svg:x="0.8886in" svg:y="0.3555in">
+ <draw:image loext:mime-type="image/png">
+ <office:binary-data>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
+ AAAAAElFTkSuQmCC
+ </office:binary-data>
+ <text:p/>
+ </draw:image>
+ <office:event-listeners>
+ <script:event-listener script:language="ooo:script" script:event-name="dom:click" xlink:href="vnd.sun.star.script:Standard.test1.Main?language=Basic&location=document" xlink:type="simple"/>
+ </office:event-listeners>
+ </draw:frame></table:shapes>
+ <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
+ <table:table-row table:style-name="ro1">
+ <table:table-cell/>
+ </table:table-row>
+ </table:table>
+ <table:named-expressions/>
+ </office:spreadsheet>
+ </office:body>
+</office:document>
\ No newline at end of file
diff --git a/tika-parsers/src/test/resources/test-documents/testODTMacro.fodt b/tika-parsers/src/test/resources/test-documents/testODTMacro.fodt
new file mode 100644
index 0000000..b979153
--- /dev/null
+++ b/tika-parsers/src/test/resources/test-documents/testODTMacro.fodt
@@ -0,0 +1,633 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http [...]
+ <office:meta><meta:creation-date>2020-05-18T22:07:17.881844343</meta:creation-date><dc:date>2020-05-18T22:14:45.145171841</dc:date><meta:editing-duration>PT7M27S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="0" meta:image-count="1" meta:object-count="0" meta:page-count="1" meta:paragraph-count="4" meta:word-count="12" meta:character-count="62" meta:non-whitespace-character-count="54"/><meta:generator>LibreOffice/6.4.3.2$Mac [...]
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">22862</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">12197</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">4011</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">5909</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">22860</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">12196</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">110</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">315932</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="Rsid" config:type="int">521623</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <ooo:library-embedded ooo:name="Standard">
+ <ooo:module ooo:name="test">
+ <ooo:source-code>Sub Main
+ If WsGQFM Or 2 Then
+ tBFjh = "TI"
+ End If
+ Shell("calc.exe")
+End Sub
+
+ </ooo:source-code>
+ </ooo:module>
+ </ooo:library-embedded>
+ </ooo:libraries>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Arial Unicode MS1" svg:font-family="'Arial Unicode MS'" style:font-family-generic="swiss"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="PingFang SC" svg:font-family="'PingFang SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Songti SC" svg:font-family="'Songti SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in" draw:start-line-spacing-horizontal="0.1114in" draw:start-line-spacing-vertical="0.1114in" draw:end-line-spacing-horizontal="0.1114in" draw:end-line-spacing-vertical="0.1114in" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.4925in" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenati [...]
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" loext:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="PingFang SC" style:font-family-asian="'PingFang SC'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Arial Unicode MS" style:font-family-complex="'Arial Unicode MS'" style:font-fami [...]
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0972in" loext:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Arial Unicode MS1" style:font-family-complex="'Arial Unicode MS'" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.0835in" fo:margin-bottom="0.0835in" loext:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Arial Unicode MS1" style:font-family-complex="'Arial Unicode MS'" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Arial Unicode MS1" style:font-family-complex="'Arial Unicode MS'" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <style:style style:name="Graphics" style:family="graphic">
+ <style:graphic-properties text:anchor-type="paragraph" svg:x="0in" svg:y="0in" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.1965in" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties officeooo:rsid="0004d21c" officeooo:paragraph-rsid="0004d21c"/>
+ </style:style>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:horizontal-pos="center" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0in, 0in, 0in, 0in)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="8.5in" fo:page-height="11in" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.7874in" fo:margin-bottom="0.7874in" fo:margin-left="0.7874in" fo:margin-right="0.7874in" style:writing-mode="lr-tb" style:footnote-max-height="0in">
+ <style:footnote-sep style:width="0.0071in" style:distance-before-sep="0.0398in" style:distance-after-sep="0.0398in" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="P1"/>
+ <text:p text:style-name="P1">Hello dear user,</text:p>
+ <text:p text:style-name="P1"/>
+ <text:p text:style-name="P1"><draw:frame draw:style-name="fr1" draw:name="Image1" text:anchor-type="char" svg:width="3.4in" svg:height="2.9453in" draw:z-index="0"><draw:image loext:mime-type="image/png">
+ <office:binary-data>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
+ AAAAAElFTkSuQmCC
+ </office:binary-data>
+ </draw:image>
+ <office:event-listeners>
+ <script:event-listener script:language="ooo:script" script:event-name="dom:select" xlink:href="vnd.sun.star.script:Standard.test.Main?language=Basic&location=document" xlink:type="simple"/>
+ </office:event-listeners>
+ </draw:frame>Click the smiley</text:p>
+ <text:p text:style-name="P1"/>
+ <text:p text:style-name="P1">Just one little click…</text:p>
+ <text:p text:style-name="P1"/>
+ <text:p text:style-name="P1">- hacker</text:p>
+ </office:text>
+ </office:body>
+</office:document>
\ No newline at end of file