@@ -501,13 +501,17 @@ setpos spos (Tok _ tt txt) = Tok spos tt txt
502anyControlSeq :: PandocMonad m => LP m Tok
502anyControlSeq :: PandocMonad m => LP m Tok
503anyControlSeq = satisfyTok isCtrlSeq
503anyControlSeq = satisfyTok isCtrlSeq
505+isCtrlSeq :: Tok -> Bool
504− where isCtrlSeq (Tok _ (CtrlSeq _) _) = True
506+isCtrlSeq (Tok _ (CtrlSeq _) _) = True
505− isCtrlSeq _ = False
507+isCtrlSeq _ = False
507anySymbol :: PandocMonad m => LP m Tok
509anySymbol :: PandocMonad m => LP m Tok
508−anySymbol = satisfyTok isSym
510+anySymbol = satisfyTok isSymbolTok
512+isSymbolTok :: Tok -> Bool
509− where isSym (Tok _ Symbol _) = True
513+isSymbolTok (Tok _ Symbol _) = True
510− isSym _ = False
514+isSymbolTok _ = False
512spaces :: PandocMonad m => LP m ()
516spaces :: PandocMonad m => LP m ()
513spaces = skipMany (satisfyTok (tokTypeIn [Comment, Spaces, Newline]))
517spaces = skipMany (satisfyTok (tokTypeIn [Comment, Spaces, Newline]))
@@ -542,8 +546,10 @@ sp = whitespace <|> endline
543whitespace :: PandocMonad m => LP m ()
547whitespace :: PandocMonad m => LP m ()
544whitespace = () <$ satisfyTok isSpaceTok
548whitespace = () <$ satisfyTok isSpaceTok
550+isSpaceTok :: Tok -> Bool
545− where isSpaceTok (Tok _ Spaces _) = True
551+isSpaceTok (Tok _ Spaces _) = True
546− isSpaceTok _ = False
552+isSpaceTok _ = False
548newlineTok :: PandocMonad m => LP m ()
554newlineTok :: PandocMonad m => LP m ()
549newlineTok = () <$ satisfyTok isNewlineTok
555newlineTok = () <$ satisfyTok isNewlineTok
@@ -554,8 +560,10 @@ isNewlineTok _ = False
555comment :: PandocMonad m => LP m ()
561comment :: PandocMonad m => LP m ()
556comment = () <$ satisfyTok isCommentTok
562comment = () <$ satisfyTok isCommentTok
564+isCommentTok :: Tok -> Bool
557− where isCommentTok (Tok _ Comment _) = True
565+isCommentTok (Tok _ Comment _) = True
558− isCommentTok _ = False
566+isCommentTok _ = False
560anyTok :: PandocMonad m => LP m Tok
568anyTok :: PandocMonad m => LP m Tok
561anyTok = satisfyTok (const True)
569anyTok = satisfyTok (const True)
@@ -819,18 +827,25 @@ dolstinline = do
819keyval :: PandocMonad m => LP m (String, String)
827keyval :: PandocMonad m => LP m (String, String)
820keyval = try $ do
828keyval = try $ do
821 Tok _ Word key <- satisfyTok isWordTok
829 Tok _ Word key <- satisfyTok isWordTok
822− let isSpecSym (Tok _ Symbol t) = t /= "]" && t /= ","
824 optional sp
830 optional sp
825− val <- option [] $ do
831+ val <- option mempty $ do
826 symbol '='
832 symbol '='
827 optional sp
833 optional sp
828− braced <|> many1 (satisfyTok isWordTok <|> satisfyTok isSpecSym
834+ (untokenize <$> braced) <|>
829− <|> anyControlSeq)
835+ (mconcat <$> many1 (
830− optional sp
836+ (untokenize . snd <$> withRaw braced)
838+ (untokenize <$> (many1
841+ Tok _ Symbol "]" -> False
842+ Tok _ Symbol "," -> False
843+ Tok _ Symbol "{" -> False
844+ Tok _ Symbol "}" -> False
831 optional (symbol ',')
846 optional (symbol ',')
832 optional sp
847 optional sp
833− return (T.unpack key, T.unpack . untokenize $ val)
848+ return (T.unpack key, T.unpack $ T.strip val)
835keyvals :: PandocMonad m => LP m [(String, String)]
850keyvals :: PandocMonad m => LP m [(String, String)]
836keyvals = try $ symbol '[' >> manyTill keyval (symbol ']')
851keyvals = try $ symbol '[' >> manyTill keyval (symbol ']')
@@ -1644,8 +1659,16 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
1644 , ("foreignlanguage", foreignlanguage)
1659 , ("foreignlanguage", foreignlanguage)
1645 -- include
1660 -- include
1646 , ("input", include "input")
1661 , ("input", include "input")
1662+ -- plain tex stuff that should just be passed through as raw tex
1666+ifdim :: PandocMonad m => LP m Inlines
1668+ contents <- manyTill anyTok (controlSeq "fi")
1669+ return $ rawInline "latex" $ T.unpack $
1670+ "\\ifdim" <> untokenize contents <> "\\fi"
1649makeUppercase :: Inlines -> Inlines
1672makeUppercase :: Inlines -> Inlines
1650makeUppercase = fromList . walk (alterStr (map toUpper)) . toList
1673makeUppercase = fromList . walk (alterStr (map toUpper)) . toList