aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/Textile.hs43
-rw-r--r--tests/textile-reader.native16
-rw-r--r--tests/textile-reader.textile15
3 files changed, 56 insertions, 18 deletions
diff --git a/src/Text/Pandoc/Readers/Textile.hs b/src/Text/Pandoc/Readers/Textile.hs
index 96df3dd04..aec8b48a8 100644
--- a/src/Text/Pandoc/Readers/Textile.hs
+++ b/src/Text/Pandoc/Readers/Textile.hs
@@ -28,7 +28,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Conversion from Textile to 'Pandoc' document, based on the spec
available at ahttp://redcloth.org/hobix.com/textile/
-Implemented and parsed :
+Implemented and parsed:
- Paragraphs
- Code blocks
- Lists
@@ -36,8 +36,14 @@ Implemented and parsed :
- Inlines : strong, emph, cite, code, deleted, superscript,
subscript, links
-Implemented but discarded :
+Implemented but discarded:
- HTML-specific and CSS-specific attributes
+
+Left to be implemented:
+ - Pandoc Meta Information (title, author, date)
+ - footnotes
+ - should autolink be shared through Parsing.hs ?
+
-}
@@ -47,7 +53,8 @@ module Text.Pandoc.Readers.Textile (
import Text.Pandoc.Definition
import Text.Pandoc.Shared
import Text.Pandoc.Parsing
-import Text.Pandoc.Readers.HTML ( htmlTag, htmlEndTag )
+import Text.Pandoc.Readers.HTML ( htmlTag, htmlEndTag, -- find code blocks
+ rawHtmlBlock, rawHtmlInline )
import Text.ParserCombinators.Parsec
import Data.Char ( digitToInt )
@@ -83,6 +90,7 @@ blockParsers = [ codeBlock
, header
, blockQuote
, anyList
+ , rawHtmlBlock'
, maybeExplicitBlock "table" table
, maybeExplicitBlock "p" para
, nullBlock ]
@@ -170,17 +178,26 @@ orderedListItemAtDepth depth = try $ do
sublist <- option [] (anyListAtDepth (depth + 1) >>= return . (:[]))
return (p:sublist)
--- | This terminates a block such as a paragraph.
+-- | This terminates a block such as a paragraph. Because of raw html
+-- blocks support, we have to lookAhead for a rawHtmlBlock.
blockBreak :: GenParser Char ParserState ()
-blockBreak = try $ newline >> blanklines >> return ()
+blockBreak = try $ choice
+ [newline >> blanklines >> return (),
+ lookAhead rawHtmlBlock' >> return ()]
+-- | A raw Html Block, optionally followed by blanklines
+rawHtmlBlock' :: GenParser Char ParserState Block
+rawHtmlBlock' = try $ do
+ b <- rawHtmlBlock
+ optional blanklines
+ return b
-- | In textile, paragraphs are separated by blank lines.
para :: GenParser Char ParserState Block
para = try $ do
content <- manyTill inline blockBreak
return $ Para $ normalizeSpaces content
-
+
-- Tables
@@ -260,6 +277,7 @@ inlineParsers = [ autoLink
, str
, whitespace
, endline
+ , rawHtmlInline
, code
, simpleInline (string "??") (Cite [])
, simpleInline (string "**") Strong
@@ -313,7 +331,7 @@ image = try $ do
-- | Any special symbol defined in specialChars
symbol :: GenParser Char ParserState Inline
-symbol = do
+symbol = do
result <- oneOf specialChars
return $ Str [result]
@@ -322,7 +340,6 @@ code :: GenParser Char ParserState Inline
code = surrounded (char '@') anyChar >>=
return . Code
-
-- | Html / CSS attributes
attributes :: GenParser Char ParserState String
attributes = choice [ enclosed (char '(') (char ')') anyChar,
@@ -341,12 +358,4 @@ simpleInline :: GenParser Char ParserState t -- ^ surrounding parser
-> GenParser Char ParserState Inline -- ^ content parser (to be used repeatedly)
simpleInline border construct = surrounded border (inlineWithAttribute) >>=
return . construct . normalizeSpaces
- where inlineWithAttribute = (try $ optional attributes) >> inline
-
-
--- TODO
---
--- - Pandoc Meta Information (title, author, date)
--- - footnotes
--- - should autolink be shared through Parsing.hs ?
--- - embeded HTML, both inlines and blocks
+ where inlineWithAttribute = (try $ optional attributes) >> inline \ No newline at end of file
diff --git a/tests/textile-reader.native b/tests/textile-reader.native
index 2b91ab7ac..738362b09 100644
--- a/tests/textile-reader.native
+++ b/tests/textile-reader.native
@@ -113,4 +113,18 @@ Pandoc (Meta {docTitle = [Str ""], docAuthors = [[Str ""]], docDate = [Str ""]})
, [ Plain [Str "sex"] ] ],
[ [ Plain [Str "joan"] ]
, [ Plain [Str "24"] ]
- , [ Plain [Str "f"] ] ] ] ]
+ , [ Plain [Str "f"] ] ] ]
+, Header 1 [Str "Raw",Space,Str "HTML"]
+, Para [Str "However,",Space,HtmlInline "<strong>",Space,Str "raw",Space,Str "HTML",Space,Str "inlines",Space,HtmlInline "</strong>",Space,Str "are",Space,Str "accepted,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str ":"]
+, RawHtml "<div class=\"foobar\">"
+, Para [Str "any",Space,Strong [Str "Raw",Space,Str "HTML",Space,Str "Block"],Space,Str "with",Space,Str "bold"]
+, RawHtml "</div>"
+, Para [Str "Html",Space,Str "blocks",Space,Str "can",Space,Str "be"]
+, RawHtml "<div>"
+, Para [Str "inlined"]
+, RawHtml "</div>"
+, Para [Str "as",Space,Str "well."]
+, BulletList
+ [ [ Plain [Str "this",Space,Str "<",Str "div",Str ">",Space,Str "won",Str "'",Str "t",Space,Str "produce",Space,Str "raw",Space,Str "html",Space,Str "blocks",Space,Str "<",Str "/div",Str ">"] ]
+ , [ Plain [Str "but",Space,Str "this",Space,HtmlInline "<strong>",Space,Str "will",Space,Str "produce",Space,Str "inline",Space,Str "html",Space,HtmlInline "</strong>"] ] ]
+, Para [Str "Can",Space,Str "you",Space,Str "prove",Space,Str "that",Space,Str "2",Space,Str "<",Space,Str "3",Space,Str "?"] ]
diff --git a/tests/textile-reader.textile b/tests/textile-reader.textile
index 3999649da..7384abb64 100644
--- a/tests/textile-reader.textile
+++ b/tests/textile-reader.textile
@@ -161,3 +161,18 @@ p{color:green}. and paragraph attributes, and table attributes.
table{foo:bar}.
| name | age | sex |
| joan | 24 | f |
+
+h1. Raw HTML
+
+However, <strong> raw HTML inlines </strong> are accepted, as well as :
+
+<div class="foobar">
+ any *Raw HTML Block* with bold
+</div>
+
+Html blocks can be <div>inlined</div> as well.
+
+* this <div> won't produce raw html blocks </div>
+* but this <strong> will produce inline html </strong>
+
+Can you prove that 2 < 3 ?