diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 7 | ||||
-rw-r--r-- | src/Text/Pandoc/Shared.hs | 4 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/LaTeX.hs | 13 |
3 files changed, 20 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index 38777b003..c152cc336 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -381,7 +381,8 @@ comment = try (do -- inline -- -inline = choice [ strong, emph, ref, lab, code, linebreak, math, ellipses, +inline = choice [ strong, emph, ref, lab, code, linebreak, spacer, + math, ellipses, emDash, enDash, hyphen, quoted, apostrophe, accentedChar, specialChar, specialInline, escapedChar, unescapedChar, str, endline, whitespace ] <?> "inline" @@ -579,6 +580,10 @@ linebreak = try (do string "\\\\" return LineBreak) +spacer = try $ do + string "\\," + return (Str "") + str = do result <- many1 (noneOf specialChars) return (Str result) diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index 1df2b4d38..2ba19f8dd 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -306,12 +306,14 @@ splitByIndices (x:xs) lst = first:(splitByIndices (map (\y -> y - x) xs) rest) -- | Normalize a list of inline elements: remove leading and trailing --- @Space@ elements, and collapse double @Space@s into singles. +-- @Space@ elements, collapse double @Space@s into singles, and +-- remove empty Str elements. normalizeSpaces :: [Inline] -> [Inline] normalizeSpaces [] = [] normalizeSpaces list = let removeDoubles [] = [] removeDoubles (Space:Space:rest) = removeDoubles (Space:rest) + removeDoubles ((Str ""):rest) = removeDoubles rest removeDoubles (x:rest) = x:(removeDoubles rest) in let removeLeading [] = [] removeLeading lst = if ((head lst) == Space) diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs index 2badf2f24..d72c915d5 100644 --- a/src/Text/Pandoc/Writers/LaTeX.hs +++ b/src/Text/Pandoc/Writers/LaTeX.hs @@ -166,6 +166,11 @@ inlineListToLaTeX :: [Block] -- ^ List of note blocks to use in resolving note inlineListToLaTeX notes lst = concatMap (inlineToLaTeX notes) lst +isQuoted :: Inline -> Bool +isQuoted (Quoted _ _) = True +isQuoted Apostrophe = True +isQuoted _ = False + -- | Convert inline element to LaTeX inlineToLaTeX :: [Block] -- ^ List of note blocks to use in resolving note refs -> Inline -- ^ Inline to convert @@ -178,9 +183,13 @@ inlineToLaTeX notes (Code str) = "\\verb" ++ [chr] ++ stuffing ++ [chr] where stuffing = str chr = ((enumFromTo '!' '~') \\ stuffing) !! 0 inlineToLaTeX notes (Quoted SingleQuote lst) = - "`" ++ inlineListToLaTeX notes lst ++ "'" + let s1 = if (not (null lst)) && (isQuoted (head lst)) then "\\," else "" + s2 = if (not (null lst)) && (isQuoted (last lst)) then "\\," else "" in + "`" ++ s1 ++ inlineListToLaTeX notes lst ++ s2 ++ "'" inlineToLaTeX notes (Quoted DoubleQuote lst) = - "``" ++ inlineListToLaTeX notes lst ++ "''" + let s1 = if (not (null lst)) && (isQuoted (head lst)) then "\\," else "" + s2 = if (not (null lst)) && (isQuoted (last lst)) then "\\," else "" in + "``" ++ s1 ++ inlineListToLaTeX notes lst ++ s2 ++ "''" inlineToLaTeX notes Apostrophe = "'" inlineToLaTeX notes EmDash = "---" inlineToLaTeX notes EnDash = "--" |