diff options
| -rw-r--r-- | src/Text/Pandoc/Readers/Textile.hs | 19 | 
1 files changed, 16 insertions, 3 deletions
| diff --git a/src/Text/Pandoc/Readers/Textile.hs b/src/Text/Pandoc/Readers/Textile.hs index 276f188c5..52eebd07f 100644 --- a/src/Text/Pandoc/Readers/Textile.hs +++ b/src/Text/Pandoc/Readers/Textile.hs @@ -70,7 +70,8 @@ import Text.Pandoc.Readers.HTML ( htmlTag, htmlEndTag, -- find code blocks                                    rawHtmlBlock, rawHtmlInline )  import Text.Pandoc.Readers.Markdown (smartPunctuation)  import Text.ParserCombinators.Parsec -import Data.Char ( digitToInt ) +import Data.Char ( digitToInt, isLetter ) +import Control.Monad ( guard )  -- | Parse a Textile text and return a Pandoc document.  readTextile :: ParserState -- ^ Parser state, including options for parser @@ -312,7 +313,19 @@ inlineParsers = [ autoLink  -- | Any string  str :: GenParser Char ParserState Inline -str = many1 (noneOf (specialChars ++ "\t\n ")) >>= return . Str +str = do +  xs <- many1 (noneOf (specialChars ++ "\t\n ")) +  optional $ charsInBalanced '(' ')' -- drop acronym explanation +                                     -- e.g. PBS(Public Broadcasting Service) +  -- parse a following hyphen if followed by a letter +  -- (this prevents unwanted interpretation as starting a strikeout section) +  result <- option xs $ try $ do +              guard $ not . null $ xs +              char '-' +              next <- lookAhead letter +              guard $ isLetter (last xs) || isLetter next +              return $ xs ++ "-" +  return $ Str result  -- | Textile allows HTML span infos, we discard them  htmlSpan :: GenParser Char ParserState Inline @@ -384,4 +397,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
\ No newline at end of file +  where inlineWithAttribute = (try $ optional attributes) >> inline | 
