@@ -35,6 +35,7 @@ import Data.List (intercalate)
3535import qualified Data.Map as M
3636import Data.Maybe (fromMaybe, maybeToList)
3737import qualified Data.Set as Set
38+import qualified Data.Sequence as Seq
3839import Data.Text (Text)
3940import qualified Data.Text as T
4041import System.FilePath (addExtension, replaceExtension, takeExtension)
@@ -1845,6 +1846,8 @@ environments = M.fromList
18451846 , ("tikzcd", rawVerbEnv "tikzcd")
18461847 , ("lilypond", rawVerbEnv "lilypond")
18471848 , ("ly", rawVerbEnv "ly")
1849+ -- amsthm
1850+ , ("proof", amsProof)
18481851 -- etoolbox
18491852 , ("ifstrequal", ifstrequal)
18501853 , ("newtoggle", braced >>= newToggle)
@@ -1853,6 +1856,30 @@ environments = M.fromList
18531856 , ("iftoggle", try $ ifToggle >> block)
18541857 ]
18551858
1859+amsProof :: PandocMonad m => LP m Blocks
1860+amsProof = do
1861+ title <- option (B.text "Proof") opt
1862+ bs <- env "proof" blocks
1863+ return $
1864+ B.divWith ("", ["proof"], []) $
1865+ addQed $ addTitle (B.emph (title <> ".")) $ bs
1866+
1867+addTitle :: Inlines -> Blocks -> Blocks
1868+addTitle ils bs =
1869+ case B.toList bs of
1870+ (Para xs : rest)
1871+ -> B.fromList (Para (B.toList ils ++ (Space : xs)) : rest)
1872+ _ -> B.para ils <> bs
1873+
1874+addQed :: Blocks -> Blocks
1875+addQed bs =
1876+ case Seq.viewr (B.unMany bs) of
1877+ s Seq.:> Para ils
1878+ -> B.Many (s Seq.|> Para (ils ++ B.toList qedSign))
1879+ _ -> bs <> B.para qedSign
1880+ where
1881+ qedSign = B.spanWith ("",["qed"],[]) "\x220E"
1882+
18561883environment :: PandocMonad m => LP m Blocks
18571884environment = try $ do
18581885 controlSeq "begin"