Txt2Tags Reader: Added tests
This commit is contained in:
parent
43304d6bd6
commit
e340a7da02
6 changed files with 1787 additions and 29 deletions
31
pandoc.cabal
31
pandoc.cabal
|
@ -94,34 +94,23 @@ Extra-Source-Files:
|
|||
-- tests
|
||||
tests/bodybg.gif,
|
||||
tests/docbook-reader.docbook
|
||||
tests/docbook-reader.native
|
||||
tests/html-reader.html,
|
||||
tests/html-reader.native,
|
||||
tests/opml-reader.opml,
|
||||
tests/opml-reader.native,
|
||||
tests/haddock-reader.haddock,
|
||||
tests/haddock-reader.native,
|
||||
tests/insert,
|
||||
tests/lalune.jpg,
|
||||
tests/movie.jpg,
|
||||
tests/latex-reader.latex,
|
||||
tests/latex-reader.native,
|
||||
tests/textile-reader.textile,
|
||||
tests/textile-reader.native,
|
||||
tests/markdown-reader-more.txt,
|
||||
tests/markdown-reader-more.native,
|
||||
tests/markdown-citations.txt,
|
||||
tests/markdown-citations.native,
|
||||
tests/textile-reader.textile,
|
||||
tests/mediawiki-reader.wiki,
|
||||
tests/mediawiki-reader.native,
|
||||
tests/rst-reader.native,
|
||||
tests/rst-reader.rst,
|
||||
tests/s5.basic.html,
|
||||
tests/s5.fancy.html,
|
||||
tests/s5.fragment.html,
|
||||
tests/s5.inserts.html,
|
||||
tests/s5.native,
|
||||
tests/tables.context,
|
||||
tests/tables.docbook,
|
||||
tests/tables.html,
|
||||
|
@ -131,7 +120,6 @@ Extra-Source-Files:
|
|||
tests/tables.markdown,
|
||||
tests/tables.mediawiki,
|
||||
tests/tables.textile,
|
||||
tests/tables.native,
|
||||
tests/tables.opendocument,
|
||||
tests/tables.org,
|
||||
tests/tables.asciidoc,
|
||||
|
@ -140,9 +128,7 @@ Extra-Source-Files:
|
|||
tests/tables.rst,
|
||||
tests/tables.rtf,
|
||||
tests/tables.txt,
|
||||
tests/tables-rstsubset.native,
|
||||
tests/tables.fb2,
|
||||
tests/testsuite.native,
|
||||
tests/testsuite.txt,
|
||||
tests/writer.latex,
|
||||
tests/writer.context,
|
||||
|
@ -153,7 +139,6 @@ Extra-Source-Files:
|
|||
tests/writer.plain,
|
||||
tests/writer.mediawiki,
|
||||
tests/writer.textile,
|
||||
tests/writer.native,
|
||||
tests/writer.opendocument,
|
||||
tests/writer.org,
|
||||
tests/writer.asciidoc,
|
||||
|
@ -163,8 +148,6 @@ Extra-Source-Files:
|
|||
tests/writer.texinfo,
|
||||
tests/writer.fb2,
|
||||
tests/writer.opml,
|
||||
tests/lhs-test.native,
|
||||
tests/lhs-test-markdown.native,
|
||||
tests/lhs-test.markdown,
|
||||
tests/lhs-test.markdown+lhs,
|
||||
tests/lhs-test.rst,
|
||||
|
@ -175,7 +158,6 @@ Extra-Source-Files:
|
|||
tests/lhs-test.html+lhs,
|
||||
tests/lhs-test.fragment.html+lhs,
|
||||
tests/pipe-tables.txt,
|
||||
tests/pipe-tables.native,
|
||||
tests/fb2.basic.markdown,
|
||||
tests/fb2.basic.fb2,
|
||||
tests/fb2.titles.markdown,
|
||||
|
@ -188,26 +170,18 @@ Extra-Source-Files:
|
|||
tests/fb2.math.fb2,
|
||||
tests/fb2.test-small.png,
|
||||
tests/fb2.test.jpg,
|
||||
tests/docx.already_auto_ident.native,
|
||||
tests/docx.already_auto_ident.docx,
|
||||
tests/docx.block_quotes.docx,
|
||||
tests/docx.block_quotes_parse_indent.native,
|
||||
tests/docx.headers.docx,
|
||||
tests/docx.headers.native,
|
||||
tests/docx.image.docx,
|
||||
tests/docx.image_no_embed.native,
|
||||
tests/docx.inline_formatting.docx,
|
||||
tests/docx.inline_formatting.native,
|
||||
tests/docx.links.docx,
|
||||
tests/docx.links.native,
|
||||
tests/docx.lists.docx,
|
||||
tests/docx.lists.native,
|
||||
tests/docx.notes.docx,
|
||||
tests/docx.notes.native,
|
||||
tests/docx.tables.docx,
|
||||
tests/docx.tables.native,
|
||||
tests/docx.unicode.docx,
|
||||
tests/docx.unicode.native
|
||||
tests/*.native,
|
||||
tests/txt2tags.t2t
|
||||
Extra-Tmp-Files: man/man1/pandoc.1,
|
||||
man/man5/pandoc_markdown.5
|
||||
|
||||
|
@ -421,6 +395,7 @@ Test-Suite test-pandoc
|
|||
Tests.Readers.Org
|
||||
Tests.Readers.RST
|
||||
Tests.Readers.Docx
|
||||
Tests.Readers.Txt2Tags
|
||||
Tests.Writers.Native
|
||||
Tests.Writers.ConTeXt
|
||||
Tests.Writers.HTML
|
||||
|
|
|
@ -142,6 +142,10 @@ tests = [ testGroup "markdown"
|
|||
, test "reader" ["-r", "haddock", "-w", "native", "-s"]
|
||||
"haddock-reader.haddock" "haddock-reader.native"
|
||||
]
|
||||
, testGroup "txt2tags"
|
||||
[ test "reader" ["-r", "t2t", "-w", "native"]
|
||||
"txt2tags.t2t" "txt2tags.native"
|
||||
]
|
||||
, testGroup "other writers" $ map (\f -> testGroup f $ writerTests f)
|
||||
[ "opendocument" , "context" , "texinfo", "icml"
|
||||
, "man" , "plain" , "rtf", "org", "asciidoc"
|
||||
|
|
430
tests/Tests/Readers/Txt2Tags.hs
Normal file
430
tests/Tests/Readers/Txt2Tags.hs
Normal file
|
@ -0,0 +1,430 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Tests.Readers.Txt2Tags (tests) where
|
||||
|
||||
import Text.Pandoc.Definition
|
||||
import Test.Framework
|
||||
import Tests.Helpers
|
||||
import Tests.Arbitrary()
|
||||
import Text.Pandoc.Builder
|
||||
import Text.Pandoc
|
||||
import Data.List (intersperse)
|
||||
import Data.Monoid (mempty, mconcat)
|
||||
import Text.Pandoc.Readers.Txt2Tags
|
||||
|
||||
t2t :: String -> Pandoc
|
||||
t2t s = readTxt2Tags (T2TMeta "date" "mtime" "in" "out") def ('\n' : s)
|
||||
|
||||
infix 4 =:
|
||||
(=:) :: ToString c
|
||||
=> String -> (String, c) -> Test
|
||||
(=:) = test t2t
|
||||
|
||||
spcSep :: [Inlines] -> Inlines
|
||||
spcSep = mconcat . intersperse space
|
||||
|
||||
simpleTable' :: Int
|
||||
-> [Blocks]
|
||||
-> [[Blocks]]
|
||||
-> Blocks
|
||||
simpleTable' n = table "" (take n $ repeat (AlignCenter, 0.0))
|
||||
|
||||
tests :: [Test]
|
||||
tests =
|
||||
[ testGroup "Inlines" $
|
||||
[ "Plain String" =:
|
||||
"Hello, World" =?>
|
||||
para (spcSep [ "Hello,", "World" ])
|
||||
|
||||
, "Emphasis" =:
|
||||
"//Planet Punk//" =?>
|
||||
para (emph . spcSep $ ["Planet", "Punk"])
|
||||
|
||||
, "Strong" =:
|
||||
"**Cider**" =?>
|
||||
para (strong "Cider")
|
||||
|
||||
, "Strong Emphasis" =:
|
||||
"//**strength**//" =?>
|
||||
para (emph . strong $ "strength")
|
||||
|
||||
, "Strikeout" =:
|
||||
"--Kill Bill--" =?>
|
||||
para (strikeout . spcSep $ [ "Kill", "Bill" ])
|
||||
|
||||
, "Verbatim" =:
|
||||
"``Robot.rock()``" =?>
|
||||
para (code "Robot.rock()")
|
||||
|
||||
, "Symbol" =:
|
||||
"A * symbol" =?>
|
||||
para (str "A" <> space <> str "*" <> space <> "symbol")
|
||||
|
||||
, "No empty markup" =:
|
||||
"//// **** ____ ---- ```` \"\"\"\" ''''" =?>
|
||||
para (spcSep [ "////", "****", "____", "----", "````", "\"\"\"\"", "''''" ])
|
||||
|
||||
, "Inline markup is greedy" =:
|
||||
"***** ///// _____ ----- ````` \"\"\"\"\" '''''" =?>
|
||||
para (spcSep [strong "*", emph "/", emph "_"
|
||||
, strikeout "-", code "`", text "\""
|
||||
, rawInline "html" "'"])
|
||||
, "Markup must be greedy" =:
|
||||
"********** ////////// __________ ---------- `````````` \"\"\"\"\"\"\"\"\"\" ''''''''''" =?>
|
||||
para (spcSep [strong "******", emph "//////", emph "______"
|
||||
, strikeout "------", code "``````", text "\"\"\"\"\"\""
|
||||
, rawInline "html" "''''''"])
|
||||
, "Inlines must be glued" =:
|
||||
"** a** **a ** ** a **" =?>
|
||||
para (text "** a** **a ** ** a **")
|
||||
|
||||
, "Macros: Date" =:
|
||||
"%%date" =?>
|
||||
para "date"
|
||||
, "Macros: Mod Time" =:
|
||||
"%%mtime" =?>
|
||||
para "mtime"
|
||||
, "Macros: Infile" =:
|
||||
"%%infile" =?>
|
||||
para "in"
|
||||
, "Macros: Outfile" =:
|
||||
"%%outfile" =?>
|
||||
para "out"
|
||||
, "Autolink" =:
|
||||
"http://www.google.com" =?>
|
||||
para (link "http://www.google.com" "" (str "http://www.google.com"))
|
||||
, "Image" =:
|
||||
"[image.jpg]" =?>
|
||||
para (image "image.jpg" "" mempty)
|
||||
|
||||
, "Link" =:
|
||||
"[title http://google.com]" =?>
|
||||
para (link "http://google.com" "" (str "title"))
|
||||
|
||||
, "Image link" =:
|
||||
"[[image.jpg] abc]" =?>
|
||||
para (link "abc" "" (image "image.jpg" "" mempty))
|
||||
, "Invalid link: No trailing space" =:
|
||||
"[title invalid ]" =?>
|
||||
para (text "[title invalid ]")
|
||||
|
||||
|
||||
]
|
||||
|
||||
, testGroup "Basic Blocks" $
|
||||
["Paragraph, lines grouped together" =:
|
||||
"A paragraph\n A blank line ends the \n current paragraph\n"
|
||||
=?> para "A paragraph A blank line ends the current paragraph"
|
||||
, "Paragraph, ignore leading and trailing spaces" =:
|
||||
" Leading and trailing spaces are ignored. \n" =?>
|
||||
para "Leading and trailing spaces are ignored."
|
||||
, "Comment line in paragraph" =:
|
||||
"A comment line can be placed inside a paragraph.\n% this comment will be ignored \nIt will not affect it.\n"
|
||||
=?> para "A comment line can be placed inside a paragraph. It will not affect it."
|
||||
, "Paragraph" =:
|
||||
"Paragraph\n" =?>
|
||||
para "Paragraph"
|
||||
|
||||
, "First Level Header" =:
|
||||
"+ Headline +\n" =?>
|
||||
header 1 "Headline"
|
||||
|
||||
, "Third Level Header" =:
|
||||
"=== Third Level Headline ===\n" =?>
|
||||
header 3 ("Third" <> space <>
|
||||
"Level" <> space <>
|
||||
"Headline")
|
||||
|
||||
, "Header with label" =:
|
||||
"= header =[label]" =?>
|
||||
headerWith ("label", [], []) 1 ("header")
|
||||
|
||||
, "Invalid header, mismatched delimiters" =:
|
||||
"== header =" =?>
|
||||
para (text "== header =")
|
||||
|
||||
, "Invalid header, spaces in label" =:
|
||||
"== header ==[ haha ]" =?>
|
||||
para (text "== header ==[ haha ]")
|
||||
|
||||
, "Invalid header, invalid label character" =:
|
||||
"== header ==[lab/el]" =?>
|
||||
para (text "== header ==[lab/el]")
|
||||
, "Headers not preceded by a blank line" =:
|
||||
unlines [ "++ eat dinner ++"
|
||||
, "Spaghetti and meatballs tonight."
|
||||
, "== walk dog =="
|
||||
] =?>
|
||||
mconcat [ header 2 ("eat" <> space <> "dinner")
|
||||
, para $ spcSep [ "Spaghetti", "and", "meatballs", "tonight." ]
|
||||
, header 2 ("walk" <> space <> "dog")
|
||||
]
|
||||
|
||||
, "Paragraph starting with an equals" =:
|
||||
"=five" =?>
|
||||
para "=five"
|
||||
|
||||
, "Paragraph containing asterisk at beginning of line" =:
|
||||
unlines [ "lucky"
|
||||
, "*star"
|
||||
] =?>
|
||||
para ("lucky" <> space <> "*star")
|
||||
|
||||
, "Horizontal Rule" =:
|
||||
unlines [ "before"
|
||||
, replicate 20 '-'
|
||||
, replicate 20 '='
|
||||
, replicate 20 '_'
|
||||
, "after"
|
||||
] =?>
|
||||
mconcat [ para "before"
|
||||
, horizontalRule
|
||||
, horizontalRule
|
||||
, horizontalRule
|
||||
, para "after"
|
||||
]
|
||||
|
||||
, "Comment Block" =:
|
||||
unlines [ "%%%"
|
||||
, "stuff"
|
||||
, "bla"
|
||||
, "%%%"] =?>
|
||||
(mempty::Blocks)
|
||||
|
||||
|
||||
]
|
||||
|
||||
, testGroup "Lists" $
|
||||
[ "Simple Bullet Lists" =:
|
||||
("- Item1\n" ++
|
||||
"- Item2\n") =?>
|
||||
bulletList [ plain "Item1"
|
||||
, plain "Item2"
|
||||
]
|
||||
|
||||
, "Indented Bullet Lists" =:
|
||||
(" - Item1\n" ++
|
||||
" - Item2\n") =?>
|
||||
bulletList [ plain "Item1"
|
||||
, plain "Item2"
|
||||
]
|
||||
|
||||
|
||||
|
||||
, "Nested Bullet Lists" =:
|
||||
("- Discovery\n" ++
|
||||
" + One More Time\n" ++
|
||||
" + Harder, Better, Faster, Stronger\n" ++
|
||||
"- Homework\n" ++
|
||||
" + Around the World\n"++
|
||||
"- Human After All\n" ++
|
||||
" + Technologic\n" ++
|
||||
" + Robot Rock\n") =?>
|
||||
bulletList [ mconcat
|
||||
[ plain "Discovery"
|
||||
, orderedList [ plain ("One" <> space <>
|
||||
"More" <> space <>
|
||||
"Time")
|
||||
, plain ("Harder," <> space <>
|
||||
"Better," <> space <>
|
||||
"Faster," <> space <>
|
||||
"Stronger")
|
||||
]
|
||||
]
|
||||
, mconcat
|
||||
[ plain "Homework"
|
||||
, orderedList [ plain ("Around" <> space <>
|
||||
"the" <> space <>
|
||||
"World")
|
||||
]
|
||||
]
|
||||
, mconcat
|
||||
[ plain ("Human" <> space <> "After" <> space <> "All")
|
||||
, orderedList [ plain "Technologic"
|
||||
, plain ("Robot" <> space <> "Rock")
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
, "Simple Ordered List" =:
|
||||
("+ Item1\n" ++
|
||||
"+ Item2\n") =?>
|
||||
let listStyle = (1, DefaultStyle, DefaultDelim)
|
||||
listStructure = [ plain "Item1"
|
||||
, plain "Item2"
|
||||
]
|
||||
in orderedListWith listStyle listStructure
|
||||
|
||||
|
||||
, "Indented Ordered List" =:
|
||||
(" + Item1\n" ++
|
||||
" + Item2\n") =?>
|
||||
let listStyle = (1, DefaultStyle, DefaultDelim)
|
||||
listStructure = [ plain "Item1"
|
||||
, plain "Item2"
|
||||
]
|
||||
in orderedListWith listStyle listStructure
|
||||
|
||||
, "Nested Ordered Lists" =:
|
||||
("+ One\n" ++
|
||||
" + One-One\n" ++
|
||||
" + One-Two\n" ++
|
||||
"+ Two\n" ++
|
||||
" + Two-One\n"++
|
||||
" + Two-Two\n") =?>
|
||||
let listStyle = (1, DefaultStyle, DefaultDelim)
|
||||
listStructure = [ mconcat
|
||||
[ plain "One"
|
||||
, orderedList [ plain "One-One"
|
||||
, plain "One-Two"
|
||||
]
|
||||
]
|
||||
, mconcat
|
||||
[ plain "Two"
|
||||
, orderedList [ plain "Two-One"
|
||||
, plain "Two-Two"
|
||||
]
|
||||
]
|
||||
]
|
||||
in orderedListWith listStyle listStructure
|
||||
|
||||
, "Ordered List in Bullet List" =:
|
||||
("- Emacs\n" ++
|
||||
" + Org\n") =?>
|
||||
bulletList [ (plain "Emacs") <>
|
||||
(orderedList [ plain "Org"])
|
||||
]
|
||||
|
||||
, "Bullet List in Ordered List" =:
|
||||
("+ GNU\n" ++
|
||||
" - Freedom\n") =?>
|
||||
orderedList [ (plain "GNU") <> bulletList [ (plain "Freedom") ] ]
|
||||
|
||||
, "Definition List" =:
|
||||
unlines [ ": PLL"
|
||||
, " phase-locked loop"
|
||||
, ": TTL"
|
||||
, " transistor-transistor logic"
|
||||
, ": PSK"
|
||||
, " a digital"
|
||||
] =?>
|
||||
definitionList [ ("PLL", [ plain $ "phase-locked" <> space <> "loop" ])
|
||||
, ("TTL", [ plain $ "transistor-transistor" <> space <> "logic" ])
|
||||
, ("PSK", [ plain $ "a" <> space <> "digital" ])
|
||||
]
|
||||
|
||||
|
||||
, "Loose bullet list" =:
|
||||
unlines [ "- apple"
|
||||
, ""
|
||||
, "- orange"
|
||||
, ""
|
||||
, "- peach"
|
||||
] =?>
|
||||
bulletList [ para "apple"
|
||||
, para "orange"
|
||||
, para "peach"
|
||||
]
|
||||
]
|
||||
|
||||
, testGroup "Tables"
|
||||
[ "Single cell table" =:
|
||||
"| Test " =?>
|
||||
simpleTable' 1 mempty [[plain "Test"]]
|
||||
|
||||
, "Multi cell table" =:
|
||||
"| One | Two |" =?>
|
||||
simpleTable' 2 mempty [ [ plain "One", plain "Two" ] ]
|
||||
|
||||
, "Multi line table" =:
|
||||
unlines [ "| One |"
|
||||
, "| Two |"
|
||||
, "| Three |"
|
||||
] =?>
|
||||
simpleTable' 1 mempty
|
||||
[ [ plain "One" ]
|
||||
, [ plain "Two" ]
|
||||
, [ plain "Three" ]
|
||||
]
|
||||
|
||||
, "Empty table" =:
|
||||
"| |" =?>
|
||||
simpleTable' 1 mempty [[mempty]]
|
||||
|
||||
, "Glider Table" =:
|
||||
unlines [ "| 1 | 0 | 0 |"
|
||||
, "| 0 | 1 | 1 |"
|
||||
, "| 1 | 1 | 0 |"
|
||||
] =?>
|
||||
simpleTable' 3 mempty
|
||||
[ [ plain "1", plain "0", plain "0" ]
|
||||
, [ plain "0", plain "1", plain "1" ]
|
||||
, [ plain "1", plain "1", plain "0" ]
|
||||
]
|
||||
|
||||
|
||||
, "Table with Header" =:
|
||||
unlines [ "|| Species | Status |"
|
||||
, "| cervisiae | domesticated |"
|
||||
, "| paradoxus | wild |"
|
||||
] =?>
|
||||
simpleTable [ plain "Species", plain "Status" ]
|
||||
[ [ plain "cervisiae", plain "domesticated" ]
|
||||
, [ plain "paradoxus", plain "wild" ]
|
||||
]
|
||||
|
||||
, "Table alignment determined by spacing" =:
|
||||
unlines [ "| Numbers | Text | More |"
|
||||
, "| 1 | One | foo |"
|
||||
, "| 2 | Two | bar |"
|
||||
] =?>
|
||||
table "" (zip [AlignCenter, AlignRight, AlignDefault] [0, 0, 0])
|
||||
[]
|
||||
[ [ plain "Numbers", plain "Text", plain "More" ]
|
||||
, [ plain "1" , plain "One" , plain "foo" ]
|
||||
, [ plain "2" , plain "Two" , plain "bar" ]
|
||||
]
|
||||
|
||||
, "Pipe within text doesn't start a table" =:
|
||||
"Ceci n'est pas une | pipe " =?>
|
||||
para (spcSep [ "Ceci", "n'est", "pas", "une", "|", "pipe" ])
|
||||
|
||||
|
||||
, "Table with differing row lengths" =:
|
||||
unlines [ "|| Numbers | Text "
|
||||
, "| 1 | One | foo |"
|
||||
, "| 2 "
|
||||
] =?>
|
||||
table "" (zip [AlignCenter, AlignLeft, AlignLeft] [0, 0, 0])
|
||||
[ plain "Numbers", plain "Text" , plain mempty ]
|
||||
[ [ plain "1" , plain "One" , plain "foo" ]
|
||||
, [ plain "2" , plain mempty , plain mempty ]
|
||||
]
|
||||
|
||||
]
|
||||
|
||||
, testGroup "Blocks and fragments"
|
||||
[ "Source block" =:
|
||||
unlines [ "```"
|
||||
, "main = putStrLn greeting"
|
||||
, " where greeting = \"moin\""
|
||||
, "```" ] =?>
|
||||
let code' = "main = putStrLn greeting\n" ++
|
||||
" where greeting = \"moin\"\n"
|
||||
in codeBlock code'
|
||||
|
||||
, "tagged block" =:
|
||||
unlines [ "'''"
|
||||
, "<aside>HTML5 is pretty nice.</aside>"
|
||||
, "'''"
|
||||
] =?>
|
||||
rawBlock "html" "<aside>HTML5 is pretty nice.</aside>\n"
|
||||
|
||||
, "Quote block" =:
|
||||
unlines ["\t//Niemand// hat die Absicht, eine Mauer zu errichten!"
|
||||
] =?>
|
||||
blockQuote (para (spcSep [ emph "Niemand", "hat", "die", "Absicht,"
|
||||
, "eine", "Mauer", "zu", "errichten!"
|
||||
]))
|
||||
|
||||
]
|
||||
]
|
|
@ -10,6 +10,7 @@ import qualified Tests.Readers.Markdown
|
|||
import qualified Tests.Readers.Org
|
||||
import qualified Tests.Readers.RST
|
||||
import qualified Tests.Readers.Docx
|
||||
import qualified Tests.Readers.Txt2Tags
|
||||
import qualified Tests.Writers.ConTeXt
|
||||
import qualified Tests.Writers.LaTeX
|
||||
import qualified Tests.Writers.HTML
|
||||
|
@ -40,7 +41,7 @@ tests = [ testGroup "Old" Tests.Old.tests
|
|||
, testGroup "Org" Tests.Readers.Org.tests
|
||||
, testGroup "RST" Tests.Readers.RST.tests
|
||||
, testGroup "Docx" Tests.Readers.Docx.tests
|
||||
|
||||
, testGroup "Txt2Tags" Tests.Readers.Txt2Tags.tests
|
||||
]
|
||||
]
|
||||
|
||||
|
|
551
tests/txt2tags.native
Normal file
551
tests/txt2tags.native
Normal file
File diff suppressed because one or more lines are too long
797
tests/txt2tags.t2t
Normal file
797
tests/txt2tags.t2t
Normal file
|
@ -0,0 +1,797 @@
|
|||
Txt2tags Markup Rules
|
||||
|
||||
|
||||
%!includeconf: rules.conf
|
||||
|
||||
This document describes all the details about each txt2tags mark.
|
||||
The target audience are **experienced** users. You may find it
|
||||
useful if you want to master the marks or solve a specific problem
|
||||
about a mark.
|
||||
|
||||
If you are new to txt2tags or just want to know which are the
|
||||
available marks, please read the [Markup Demo MARKUPDEMO].
|
||||
|
||||
Note 1: This document is generated directly from the txt2tags
|
||||
test-suite. All the rules mentioned here are 100% in sync with the
|
||||
current program code.
|
||||
|
||||
Note 2: A good practice is to consult [the sources rules.t2t] when
|
||||
reading, to see how the texts were made.
|
||||
|
||||
Table of Contents:
|
||||
|
||||
%%TOC
|
||||
|
||||
-------------------------------------------------------------
|
||||
|
||||
= Paragraph =[paragraph]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/paragraph.t2t
|
||||
|
||||
|
||||
%%% Syntax: Lines grouped together
|
||||
A paragraph is composed by one or more lines.
|
||||
A blank line (or a table, or a list) ends the
|
||||
current paragraph.
|
||||
|
||||
%%% Syntax: Leading and trailing spaces are ignored
|
||||
Leading and trailing spaces are ignored.
|
||||
|
||||
%%% Syntax: A comment don't close a paragraph
|
||||
A comment line can be placed inside a paragraph.
|
||||
% this comment will be ignored
|
||||
It will not affect it.
|
||||
|
||||
%%% Closing: EOF closes the open paragraph
|
||||
The end of the file (EOF) closes the
|
||||
currently open paragraph.
|
||||
|
||||
= Comment =[comment]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/comment.t2t
|
||||
|
||||
|
||||
%%% Syntax: The % character at the line beginning (column 1)
|
||||
%glued with the % mark
|
||||
% separated from the % mark
|
||||
% very distant from the % mark
|
||||
%%%%%%% lots of % marks
|
||||
% a blank comment, used for vertical spacing:
|
||||
%
|
||||
% NOTE: what matters is the first % being at the line beginning,
|
||||
% the rest of the line is just ignored.
|
||||
|
||||
%%% Syntax: Area (block)
|
||||
%%%
|
||||
You're not seeing this.
|
||||
%%%
|
||||
|
||||
%%% Syntax: Area (block) with trailing spaces
|
||||
%%%
|
||||
You're not seeing this.
|
||||
%%%
|
||||
|
||||
%%% Invalid: The % in any other position
|
||||
% not on the line beginning (at column 2)
|
||||
|
||||
some text % half line comments are not allowed
|
||||
|
||||
|
||||
= Line =[line]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/line.t2t
|
||||
|
||||
|
||||
%%% Syntax: At least 20 chars of - = _
|
||||
--------------------
|
||||
====================
|
||||
____________________
|
||||
%%% Syntax: Any kind of mixing is allowed
|
||||
%% Free mixing is allowed to make the line,
|
||||
%% but the first char is the identifier for
|
||||
%% the difference between separator ( - _ )
|
||||
%% and strong ( = ) lines.
|
||||
=========-----------
|
||||
-_-_-_-_-_-_-_-_-_-_
|
||||
=-=-=-=-=-=-=-=-=-=-
|
||||
=------------------=
|
||||
--------====--------
|
||||
%%% Syntax: Leading and/or trailing spaces are allowed
|
||||
--------------------
|
||||
--------------------
|
||||
--------------------
|
||||
%%% Invalid: Less than 20 chars (but strike matches)
|
||||
---------
|
||||
%%% Invalid: Strange chars (but strike matches)
|
||||
--------- ----------
|
||||
|
||||
---------+----------
|
||||
|
||||
( -------------------- )
|
||||
|
||||
= Inline =[inline]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/inline.t2t
|
||||
|
||||
|
||||
%%% Syntax: Marks are greedy and must be "glued" with contents
|
||||
%% GLUED: The contents must be glued with the marks, no spaces
|
||||
%% between them. Right after the opening mark there must be a
|
||||
%% non-blank character, as well as right before the closing mark.
|
||||
%%
|
||||
%% GREEDY: If the contents boundary character is the same as
|
||||
%% the mark character, it is considered contents, not mark.
|
||||
%% So ""****bold****"" turns to ""<B>**bold**</B>"" in HTML.
|
||||
|
||||
i) **b** //i// __u__ --s-- ``m`` ""r"" ''t''
|
||||
i) **bo** //it// __un__ --st-- ``mo`` ""ra"" ''tg''
|
||||
i) **bold** //ital// __undr__ --strk-- ``mono`` ""raw"" ''tggd''
|
||||
i) **bo ld** //it al// __un dr__ --st rk-- ``mo no`` ""r aw"" ''tg gd''
|
||||
i) **bo * ld** //it / al// __un _ dr__ --st - rk-- ``mo ` no`` ""r " aw"" ''tg ' gd''
|
||||
i) **bo **ld** //it //al// __un __dr__ --st --rk-- ``mo ``no`` ""r ""aw"" ''tg ''gd''
|
||||
i) **bo ** ld** //it // al// __un __ dr__ --st -- rk-- ``mo `` no`` ""r "" aw"" ''tg '' gd''
|
||||
i) ****bold**** ////ital//// ____undr____ ----strk---- ````mono```` """"raw"""" ''''tggd''''
|
||||
i) ***bold*** ///ital/// ___undr___ ---strk--- ```mono``` """raw""" '''tggd'''
|
||||
|
||||
%%% Syntax: Repetition is greedy
|
||||
%% When the mark character is repeated many times,
|
||||
%% the contents are expanded to the largest possible.
|
||||
%% Thats why they are greedy, the outer marks are
|
||||
%% the ones used.
|
||||
|
||||
i) ***** ///// _____ ----- ````` """"" '''''
|
||||
i) ****** ////// ______ ------ `````` """""" ''''''
|
||||
i) ******* /////// _______ ------- ``````` """"""" '''''''
|
||||
i) ******** //////// ________ -------- ```````` """""""" ''''''''
|
||||
i) ********* ///////// _________ --------- ````````` """"""""" '''''''''
|
||||
i) ********** ////////// __________ ---------- `````````` """""""""" ''''''''''
|
||||
|
||||
%%% Invalid: No contents
|
||||
|
||||
i) **** //// ____ ---- ```` """" ''''
|
||||
i) ** ** // // __ __ -- -- `` `` "" "" '' ''
|
||||
|
||||
%%% Invalid: Contents not "glued" with marks
|
||||
%% Spaces between the marks and the contents in any side
|
||||
%% invalidate the mark.
|
||||
|
||||
i) ** bold** // ital// __ undr__ -- strk-- `` mono`` "" raw"" '' tggd''
|
||||
i) **bold ** //ital // __undr __ --strk -- ``mono `` ""raw "" ''tggd ''
|
||||
i) ** bold ** // ital // __ undr __ -- strk -- `` mono `` "" raw "" '' tggd ''
|
||||
|
||||
= Link =[link]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/link.t2t
|
||||
|
||||
|
||||
%%% Syntax: E-mail
|
||||
user@domain.com
|
||||
user@domain.com.
|
||||
user@domain.com. any text.
|
||||
any text: user@domain.com. any text.
|
||||
[label user@domain.com]
|
||||
%%% Syntax: E-mail with form data
|
||||
user@domain.com?subject=bla
|
||||
user@domain.com?subject=bla.
|
||||
user@domain.com?subject=bla,
|
||||
user@domain.com?subject=bla&cc=otheruser@domain.com
|
||||
user@domain.com?subject=bla&cc=otheruser@domain.com.
|
||||
user@domain.com?subject=bla&cc=otheruser@domain.com,
|
||||
[label user@domain.com?subject=bla&cc=otheruser@domain.com].
|
||||
[label user@domain.com?subject=bla&cc=otheruser@domain.com.].
|
||||
%%% Syntax: URL
|
||||
http://www.domain.com
|
||||
http://www.domain.com/dir/
|
||||
http://www.domain.com/dir///
|
||||
http://www.domain.com.
|
||||
http://www.domain.com,
|
||||
http://www.domain.com. any text.
|
||||
http://www.domain.com, any text.
|
||||
http://www.domain.com/dir/. any text.
|
||||
any text: http://www.domain.com. any text.
|
||||
any text: http://www.domain.com/dir/. any text.
|
||||
any text: http://www.domain.com/dir/index.html. any text.
|
||||
any text: http://www.domain.com/dir/index.html, any text.
|
||||
%%% Syntax: URL with anchor
|
||||
http://www.domain.com/dir/#anchor
|
||||
http://www.domain.com/dir/index.html#anchor
|
||||
http://www.domain.com/dir/index.html#anchor.
|
||||
http://www.domain.com/dir/#anchor. any text.
|
||||
http://www.domain.com/dir/index.html#anchor. any text.
|
||||
any text: http://www.domain.com/dir/#anchor. any text.
|
||||
any text: http://www.domain.com/dir/index.html#anchor. any text.
|
||||
%%% Syntax: URL with form data
|
||||
http://domain.com?a=a@a.a&b=a+b+c.
|
||||
http://domain.com?a=a@a.a&b=a+b+c,
|
||||
http://domain.com/bla.cgi?a=a@a.a&b=a+b+c.
|
||||
http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@.
|
||||
%%% Syntax: URL with form data and anchor
|
||||
http://domain.com?a=a@a.a&b=a+b+c.#anchor
|
||||
http://domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor
|
||||
http://domain.com/bla.cgi?a=a@a.a&b=a+b+c@.#anchor
|
||||
%%% Syntax: URL with login data
|
||||
http://user:password@domain.com/bla.html.
|
||||
http://user:password@domain.com/dir/.
|
||||
http://user:password@domain.com.
|
||||
http://user:@domain.com.
|
||||
http://user@domain.com.
|
||||
%%% Syntax: URL with login, form and anchor
|
||||
http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor
|
||||
http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c@#anchor
|
||||
%%% Syntax: URL with label
|
||||
[label www.domain.com]
|
||||
%%% Syntax: URL with label (trailing spaces are discarded, leading are maintained)
|
||||
%TODO normalize this behavior
|
||||
[ label www.domain.com]
|
||||
[label www.domain.com]
|
||||
%%% Syntax: URL with label, stressing
|
||||
[anchor http://www.domain.com/dir/index.html#anchor.]
|
||||
[login http://user:password@domain.com/bla.html]
|
||||
[form http://www.domain.com/bla.cgi?a=a@a.a&b=a+b+c.]
|
||||
[form & anchor http://www.domain.com/bla.cgi?a=a@a.a&b=a+b+c.#anchor]
|
||||
[login & form http://user:password@domain.com/bla.cgi?a=a@a.a&b=a+b+c.]
|
||||
%%% Syntax: Link with label for local files
|
||||
[local link up ..]
|
||||
[local link file bla.html]
|
||||
[local link anchor #anchor]
|
||||
[local link file/anchor bla.html#anchor]
|
||||
[local link file/anchor bla.html#anchor.]
|
||||
[local link img abc.gif]
|
||||
%%% Syntax: Another link as a label
|
||||
[www.fake.com www.domain.com]
|
||||
%%% Syntax: URL with funny chars
|
||||
http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm
|
||||
http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-
|
||||
http://domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_-1%.
|
||||
http://foo._user-9:pass!#$%&*()+word@domain.com:8080/~user/_st-r@a=n$g,e/index%20new.htm?a=/%22&b=+.@*_-#anchor_-1%.
|
||||
%%% Test: Various per line
|
||||
http://L1.com ! L2@www.com ! [L3 www.com] ! [L4 w@ww.com] ! www.L5.com
|
||||
%%% Feature: Guessed link, adding protocol automatically
|
||||
www.domain.com
|
||||
www2.domain.com
|
||||
ftp.domain.com
|
||||
WWW.DOMAIN.COM
|
||||
FTP.DOMAIN.COM
|
||||
[label www.domain.com]
|
||||
[label ftp.domain.com]
|
||||
[label WWW.DOMAIN.COM]
|
||||
[label FTP.DOMAIN.COM]
|
||||
%%% Invalid: Trailing space on link
|
||||
[label www.domain.com ]
|
||||
%%% Invalid: Label with ] char (use postproc)
|
||||
[label] www.domain.com]
|
||||
|
||||
= Image =[image]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/image.t2t
|
||||
|
||||
|
||||
%%% Syntax: Image name inside brackets: [img]
|
||||
[img.png]
|
||||
|
||||
%%% Syntax: Image pointing to a link: [[img] link]
|
||||
[[img.png] http://txt2tags.org]
|
||||
|
||||
%%% Align: Image position is preserved when inside paragraph
|
||||
[img.png] Image at the line beginning.
|
||||
|
||||
Image in the middle [img.png] of the line.
|
||||
|
||||
Image at the line end. [img.png]
|
||||
|
||||
%%% Align: Image alone with spaces around is aligned
|
||||
[img.png]
|
||||
[img.png]
|
||||
[img.png]
|
||||
|
||||
%%% Test: Two glued images with no spaces (left & right)
|
||||
[img.png][img.png]
|
||||
|
||||
%%% Test: Various per line
|
||||
Images [img.png] mixed [img.png] with [img.png] text.
|
||||
|
||||
Images glued together: [img.png][img.png][img.png].
|
||||
|
||||
%%% Invalid: Spaces inside are not allowed
|
||||
[img.png ]
|
||||
|
||||
[ img.png]
|
||||
|
||||
[ img.png ]
|
||||
|
||||
% Ignored as they change every time when run
|
||||
|
||||
= Numbered Title =[numtitle]
|
||||
|
||||
%%% Syntax: Balanced equal signs (from 1 to 5)
|
||||
+ Title Level 1 +
|
||||
++ Title Level 2 ++
|
||||
+++ Title Level 3 +++
|
||||
++++ Title Level 4 ++++
|
||||
+++++ Title Level 5 +++++
|
||||
%%% Label: Between brackets, alphanumeric [A-Za-z0-9_-]
|
||||
+ Title Level 1 +[lab_el-1]
|
||||
++ Title Level 2 ++[lab_el-2]
|
||||
+++ Title Level 3 +++[lab_el-3]
|
||||
++++ Title Level 4 ++++[lab_el-4]
|
||||
+++++ Title Level 5 +++++[lab_el-5]
|
||||
%%% Syntax: Spaces around and/or inside are allowed (and ignored)
|
||||
+++Title Level 3+++
|
||||
+++ Title Level 3 +++
|
||||
+++ Title Level 3 +++
|
||||
+++ Title Level 3 +++
|
||||
+++ Title Level 3 +++
|
||||
+++ Title Level 3 +++[lab_el-9]
|
||||
%%% Invalid: Unbalanced equal signs
|
||||
+Not Title
|
||||
|
||||
++Not Title+
|
||||
|
||||
+++Not Title++++
|
||||
%%% Invalid: Level deeper than 5
|
||||
++++++Not Title 6++++++
|
||||
|
||||
+++++++Not Title 7+++++++
|
||||
%%% Invalid: Space between title and label
|
||||
+Not Title+ [label1]
|
||||
%%% Invalid: Space inside label
|
||||
+Not Title+[ label ]
|
||||
%%% Invalid: Strange chars inside label
|
||||
+Not Title+[la/bel]
|
||||
|
||||
= Title =[title]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/title.t2t
|
||||
|
||||
|
||||
%%% Syntax: Balanced equal signs (from 1 to 5)
|
||||
= Title Level 1 =
|
||||
== Title Level 2 ==
|
||||
=== Title Level 3 ===
|
||||
==== Title Level 4 ====
|
||||
===== Title Level 5 =====
|
||||
%%% Label: Between brackets, alphanumeric [A-Za-z0-9_-]
|
||||
= Title Level 1 =[lab_el-1]
|
||||
== Title Level 2 ==[lab_el-2]
|
||||
=== Title Level 3 ===[lab_el-3]
|
||||
==== Title Level 4 ====[lab_el-4]
|
||||
===== Title Level 5 =====[lab_el-5]
|
||||
%%% Syntax: Spaces around and/or inside are allowed (and ignored)
|
||||
===Title Level 3===
|
||||
=== Title Level 3 ===
|
||||
=== Title Level 3 ===
|
||||
=== Title Level 3 ===
|
||||
=== Title Level 3 ===
|
||||
=== Title Level 3 ===[lab_el-9]
|
||||
%%% Invalid: Unbalanced equal signs
|
||||
=Not Title
|
||||
|
||||
==Not Title=
|
||||
|
||||
===Not Title====
|
||||
%%% Invalid: Level deeper than 5
|
||||
======Not Title 6======
|
||||
|
||||
=======Not Title 7=======
|
||||
%%% Invalid: Space between title and label
|
||||
=Not Title= [label1]
|
||||
%%% Invalid: Space inside label
|
||||
=Not Title=[ label ]
|
||||
%%% Invalid: Strange chars inside label
|
||||
=Not Title=[la/bel]
|
||||
|
||||
= Quote =[quote]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/quote.t2t
|
||||
|
||||
|
||||
To quote a paragraph, just prefix it by a TAB
|
||||
character. All the lines of the paragraph must
|
||||
begin with a TAB.
|
||||
Any non-tabbed line closes the quote block.
|
||||
|
||||
%%% Nesting: Creating deeper quotes
|
||||
The number of leading TABs identifies the quote
|
||||
block depth. This is quote level 1.
|
||||
With two TABs, we are on the quote
|
||||
level 2.
|
||||
The more TABs, more deep is
|
||||
the quote level.
|
||||
There isn't a limit.
|
||||
|
||||
%%% Nesting: Reverse nesting works
|
||||
This quote starts at
|
||||
level 4.
|
||||
Then its depth is decreased.
|
||||
Counting down, one by one.
|
||||
Until the level 1.
|
||||
|
||||
%%% Nesting: Random count
|
||||
Unlike lists, any quote block is
|
||||
independent, not part of a tree.
|
||||
The TAB count don't need to be incremental
|
||||
by one.
|
||||
The nesting don't need
|
||||
to follow any rule.
|
||||
Quotes can be opened and closed
|
||||
in any way.
|
||||
You choose.
|
||||
|
||||
%%% Nesting: When not supported
|
||||
Some targets (as sgml) don't support the
|
||||
nesting of quotes. There is only one quote
|
||||
level.
|
||||
In this case, no matter how much
|
||||
TABs are used to define the quote
|
||||
block, it always will be level 1.
|
||||
|
||||
%%% Syntax: Spaces after TAB
|
||||
Spaces AFTER the TAB character are allowed.
|
||||
But be careful, it can be confusing.
|
||||
|
||||
%%% Invalid: Spaces before TAB
|
||||
Spaces BEFORE the TAB character
|
||||
invalidate the mark. It's not quote.
|
||||
|
||||
%%% Invalid: Paragraphs inside
|
||||
Paragraph breaks inside a quote aren't
|
||||
possible.
|
||||
|
||||
This sample are two separated quoted
|
||||
paragraphs, not a quote block with
|
||||
two paragraphs inside.
|
||||
|
||||
%%% Closing: EOF closes the open block
|
||||
The end of the file (EOF) closes the
|
||||
currently open quote block.
|
||||
|
||||
= Raw =[raw]
|
||||
|
||||
%%% Syntax: A single line
|
||||
""" A raw line.
|
||||
|
||||
%%% Syntax: A single line with leading spaces
|
||||
""" Another raw line, with leading spaces.
|
||||
|
||||
%%% Syntax: Area (block)
|
||||
"""
|
||||
A raw area delimited
|
||||
by lines with marks.
|
||||
"""
|
||||
|
||||
%%% Syntax: Area (block) with trailing spaces
|
||||
"""
|
||||
Trailing spaces and TABs after the area marks
|
||||
are allowed, but not encouraged nor documented.
|
||||
"""
|
||||
|
||||
%%% Invalid: No space between mark and contents
|
||||
"""Not a raw line, need one space after mark.
|
||||
|
||||
%%% Invalid: Leading spaces on block marks
|
||||
"""
|
||||
Not a raw area.
|
||||
The marks must be at the line beginning,
|
||||
no leading spaces.
|
||||
"""
|
||||
|
||||
%%% Closing: EOF closes the open block
|
||||
"""
|
||||
The end of the file (EOF) closes
|
||||
the currently open raw area.
|
||||
"""
|
||||
|
||||
= Verbatim =[verbatim]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/verbatim.t2t
|
||||
|
||||
|
||||
%%% Syntax: A single line
|
||||
``` A verbatim line.
|
||||
|
||||
%%% Syntax: A single line with leading spaces
|
||||
``` Another verbatim line, with leading spaces.
|
||||
|
||||
%%% Syntax: Area (block)
|
||||
```
|
||||
A verbatim area delimited
|
||||
by lines with marks.
|
||||
```
|
||||
|
||||
%%% Syntax: Area (block) with trailing spaces
|
||||
```
|
||||
Trailing spaces and TABs after the area marks
|
||||
are allowed, but not encouraged nor documented.
|
||||
```
|
||||
|
||||
%%% Invalid: No space between mark and contents
|
||||
```Not a verbatim line, need one space after mark.
|
||||
|
||||
%%% Invalid: Leading spaces on block marks
|
||||
```
|
||||
Not a verbatim area.
|
||||
The marks must be at the line beginning,
|
||||
no leading spaces.
|
||||
```
|
||||
|
||||
%%% Closing: EOF closes the open block
|
||||
```
|
||||
The end of the file (EOF) closes
|
||||
the currently open verbatim area.
|
||||
```
|
||||
|
||||
= Definition List =[deflist]
|
||||
|
||||
: Definition list
|
||||
A list with terms
|
||||
: Start term with colon
|
||||
And its definition follows
|
||||
|
||||
|
||||
= Numbered List =[numlist]
|
||||
|
||||
See [List #list], the same rules apply.
|
||||
|
||||
= List =[list]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/list.t2t
|
||||
|
||||
|
||||
%%% Items: Prefixed by hyphen
|
||||
- Use the hyphen to prefix list items.
|
||||
- There must be one space after the hyphen.
|
||||
- The list is closed by two consecutive blank lines.
|
||||
|
||||
|
||||
%%% Items: Free leading spacing (indentation)
|
||||
- The list can be indented on the source document.
|
||||
- You can use any number of spaces.
|
||||
- The result will be the same.
|
||||
|
||||
|
||||
%%% Items: Vertical spacing between items
|
||||
- Let one blank line between the list items.
|
||||
|
||||
- It will be maintained on the conversion.
|
||||
|
||||
- Some targets don't support this behavior.
|
||||
|
||||
- This one was separated by a line with blanks.
|
||||
You can also put a blank line inside
|
||||
|
||||
the item contents and it will be preserved.
|
||||
|
||||
|
||||
%%% Items: Exactly ONE space after the hyphen
|
||||
-This is not a list (no space)
|
||||
|
||||
- This is not a list (more than one space)
|
||||
|
||||
- This is not a list (a TAB instead the space)
|
||||
|
||||
|
||||
%%% Items: Catchy cases
|
||||
- - This is a list
|
||||
- + This is a list
|
||||
- : This is a list
|
||||
|
||||
|
||||
%%% Nesting: Creating sublists
|
||||
- This is the "mother" list first item.
|
||||
- Here is the second, but inside this item,
|
||||
- there is a sublist, with its own items.
|
||||
- Note that the items of the same sublist
|
||||
- must have the same indentation.
|
||||
- And this can go on, opening sublists.
|
||||
- Just add leading spaces before the
|
||||
- hyphen and sublists will be opened.
|
||||
- The two blank lines closes them all.
|
||||
|
||||
|
||||
%%% Nesting: Free leading spacing (indentation)
|
||||
- When nesting lists, the additional spaces are free.
|
||||
- You can add just one,
|
||||
- or many.
|
||||
- What matters is to put more than the previous.
|
||||
- But remember that the other items of the same list
|
||||
- must use the same indentation.
|
||||
|
||||
|
||||
%%% Nesting: Maximum depth
|
||||
- There is not a depth limit,
|
||||
- you can go deeper and deeper.
|
||||
- But some targets may have restrictions.
|
||||
- The LaTeX maximum is here, 4 levels.
|
||||
|
||||
|
||||
%%% Nesting: Reverse doesn't work
|
||||
- Reverse nesting doesn't work.
|
||||
- Because a sublist *must* have a mother list.
|
||||
- It's the list concept, not a txt2tags limitation.
|
||||
- All this sublists will be bumped to mother lists.
|
||||
- At level 1, like this one.
|
||||
|
||||
|
||||
%%% Nesting: Going deeper and back
|
||||
|
||||
%% When nesting back to an upper level, the previous sublist
|
||||
%% is automatically closed.
|
||||
- Level 1
|
||||
- Level 2
|
||||
- Level 3
|
||||
- Level 4
|
||||
- Level 3 -- (closed Level 4)
|
||||
- Level 2 -- (closed Level 3)
|
||||
- Level 1 -- (closed Level 2)
|
||||
|
||||
|
||||
%% More than one list can be closed when nesting back.
|
||||
- Level 1
|
||||
- Level 2
|
||||
- Level 3
|
||||
- Level 4
|
||||
- Level 1 -- (closed Level 4, Level 3 and Level 2)
|
||||
|
||||
|
||||
%%% Nesting: Vertical spacing between lists
|
||||
- Level 1
|
||||
|
||||
- Level 2 -- blank BEFORE and AFTER (in)
|
||||
|
||||
- Level 3
|
||||
% comment lines are NOT considered blank lines
|
||||
- Level 4
|
||||
% comment lines are NOT considered blank lines
|
||||
- Level 3
|
||||
|
||||
- Level 2 -- blank BEFORE and AFTER (out)
|
||||
|
||||
- Level 1
|
||||
|
||||
- Level 2 -- blank BEFORE (spaces) and AFTER (TAB)
|
||||
|
||||
- Level 3
|
||||
|
||||
|
||||
%%% Nesting: Messing up
|
||||
%% Be careful when going back on the nesting,
|
||||
%% it must be on a valid level! If not, it will
|
||||
%% be bumped up to the previous valid level.
|
||||
- Level 1
|
||||
- Level 2
|
||||
- Level 3
|
||||
- Level 4
|
||||
- Level 3.5 ???
|
||||
- Level 3
|
||||
- Level 2.5 ???
|
||||
- Level 2
|
||||
- Level 1.5 ???
|
||||
- Level 1
|
||||
|
||||
|
||||
%%% Closing: Two (not so) empty lines
|
||||
- This list is closed by a line with spaces and other with TABs
|
||||
|
||||
|
||||
- This list is NOT closed by two comment lines
|
||||
% comment lines are NOT considered blank lines
|
||||
% comment lines are NOT considered blank lines
|
||||
- This list is closed by a line with spaces and TAB,
|
||||
- then a comment line, then an empty line.
|
||||
|
||||
% comment lines are NOT considered blank lines
|
||||
|
||||
%%% Closing: Empty item closes current (sub)list
|
||||
|
||||
%% The two blank lines closes ALL the lists.
|
||||
%% To close just the current, use an empty item.
|
||||
- Level 1
|
||||
- Level 2
|
||||
- Level 3
|
||||
-
|
||||
Level 2
|
||||
-
|
||||
Level 1
|
||||
-
|
||||
|
||||
%% The empty item can have trailing blanks.
|
||||
- Empty item with trailing spaces.
|
||||
-
|
||||
|
||||
- Empty item with trailing TAB.
|
||||
-
|
||||
|
||||
%%% Closing: EOF closes the lists
|
||||
- If the end of the file (EOF) is hit,
|
||||
- all the currently opened list are closed,
|
||||
- just like when using the two blank lines.
|
||||
|
||||
|
||||
= Table =[table]
|
||||
|
||||
%INCLUDED(t2t) starts here: ../../../test/marks/table.t2t
|
||||
|
||||
%%% Syntax: Lines starting with a pipe |
|
||||
| Cell 1
|
||||
|
||||
%%% Syntax: Extra pipes separate cells
|
||||
| Cell 1 | Cell 2 | Cell 3
|
||||
|
||||
%%% Syntax: With a trailing pipe, make border
|
||||
| Cell 1 | Cell 2 | Cell 3 |
|
||||
|
||||
%%% Syntax: Table lines starting with double pipe are heading
|
||||
|| Cell 1 | Cell 2 | Cell 3 |
|
||||
|
||||
%%% Align: Spaces before the leading pipe centralize the table
|
||||
| Cell 1 | Cell 2 | Cell 3 |
|
||||
|
||||
%%% Align: Spaces inside the cell denote its alignment
|
||||
|| Heading | Heading | Heading |
|
||||
% comments don't close an opened table
|
||||
| <- | -- | -> |
|
||||
| -- | -- | -- |
|
||||
| -> | -- | <- |
|
||||
|
||||
%%% Span: Column span is defined by extra pipes at cell closing
|
||||
|| 1 | 2 | 3+4 ||
|
||||
| 1 | 2 | 3 | 4 |
|
||||
| 1+2+3 ||| 4 |
|
||||
| 1 | 2+3 || 4 |
|
||||
| 1+2+3+4 ||||
|
||||
|
||||
%%% Test: Empty cells are placed as expected
|
||||
| 0 | 1 | 2 | |
|
||||
| 4 | 5 | | 7 |
|
||||
| 8 | | A | B |
|
||||
| | D | E | F |
|
||||
|
||||
%%% Test: Lines with different number of cells
|
||||
| 1 |
|
||||
| 1 | 2 |
|
||||
| 1 | 2 | 3 |
|
||||
| 1 | 2 | 3 | 4 |
|
||||
| 1 | 2 | 3 | 4 | 5 |
|
||||
|
||||
%%% Test: Empty cells + Span + Messy cell number = Fun!
|
||||
| Jan |
|
||||
| Fev ||
|
||||
| Mar |||
|
||||
| Apr ||||
|
||||
| May |||||
|
||||
| 20% | 40% | 60% | 80% | 100% |
|
||||
|
||||
| | | / | | |
|
||||
| | / / / / / ||| |
|
||||
| / / / / / / / / / |||||
|
||||
| | o | | o | |
|
||||
| | | . | | |
|
||||
| | = = = = ||| |
|
||||
|
||||
| 01 | 02 | | | 05 | | 07 | |
|
||||
| | | 11 | | 13 | | | 16 |
|
||||
| 17 | | 19 | 20 | | | 23 | |
|
||||
| 25 | 26 | | | 29 | 30 | | 32 |
|
||||
| | | 35 | | 37 | | 39 | 40 |
|
||||
|
||||
%%% Test: Lots of cells at the same line
|
||||
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|
||||
|
||||
%%% Test: Empty lines
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
|
||||
%%% Invalid: There must be at least one space around the pipe
|
||||
|this|is|not|a|table|
|
||||
|
||||
|this| is| not| a| table|
|
||||
|
||||
|this |is |not |a |table |
|
||||
|
||||
%%% Invalid: You must use spaces, not TABs
|
||||
| this | is | not | a | table |
|
||||
|
||||
------------------------------------------------------------
|
||||
|
||||
The End.
|
Loading…
Reference in a new issue