diff --git a/tests/generate.sh b/tests/generate.sh
index fd99caa33..090691f02 100755
--- a/tests/generate.sh
+++ b/tests/generate.sh
@@ -9,6 +9,7 @@
../pandoc -r native -s -w rtf testsuite.native > writer.rtf
../pandoc -r native -s -w man testsuite.native > writer.man
../pandoc -r native -s -w mediawiki testsuite.native > writer.mediawiki
+../pandoc -r native -s -w opendocument testsuite.native > writer.opendocument
sed -e '/^, Header 1 \[Str "HTML",Space,Str "Blocks"\]/,/^, HorizontalRule/d' testsuite.native | ../pandoc -r native -w docbook -s > writer.docbook
sed -e '/^, Header 1 \[Str "LaTeX"\]/,/^, HorizontalRule/d' testsuite.native | ../pandoc -r native -w context -s > writer.context
diff --git a/tests/runtests.pl b/tests/runtests.pl
index 9457b3eb3..c7573b3fb 100644
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -14,7 +14,7 @@ unless (-x $script) { die "$script is not executable.\n"; }
print "Writer tests:\n";
-my @writeformats = ("html", "latex", "texinfo", "rst", "rtf", "markdown", "mediawiki", "man", "native"); # docbook, context, and s5 handled separately
+my @writeformats = ("html", "latex", "texinfo", "rst", "rtf", "markdown", "mediawiki", "opendocument", "man", "native"); # docbook, context, and s5 handled separately
my $source = "testsuite.native";
sub test_results
diff --git a/tests/tables.opendocument b/tests/tables.opendocument
new file mode 100644
index 000000000..d3d646b99
--- /dev/null
+++ b/tests/tables.opendocument
@@ -0,0 +1,466 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple table with
+ caption:
+
+
+
+
+
+
+
+
+ Right
+
+
+ Left
+
+
+ Center
+
+
+ Default
+
+
+
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ Demonstration of simple table syntax.
+ Simple table without
+ caption:
+
+
+
+
+
+
+
+
+ Right
+
+
+ Left
+
+
+ Center
+
+
+ Default
+
+
+
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ Simple table indented two
+ spaces:
+
+
+
+
+
+
+
+
+ Right
+
+
+ Left
+
+
+ Center
+
+
+ Default
+
+
+
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+ Demonstration of simple table syntax.
+ Multiline table with
+ caption:
+
+
+
+
+
+
+
+
+ Centered Header
+
+
+ Left Aligned
+
+
+ Right Aligned
+
+
+ Default aligned
+
+
+
+
+
+ First
+
+
+ row
+
+
+ 12.0
+
+
+ Example of a row that spans multiple lines.
+
+
+
+
+ Second
+
+
+ row
+
+
+ 5.0
+
+
+ Here's another one. Note the blank line between rows.
+
+
+
+ Here's the caption. It may span multiple lines.
+ Multiline table without
+ caption:
+
+
+
+
+
+
+
+
+ Centered Header
+
+
+ Left Aligned
+
+
+ Right Aligned
+
+
+ Default aligned
+
+
+
+
+
+ First
+
+
+ row
+
+
+ 12.0
+
+
+ Example of a row that spans multiple lines.
+
+
+
+
+ Second
+
+
+ row
+
+
+ 5.0
+
+
+ Here's another one. Note the blank line between rows.
+
+
+
+
+
diff --git a/tests/writer.opendocument b/tests/writer.opendocument
new file mode 100644
index 000000000..6fc62a1f8
--- /dev/null
+++ b/tests/writer.opendocument
@@ -0,0 +1,1566 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pandoc
+ Test Suite
+ John MacFarlane
+ Anonymous
+ July 17, 2006
+ This is a set of tests for
+ pandoc. Most of them are adapted from John
+ Gruber’s markdown test suite.
+ Headers
+ Level
+ 2 with an
+ embedded link
+ Level
+ 3 with
+ emphasis
+ Level
+ 4
+ Level
+ 5
+ Level
+ 1
+ Level
+ 2 with
+ emphasis
+ Level
+ 3
+ with no blank line
+ Level
+ 2
+ with no blank line
+ Paragraphs
+ Here’s a regular
+ paragraph.
+ In Markdown 1.0.0 and
+ earlier. Version 8. This line turns into a list item.
+ Because a hard-wrapped line in the middle of a
+ paragraph looked like a list item.
+ Here’s one with a
+ bullet. * criminey.
+ There should be a hard line
+ breakhere.
+ Block
+ Quotes
+ E-mail style:
+ This is a block quote. It is pretty short.
+ Code in a block quote:
+ sub status {
+ print "working";
+ }
+ A list:
+
+
+ item one
+
+
+ item two
+
+
+ Nested block quotes:
+ nested
+ nested
+ This should not be a block
+ quote: 2 > 1.
+ And a following
+ paragraph.
+ Code
+ Blocks
+ Code:
+ ---- (should be four hyphens)
+
+ sub status {
+ print "working";
+ }
+
+ this code block is indented by one tab
+ And:
+ this code block is indented by two tabs
+
+ These should not be escaped: \$ \\ \> \[ \{
+ Lists
+ Unordered
+ Asterisks tight:
+
+
+ asterisk 1
+
+
+ asterisk 2
+
+
+ asterisk 3
+
+
+ Asterisks loose:
+
+
+ asterisk 1
+
+
+ asterisk 2
+
+
+ asterisk 3
+
+
+ Pluses tight:
+
+
+ Plus 1
+
+
+ Plus 2
+
+
+ Plus 3
+
+
+ Pluses loose:
+
+
+ Plus 1
+
+
+ Plus 2
+
+
+ Plus 3
+
+
+ Minuses tight:
+
+
+ Minus 1
+
+
+ Minus 2
+
+
+ Minus 3
+
+
+ Minuses loose:
+
+
+ Minus 1
+
+
+ Minus 2
+
+
+ Minus 3
+
+
+ Ordered
+ Tight:
+
+
+ First
+
+
+ Second
+
+
+ Third
+
+
+ and:
+
+
+ One
+
+
+ Two
+
+
+ Three
+
+
+ Loose using tabs:
+
+
+ First
+
+
+ Second
+
+
+ Third
+
+
+ and using spaces:
+
+
+ One
+
+
+ Two
+
+
+ Three
+
+
+ Multiple
+ paragraphs:
+
+
+ Item 1, graf one.
+ Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.
+
+
+ Item 2.
+
+
+ Item 3.
+
+
+ Nested
+
+
+ Tab
+
+
+ Tab
+
+
+ Tab
+
+
+
+
+
+
+ Here’s
+ another:
+
+
+ First
+
+
+ Second:
+
+
+ Fee
+
+
+ Fie
+
+
+ Foe
+
+
+
+
+ Third
+
+
+ Same thing but with
+ paragraphs:
+
+
+ First
+
+
+ Second:
+
+
+ Fee
+
+
+ Fie
+
+
+ Foe
+
+
+
+
+ Third
+
+
+ Tabs
+ and spaces
+
+
+ this is a list item indented with tabs
+
+
+ this is a list item indented with spaces
+
+
+ this is an example list item indented with tabs
+
+
+ this is an example list item indented with spaces
+
+
+
+
+ Fancy
+ list markers
+
+
+ begins with 2
+
+
+ and now 3
+ with a continuation
+
+
+ sublist with roman numerals, starting with 4
+
+
+ more items
+
+
+ a subsublist
+
+
+ a subsublist
+
+
+
+
+
+
+ Nesting:
+
+
+ Upper Alpha
+
+
+ Upper Roman.
+
+
+ Decimal start with 6
+
+
+ Lower alpha with paren
+
+
+
+
+
+
+
+
+ Autonumbering:
+
+
+ Autonumber.
+
+
+ More.
+
+
+ Nested.
+
+
+
+
+ Should not be a list
+ item:
+ M.A. 2007
+ B. Williams
+ Definition
+ Lists
+ Tight using spaces:
+ apple
+ red fruit
+ orange
+ orange fruit
+ banana
+ yellow fruit
+ Tight using tabs:
+ apple
+ red fruit
+ orange
+ orange fruit
+ banana
+ yellow fruit
+ Loose:
+ apple
+ red fruit
+ orange
+ orange fruit
+ banana
+ yellow fruit
+ Multiple blocks with
+ italics:
+ apple
+ red fruit
+ contains seeds, crisp, pleasant to taste
+ orange
+ orange fruit
+ { orange code block }
+ orange block quote
+ HTML
+ Blocks
+ Simple block on one
+ line:
+ foo
+ And nested without
+ indentation:
+ foo
+ bar
+ Interpreted markdown in a
+ table:
+ This is
+ emphasized
+ And this is
+ strong
+ Here’s a simple
+ block:
+ foo
+ This should be a code block,
+ though:
+ <div>
+ foo
+ </div>
+ As should this:
+ <div>foo</div>
+ Now, nested:
+ foo
+ This should just be an HTML
+ comment:
+ Multiline:
+ Code block:
+ <!-- Comment -->
+ Just plain comment, with
+ trailing spaces on the line:
+ Code:
+ <hr />
+ Hr’s:
+ Inline
+ Markup
+ This is
+ emphasized,
+ and so
+ is this.
+ This is
+ strong,
+ and so
+ is this.
+ An
+ emphasized link.
+ This is strong and em.
+ So is
+ this
+ word.
+ This is strong and em.
+ So is
+ this
+ word.
+ This is code:
+ >,
+ $,
+ \,
+ \$,
+ <html>.
+ This is strikeout.
+ Superscripts:
+ abcd
+ ahello
+ ahello there.
+ Subscripts:
+ H2O,
+ H23O,
+ Hmany of themO.
+ These should not be
+ superscripts or subscripts, because of the unescaped
+ spaces: a^b c^d, a~b c~d.
+ Smart
+ quotes, ellipses,
+ dashes
+ “Hello,” said
+ the spider.
+ “‘Shelob’ is my name.”
+ ‘A’,
+ ‘B’, and ‘C’ are
+ letters.
+ ‘Oak,’
+ ‘elm,’ and ‘beech’ are names of
+ trees. So is ‘pine.’
+ ‘He said, “I want to go.”’
+ Were you alive in the 70’s?
+ Here is some quoted
+ ‘code’
+ and a
+ “quoted link”.
+ Some dashes: one—two
+ — three—four — five.
+ Dashes between numbers:
+ 5–7, 255–66, 1987–1999.
+ Ellipses…and…and….
+ LaTeX
+
+
+ \cite[22-23]{smith.1899}
+
+
+ \doublespacing
+
+
+ 2+2=4
+
+
+ x ∈ y
+
+
+ α ∧ ω
+
+
+ 223
+
+
+ p-Tree
+
+
+ \frac{d}{dx}f(x)=\limh → 0\frac{f(x+h)-f(x)}{h}
+
+
+ Here’s one that has a line break in it: α+ω × x2.
+
+
+ These shouldn’t be
+ math:
+
+
+ To get the famous equation, write $e = mc^2$.
+
+
+ $22,000 is a lot of money. So is $34,000. (It worked if “lot” is emphasized.)
+
+
+ Shoes ($20) and socks ($5).
+
+
+ Escaped $: $73 this should be emphasized 23$.
+
+
+ Here’s a LaTeX
+ table:
+ \begin{tabular}{|l|l|}\hline
+Animal & Number \\ \hline
+Dog & 2 \\
+Cat & 1 \\ \hline
+\end{tabular}
+ Special
+ Characters
+ Here is some
+ unicode:
+
+
+ I hat: Î
+
+
+ o umlaut: ö
+
+
+ section: §
+
+
+ set membership: ∈
+
+
+ copyright: ©
+
+
+ AT&T has an ampersand in
+ their name.
+ AT&T is another way to
+ write it.
+ This & that.
+ 4 < 5.
+ 6 > 5.
+ Backslash: \
+ Backtick: `
+ Asterisk: *
+ Underscore: _
+ Left brace: {
+ Right brace: }
+ Left bracket: [
+ Right bracket: ]
+ Left paren: (
+ Right paren: )
+ Greater-than: >
+ Hash: #
+ Period: .
+ Bang: !
+ Plus: +
+ Minus: -
+ Links
+ Explicit
+ Just a
+ URL.
+ URL and title.
+ URL and title.
+ URL and title.
+ URL and title
+ URL and title
+ with_underscore
+ Email link
+ Empty.
+ Reference
+ Foo
+ bar.
+ Foo
+ bar.
+ Foo
+ bar.
+ With
+ embedded [brackets].
+ b
+ by itself should be a link.
+ Indented
+ once.
+ Indented
+ twice.
+ Indented
+ thrice.
+ This should [not][] be a
+ link.
+ [not]: /url
+ Foo
+ bar.
+ Foo
+ biz.
+ With
+ ampersands
+ Here’s a
+ link with an ampersand in the URL.
+ Here’s a link with an
+ amersand in the link text:
+ AT&T.
+ Here’s an
+ inline link.
+ Here’s an
+ inline link in pointy braces.
+ Autolinks
+ With an ampersand:
+ http://example.com/?foo=1&bar=2
+
+
+ In a list?
+
+
+ http://example.com/
+
+
+ It should.
+
+
+ An e-mail address:
+ nobody@nowhere.net
+ Blockquoted: http://example.com/
+ Auto-links should not occur
+ here:
+ <http://example.com/>
+ or here: <http://example.com/>
+ Images
+ From
+ “Voyage dans la Lune” by Georges Melies
+ (1902):
+
+ Here is a movie
+
+ icon.
+ Footnotes
+ Here is a footnote
+ reference,1
+ Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.
+ and
+ another.2
+ Here’s the long note. This one contains multiple blocks.
+ Subsequent blocks are indented to show that they belong to the footnote (as with list items).
+ { <code> }
+ If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.
+ This should
+ not be a
+ footnote reference, because it contains a space.[^my
+ note] Here is an inline
+ note.3
+ This is easier to type. Inline notes may contain links and ] verbatim characters, as well as [bracketed text].
+ Notes can go in quotes.4
+ In quote.
+
+
+ And in list items.5
+ In list.
+
+
+ This paragraph should not be
+ part of the note, as it is not indented.
+
+
+
+