aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2023-03-21 21:08:02 -0700
committerJohn MacFarlane <[email protected]>2023-03-25 21:50:54 -0700
commit31bf02baa4dd7312e65b9e3158db7faf62dcf5ac (patch)
tree4daf2995b4d442b773b8346da29f55d269bed996 /test
parentd8ec5c4b752c3fd09f0c5abdd7f1f5097835a6de (diff)
Add typst writer.typst-writer
See #8713. Still needed: - PDF-via-typst support - fuller table support
Diffstat (limited to 'test')
-rw-r--r--test/Tests/Old.hs3
-rw-r--r--test/tables.typst142
-rw-r--r--test/writer.typst709
3 files changed, 854 insertions, 0 deletions
diff --git a/test/Tests/Old.hs b/test/Tests/Old.hs
index 957a41287..81a5adbf2 100644
--- a/test/Tests/Old.hs
+++ b/test/Tests/Old.hs
@@ -193,6 +193,9 @@ tests pandocPath =
, testGroup "ms"
[ testGroup "writer" $ writerTests' "ms"
]
+ , testGroup "typst"
+ [ testGroup "writer" $ writerTests' "typst"
+ ]
, testGroup "creole"
[ test' "reader" ["-r", "creole", "-w", "native", "-s"]
"creole-reader.txt" "creole-reader.native"
diff --git a/test/tables.typst b/test/tables.typst
new file mode 100644
index 000000000..0d516b0e0
--- /dev/null
+++ b/test/tables.typst
@@ -0,0 +1,142 @@
+Simple table with caption:
+
+#align(center)[#table(
+ columns: 4,
+ inset: 6pt,
+ align: auto,
+ [Right], [Left], [Center], [Default],
+ [12],
+ [12],
+ [12],
+ [12],
+ [123],
+ [123],
+ [123],
+ [123],
+ [1],
+ [1],
+ [1],
+ [1],
+)
+#align(center, [Demonstration of simple table syntax.])
+]
+
+Simple table without caption:
+
+#align(center)[#table(
+ columns: 4,
+ inset: 6pt,
+ align: auto,
+ [Right], [Left], [Center], [Default],
+ [12],
+ [12],
+ [12],
+ [12],
+ [123],
+ [123],
+ [123],
+ [123],
+ [1],
+ [1],
+ [1],
+ [1],
+)
+]
+
+Simple table indented two spaces:
+
+#align(center)[#table(
+ columns: 4,
+ inset: 6pt,
+ align: auto,
+ [Right], [Left], [Center], [Default],
+ [12],
+ [12],
+ [12],
+ [12],
+ [123],
+ [123],
+ [123],
+ [123],
+ [1],
+ [1],
+ [1],
+ [1],
+)
+#align(center, [Demonstration of simple table syntax.])
+]
+
+Multiline table with caption:
+
+#align(center)[#table(
+ columns: 4,
+ inset: 6pt,
+ align: auto,
+ [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.],
+)
+#align(center, [Here’s the caption. It may span multiple lines.])
+]
+
+Multiline table without caption:
+
+#align(center)[#table(
+ columns: 4,
+ inset: 6pt,
+ align: auto,
+ [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.],
+)
+]
+
+Table without column headers:
+
+#align(center)[#table(
+ columns: 4,
+ inset: 6pt,
+ align: auto,
+ [12],
+ [12],
+ [12],
+ [12],
+ [123],
+ [123],
+ [123],
+ [123],
+ [1],
+ [1],
+ [1],
+ [1],
+)
+]
+
+Multiline table without column headers:
+
+#align(center)[#table(
+ columns: 4,
+ inset: 6pt,
+ align: auto,
+ [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/test/writer.typst b/test/writer.typst
new file mode 100644
index 000000000..aa14a59a6
--- /dev/null
+++ b/test/writer.typst
@@ -0,0 +1,709 @@
+#set page(
+ numbering: "1"
+)
+#set par(justify: true)
+#set text(
+)
+#set heading(
+)
+
+#align(center)[#block(inset: 2em)[
+ #text(weight: "bold", size: 18pt)[Pandoc Test Suite] \
+ John MacFarlane \
+ Anonymous \
+ July 17, 2006
+]]
+
+#let definition(term, ..defs) = [
+ #strong(term) \
+ #(defs.pos().join("\n"))
+]
+
+#let blockquote(body) = [
+ #set text( size: 0.92em )
+ #block(inset: (left: 1.5em, top: 0.2em, bottom: 0.2em))[#body]
+]
+
+#let horizontalrule = [
+ #line(start: (25%,0%), end: (75%,0%))
+]
+
+#let endnote(num, contents) = [
+ #stack(dir: ltr, spacing: 3pt, super[#num], contents)
+]
+
+
+
+This is a set of tests for pandoc. Most of them are adapted from John Gruber’s
+markdown test suite.
+
+#horizontalrule
+
+= Headers
+#label("headers")
+== Level 2 with an #link("/url")[embedded link]
+#label("level-2-with-an-embedded-link")
+=== Level 3 with #emph[emphasis]
+#label("level-3-with-emphasis")
+==== Level 4
+#label("level-4")
+===== Level 5
+#label("level-5")
+= Level 1
+#label("level-1")
+== Level 2 with #emph[emphasis]
+#label("level-2-with-emphasis")
+=== Level 3
+#label("level-3")
+with no blank line
+
+== Level 2
+#label("level-2")
+with no blank line
+
+#horizontalrule
+
+= Paragraphs
+#label("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 break \
+here.
+
+#horizontalrule
+
+= Block Quotes
+#label("block-quotes")
+E-mail style:
+
+#blockquote[
+This is a block quote. It is pretty short.
+]
+
+#blockquote[
+Code in a block quote:
+
+```
+sub status {
+ print "working";
+}
+```
+
+A list:
+
+1. item one
+2. item two
+
+Nested block quotes:
+
+#blockquote[
+nested
+]
+
+#blockquote[
+nested
+]
+]
+
+This should not be a block quote: 2 \> 1.
+
+And a following paragraph.
+
+#horizontalrule
+
+= Code Blocks
+#label("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: \$ \\ \> \[ \{
+```
+
+#horizontalrule
+
+= Lists
+#label("lists")
+== Unordered
+#label("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
+#label("ordered")
+Tight:
+
+1. First
+2. Second
+3. Third
+
+and:
+
+1. One
+2. Two
+3. Three
+
+Loose using tabs:
+
+1. First
+
+2. Second
+
+3. Third
+
+and using spaces:
+
+1. One
+
+2. Two
+
+3. Three
+
+Multiple paragraphs:
+
+1. Item 1, graf one.
+
+ Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.
+
+2. Item 2.
+
+3. Item 3.
+
+== Nested
+#label("nested")
+- Tab
+ - Tab
+ - Tab
+
+Here’s another:
+
+1. First
+2. Second:
+ - Fee
+ - Fie
+ - Foe
+3. Third
+
+Same thing but with paragraphs:
+
+1. First
+
+2. Second:
+
+ - Fee
+ - Fie
+ - Foe
+
+3. Third
+
+== Tabs and spaces
+#label("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
+#label("fancy-list-markers")
+(2) begins with 2
+
+(3) and now 3
+
+ with a continuation
+
+ iv. sublist with roman numerals, starting with 4
+ v. more items
+ (A) a subsublist
+ (B) a subsublist
+
+Nesting:
+
+A. Upper Alpha
+ I. Upper Roman.
+ (6) Decimal start with 6
+ c) Lower alpha with paren
+
+Autonumbering:
+
+1. Autonumber.
+2. More.
+ 1. Nested.
+
+Should not be a list item:
+
+M.A. 2007
+
+B. Williams
+
+#horizontalrule
+
+= Definition Lists
+#label("definition-lists")
+Tight using spaces:
+
+#definition[apple][red fruit]
+
+#definition[orange][orange fruit]
+
+#definition[banana][yellow fruit]
+
+Tight using tabs:
+
+#definition[apple][red fruit]
+
+#definition[orange][orange fruit]
+
+#definition[banana][yellow fruit]
+
+Loose:
+
+#definition[apple][red fruit
+
+]
+
+#definition[orange][orange fruit
+
+]
+
+#definition[banana][yellow fruit
+
+]
+
+Multiple blocks with italics:
+
+#definition[#emph[apple]][red fruit
+
+contains seeds, crisp, pleasant to taste
+
+]
+
+#definition[#emph[orange]][orange fruit
+
+```
+{ orange code block }
+```
+
+#blockquote[
+orange block quote
+]
+
+]
+
+Multiple definitions, tight:
+
+#definition[apple][red fruit][computer]
+
+#definition[orange][orange fruit][bank]
+
+Multiple definitions, loose:
+
+#definition[apple][red fruit
+
+][computer
+
+]
+
+#definition[orange][orange fruit
+
+][bank
+
+]
+
+Blank line after term, indented marker, alternate markers:
+
+#definition[apple][red fruit
+
+][computer
+
+]
+
+#definition[orange][orange fruit
+
+1. sublist
+2. sublist
+
+]
+
+= HTML Blocks
+#label("html-blocks")
+Simple block on one line:
+
+foo
+And nested without indentation:
+
+foo
+
+bar
+Interpreted markdown in a table:
+
+This is #emph[emphasized]
+And this is #strong[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:
+
+#horizontalrule
+
+= Inline Markup
+#label("inline-markup")
+This is #emph[emphasized], and so #emph[is this].
+
+This is #strong[strong], and so #strong[is this].
+
+An #emph[#link("/url")[emphasized link]].
+
+#strong[#emph[This is strong and em.]]
+
+So is #strong[#emph[this]] word.
+
+#strong[#emph[This is strong and em.]]
+
+So is #strong[#emph[this]] word.
+
+This is code: `>`, `$`, `\`, `\$`, `<html>`.
+
+#strike[This is #emph[strikeout].]
+
+Superscripts: a#super[bc]d a#super[#emph[hello]] a#super[hello there].
+
+Subscripts: H#sub[2]O, H#sub[23]O, H#sub[many of them]O.
+
+These should not be superscripts or subscripts, because of the unescaped spaces:
+a^b c^d, a~b c~d.
+
+#horizontalrule
+
+= Smart quotes, ellipses, dashes
+#label("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
+"#link("http://example.com/?foo=1&bar=2")[quoted link]".
+
+Some dashes: one—two — three—four — five.
+
+Dashes between numbers: 5–7, 255–66, 1987–1999.
+
+Ellipses…and…and….
+
+#horizontalrule
+
+= LaTeX
+#label("latex")
+-
+- $2 plus 2 eq 4$
+- $x in y$
+- $alpha and omega$
+- $223$
+- $p$-Tree
+- Here’s some display math:
+ $ frac(d, d x) f lr((x)) eq lim_(h arrow.r 0) frac(f lr((x plus h)) minus f lr((x)), h) $
+- Here’s one that has a line break in it: $alpha plus omega times x^2$.
+
+These shouldn’t be math:
+
+- To get the famous equation, write `$e = mc^2$`.
+- \$22,000 is a #emph[lot] of money. So is \$34,000. (It worked if "lot" is
+ emphasized.)
+- Shoes (\$20) and socks (\$5).
+- Escaped `$`: \$73 #emph[this should be emphasized] 23\$.
+
+Here’s a LaTeX table:
+
+#horizontalrule
+
+= Special Characters
+#label("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: -
+
+#horizontalrule
+
+= Links
+#label("links")
+== Explicit
+#label("explicit")
+Just a #link("/url/")[URL].
+
+#link("/url/")[URL and title].
+
+#link("/url/")[URL and title].
+
+#link("/url/")[URL and title].
+
+#link("/url/")[URL and title]
+
+#link("/url/")[URL and title]
+
+#link("/url/with_underscore")[with\_underscore]
+
+#link("mailto:[email protected]")[Email link]
+
+#link("")[Empty].
+
+== Reference
+#label("reference")
+Foo #link("/url/")[bar].
+
+With #link("/url/")[embedded \[brackets\]].
+
+#link("/url/")[b] by itself should be a link.
+
+Indented #link("/url")[once].
+
+Indented #link("/url")[twice].
+
+Indented #link("/url")[thrice].
+
+This should \[not\]\[\] be a link.
+
+```
+[not]: /url
+```
+
+Foo #link("/url/")[bar].
+
+Foo #link("/url/")[biz].
+
+== With ampersands
+#label("with-ampersands")
+Here’s a
+#link("http://example.com/?foo=1&bar=2")[link with an ampersand in the URL].
+
+Here’s a link with an amersand in the link text: #link("http://att.com/")[AT&T].
+
+Here’s an #link("/script?foo=1&bar=2")[inline link].
+
+Here’s an #link("/script?foo=1&bar=2")[inline link in pointy braces].
+
+== Autolinks
+#label("autolinks")
+With an ampersand:
+#link("http://example.com/?foo=1&bar=2")[http://example.com/?foo\=1&bar\=2]
+
+- In a list?
+- #link("http://example.com/")
+- It should.
+
+An e-mail address: #link("mailto:[email protected]")[nobody\@nowhere.net]
+
+#blockquote[
+Blockquoted: #link("http://example.com/")
+]
+
+Auto-links should not occur here: `<http://example.com/>`
+
+```
+or here: <http://example.com/>
+```
+
+#horizontalrule
+
+= Images
+#label("images")
+From "Voyage dans la Lune" by Georges Melies (1902):
+
+#figure([#image("lalune.jpg")],
+ caption: [
+ lalune
+ ]
+)
+
+Here is a movie #image("movie.jpg") icon.
+
+#horizontalrule
+
+= Footnotes
+#label("footnotes")
+Here is a footnote reference,#super[1] and another.#super[2] This should
+#emph[not] be a footnote reference, because it contains a space.\[^my note\]
+Here is an inline note.#super[3]
+
+#blockquote[
+Notes can go in quotes.#super[4]
+]
+
+1. And in list items.#super[5]
+
+This paragraph should not be part of the note, as it is not indented.
+
+#v(1em)
+#block[
+#horizontalrule
+#set text(size: .88em)
+#v(3pt) // otherwise first note marker is swallowed, bug?
+
+#endnote([1], [Here is the footnote. It can go anywhere after the footnote
+reference. It need not be placed at the end of the document.])
+
+#endnote([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.])
+
+#endnote([3], [This is #emph[easier] to type. Inline notes may contain
+#link("http://google.com")[links] and `]` verbatim characters, as well as
+\[bracketed text\].])
+
+#endnote([4], [In quote.])
+
+#endnote([5], [In list.])
+]