packages feed

pandoc 3.1.12.1 → 3.1.12.2

raw patch · 64 files changed

+436/−77 lines, 64 filesdep +crypton-x509-systemdep +tlsdep ~commonmark-extensionsdep ~djotPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

Dependencies added: crypton-x509-system, tls

Dependency ranges changed: commonmark-extensions, djot

API changes (from Hackage documentation)

+ Text.Pandoc.Writers.Org: instance GHC.Show.Show Text.Pandoc.Writers.Org.DivBlockType

Files

MANUAL.txt view
@@ -1,7 +1,7 @@ --- title: Pandoc User's Guide author: John MacFarlane-date: February 17, 2024+date: February 29, 2024 ---  # Synopsis
changelog.md view
@@ -1,5 +1,68 @@ # Revision history for pandoc +## pandoc 3.1.12.2 (2024-02-29)++  * Docx reader:++    + Ensure that table captions are counted (#9518).+    + Detect caption by style name not id (#9518).+      The styleId can change depending on the localization.+    + Avoid emitting empty paragraph where caption was.++  * Markdown reader: fix regression in link parsing with wikilinks extensions+    (#9481).  This fixes a regression introduced in 3.1.12.++  * Org reader/writer: support admonitions (#9475).++  * Org writer: omit extra blank line at end of quote block.++  * Typst writer: ensure that `-`, `+`, etc. are escaped at beginning of block+    (#9478). Our recent relaxing of escaping (#9386) caused problems for+    things like emphasized `-` characters that were rendered using+    `#strong[-]#`.  This now gets rendered as `#strong[\-]`.++  * LaTeX writer: fix bug when a language is specified in two different ways+    (#9472). If you used `lang: de-DE` but then had a span or div with+    `lang=de`, the preamble would try to load `ngerman` twice, leading+    to an error. This fix ensures that a language is only loaded once.++  * Docx writer: Don't copy over `footnotePr` in `settings.xml`+    from reference.docx (#9522).++  * EPUB writer: omit EPUB2-specific meta tag on EPUB3 (#9493).+    This caused a validation failure in epubs with cover images.++  * Lua: avoid crashing when an error message is not valid UTF-8 (Albert+    Krewinkel).++  * Text.Pandoc.SelfContained:++    + Add `role="img"` to svgs.+    + Add `aria-label` to svg elements with `alt` text if present.+      Screen readers ignore `alt` attributes on svg elements but do+      pay attention to `aria-label` (#9525).++  * Text.Pandoc.Shared: Fix regression in section numbering in+    `makeSections` (#9516). Starting with pandoc 3.1.12, unnumbered+    sections incremented the section number.++  * Text.Pandoc.Class: fix `openUrl` TLS negotiation (#9483).+    With the release of TLS 2.0.0, the TLS library started requiring+    Extended Main Secret for the TLS handshake. This caused problems+    connecting to zotero's server and others that do not support TLS 1.3.+    This commit relaxes this requirement.++  * Depend on djot 0.1.1.0 (fixes rendering on multiline block attributes).++  * Use new releases of skylighting-format-blaze-html (#9520).+    Fixes auto-wrapping of long source lines in HTML print media.++  * Use new commonmark-extensions (fixes issue with the+    `rebase_relative_paths` extension when used with commonmark/gfm.++  * Makefile: improve epub-validation target (#9493).+    Use `--epub-cover-image` to catch issues that only arise with that.+ ## pandoc 3.1.12.1 (2024-02-17)    * EPUB writer: omit EPUBv3-specific accessibility features on epub2
pandoc.cabal view
@@ -1,6 +1,6 @@ cabal-version:   2.4 name:            pandoc-version:         3.1.12.1+version:         3.1.12.2 build-type:      Simple license:         GPL-2.0-or-later license-file:    COPYING.md@@ -478,7 +478,7 @@                  case-insensitive      >= 1.2      && < 1.3,                  citeproc              >= 0.8.1    && < 0.9,                  commonmark            >= 0.2.5.1  && < 0.3,-                 commonmark-extensions >= 0.2.5.2  && < 0.3,+                 commonmark-extensions >= 0.2.5.3  && < 0.3,                  commonmark-pandoc     >= 0.2.2.1  && < 0.3,                  containers            >= 0.6.0.1  && < 0.8,                  crypton-connection    >= 0.3.1    && < 0.4,@@ -528,7 +528,9 @@                  xml                   >= 1.3.12   && < 1.4,                  typst                 >= 0.5.0.1  && < 0.5.1,                  vector                >= 0.12     && < 0.14,-                 djot                  >= 0.1      && < 0.2+                 djot                  >= 0.1.1.0  && < 0.2,+                 tls                   >= 2.0.1    && < 2.1,+                 crypton-x509-system   >= 1.6.7    && < 1.7    if !os(windows)     build-depends:  unix >= 2.4 && < 2.9
src/Text/Pandoc/Class/IO.hs view
@@ -42,7 +42,9 @@ import Data.Text (Text, pack, unpack) import Data.Time (TimeZone, UTCTime) import Data.Unique (hashUnique)-import Network.Connection (TLSSettings (TLSSettingsSimple))+import Network.Connection (TLSSettings(..))+import qualified Network.TLS as TLS+import qualified Network.TLS.Extra as TLS import Network.HTTP.Client        (httpLbs, responseBody, responseHeaders,         Request(port, host, requestHeaders), parseRequest, newManager)@@ -69,6 +71,7 @@ import Text.Pandoc.Walk (walk) import qualified Control.Exception as E import qualified Data.ByteString as B+import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Lazy as BL import qualified Data.CaseInsensitive as CI import qualified Data.Text as T@@ -80,6 +83,8 @@ import qualified System.FilePath.Glob import qualified System.Random import qualified Text.Pandoc.UTF8 as UTF8+import Data.Default (def)+import System.X509 (getSystemCertificateStore) #ifndef EMBED_DATA_FILES import qualified Paths_pandoc as Paths #endif@@ -137,16 +142,32 @@      disableCertificateValidation <- getsCommonState stNoCheckCertificate      report $ Fetching u      res <- liftIO $ E.try $ withSocketsDo $ do-       let parseReq = parseRequest        proxy <- tryIOError (getEnv "http_proxy")        let addProxy' x = case proxy of                             Left _ -> return x-                            Right pr -> parseReq pr >>= \r ->+                            Right pr -> parseRequest pr >>= \r ->                                 return (addProxy (host r) (port r) x)-       req <- parseReq (unpack u) >>= addProxy'+       req <- parseRequest (unpack u) >>= addProxy'        let req' = req{requestHeaders = customHeaders ++ requestHeaders req}-       let tlsSimple = TLSSettingsSimple disableCertificateValidation False False-       let tlsManagerSettings = mkManagerSettings tlsSimple  Nothing+       certificateStore <- getSystemCertificateStore+       let tlsSettings = TLSSettings $+              (TLS.defaultParamsClient (show $ host req')+                                       (B8.pack $ show $ port req'))+                 { TLS.clientSupported = def{ TLS.supportedCiphers =+                                              TLS.ciphersuite_default+                                            , TLS.supportedExtendedMainSecret =+                                               TLS.AllowEMS }+                 , TLS.clientShared = def+                     { TLS.sharedCAStore = certificateStore+                     , TLS.sharedValidationCache =+                         if disableCertificateValidation+                            then TLS.ValidationCache+                                  (\_ _ _ -> return TLS.ValidationCachePass)+                                  (\_ _ _ -> return ())+                            else def+                     }+                 }+       let tlsManagerSettings = mkManagerSettings tlsSettings  Nothing        resp <- newManager tlsManagerSettings >>= httpLbs req'        return (B.concat $ toChunks $ responseBody resp,                UTF8.toText `fmap` lookup hContentType (responseHeaders resp))
src/Text/Pandoc/Readers/Docx.hs view
@@ -762,9 +762,9 @@   in     bodyPartToBlocks $ Paragraph pPr' parparts bodyPartToBlocks (TblCaption _ _) =-  return $ para mempty -- collected separately+  return mempty bodyPartToBlocks (Tbl _ _ _ []) =-  return $ para mempty+  return mempty bodyPartToBlocks (Tbl cap grid look parts) = do   captions <- gets docxTableCaptions   fullCaption <- case captions of
src/Text/Pandoc/Readers/Docx/Parse.hs view
@@ -766,7 +766,8 @@                   <$> asks envParStyles                   <*> asks envNumbering -      let hasCaptionStyle = elem "Caption" (pStyleId <$> pStyle parstyle)+      let hasCaptionStyle =+            any ((== "caption") . pStyleName) (pStyle parstyle)        let isTableNumberElt el@(Element name attribs _ _) =            (qName name == "fldSimple" &&@@ -792,9 +793,8 @@       case pHeading parstyle of         Nothing | Just (numId, lvl) <- pNumInfo parstyle -> do                     mkListItem parstyle numId lvl parparts-        _ -> if isTable-                then return $ TblCaption parstyle parparts-                else return $ Paragraph parstyle parparts+        _ -> return $ (if hasCaptionStyle then TblCaption else Paragraph)+                      parstyle parparts  elemToBodyPart ns element   | isElem ns "w" "tbl" element = do
src/Text/Pandoc/Readers/Markdown.hs view
@@ -1847,16 +1847,17 @@   titleAfter <-     (True <$ guardEnabled Ext_wikilinks_title_after_pipe) <|>     (False <$ guardEnabled Ext_wikilinks_title_before_pipe)-  string "[[" *> notFollowedBy' (char '[')-  raw <- many1TillChar anyChar (try $ string "]]")-  let (title, url) = case T.break (== '|') raw of-        (before, "") -> (before, before)-        (before, after)-          | titleAfter -> (T.drop 1 after, before)-          | otherwise -> (before, T.drop 1 after)-  guard $ T.all (`notElem` ['\n','\r','\f','\t']) url-  return . pure . constructor nullAttr url "wikilink" $-     B.text $ fromEntities title+  try $ do+    string "[[" *> notFollowedBy' (char '[')+    raw <- many1TillChar anyChar (try $ string "]]")+    let (title, url) = case T.break (== '|') raw of+          (before, "") -> (before, before)+          (before, after)+            | titleAfter -> (T.drop 1 after, before)+            | otherwise -> (before, T.drop 1 after)+    guard $ T.all (`notElem` ['\n','\r','\f','\t']) url+    return . pure . constructor nullAttr url "wikilink" $+       B.text $ fromEntities title  link :: PandocMonad m => MarkdownParser m (F Inlines) link = try $ do
src/Text/Pandoc/Readers/Org/Blocks.hs view
@@ -180,16 +180,21 @@   blkType <- blockHeaderStart   ($ blkType) $     case T.toLower blkType of-      "export"  -> exportBlock-      "comment" -> rawBlockLines (const mempty)-      "html"    -> rawBlockLines (return . B.rawBlock (lowercase blkType))-      "latex"   -> rawBlockLines (return . B.rawBlock (lowercase blkType))-      "ascii"   -> rawBlockLines (return . B.rawBlock (lowercase blkType))-      "example" -> exampleBlock blockAttrs-      "quote"   -> parseBlockLines (fmap B.blockQuote)-      "verse"   -> verseBlock-      "src"     -> codeBlock blockAttrs-      _         ->+      "export"    -> exportBlock+      "comment"   -> rawBlockLines (const mempty)+      "html"      -> rawBlockLines (return . B.rawBlock (lowercase blkType))+      "latex"     -> rawBlockLines (return . B.rawBlock (lowercase blkType))+      "ascii"     -> rawBlockLines (return . B.rawBlock (lowercase blkType))+      "example"   -> exampleBlock blockAttrs+      "quote"     -> parseBlockLines (fmap B.blockQuote)+      "verse"     -> verseBlock+      "src"       -> codeBlock blockAttrs+      "note"      -> admonitionBlock "note" blockAttrs+      "warning"   -> admonitionBlock "warning" blockAttrs+      "tip"       -> admonitionBlock "tip" blockAttrs+      "caution"   -> admonitionBlock "caution" blockAttrs+      "important" -> admonitionBlock "important" blockAttrs+      _           ->         -- case-sensitive checks         case blkType of           "abstract" -> metadataBlock@@ -202,6 +207,16 @@     lowercase :: Text -> Text    lowercase = T.toLower++admonitionBlock :: PandocMonad m+                => Text -> BlockAttributes -> Text -> OrgParser m (F Blocks)+admonitionBlock blockType blockAttrs rawtext = do+  bls <- parseBlockLines id rawtext+  let id' = fromMaybe mempty $ blockAttrName blockAttrs+  pure $ fmap+    (B.divWith (id', [blockType], []) .+     (B.divWith ("", ["title"], []) (B.para (B.str (T.toTitle blockType))) <>))+    bls  exampleBlock :: PandocMonad m => BlockAttributes -> Text -> OrgParser m (F Blocks) exampleBlock blockAttrs _label = do
src/Text/Pandoc/SelfContained.hs view
@@ -146,7 +146,7 @@   | any (isSourceAttribute tagname) as      = do        as' <- mapM processAttribute as-       let attrs = rights as'+       let attrs = addRole "img" $ addAriaLabel $ rights as'        let svgContents = lefts as'        rest <- convertTags ts        case svgContents of@@ -218,6 +218,20 @@               else return $ Right (x,y)  convertTags (t:ts) = (t:) <$> convertTags ts++addRole :: T.Text -> [(T.Text, T.Text)] -> [(T.Text, T.Text)]+addRole role attrs =+  case lookup "role" attrs of+    Nothing -> ("role", role) : attrs+    Just _ -> attrs++addAriaLabel :: [(T.Text, T.Text)] -> [(T.Text, T.Text)]+addAriaLabel attrs =+  case lookup "aria-label" attrs of+    Just _ -> attrs+    Nothing -> case lookup "alt" attrs of+                 Just alt -> ("aria-label", alt) : attrs+                 Nothing -> attrs  -- we want to drop spaces, <?xml>, and comments before <svg> -- and anything after </svg>:
src/Text/Pandoc/Shared.hs view
@@ -529,7 +529,7 @@           | otherwise = 0     let newnum = zipWith adjustNum [minLevel..level]                     (lastnum ++ repeat 0)-    unless (null newnum) $ S.put newnum+    unless (null newnum || "unnumbered" `elem` classes) $ S.put newnum     let (sectionContents, rest) = break (headerLtEq level) xs     sectionContents' <- go sectionContents     rest' <- go rest
src/Text/Pandoc/Writers/Docx.hs view
@@ -643,7 +643,8 @@                      , "alwaysMergeEmptyNamespace"                      , "updateFields"                      , "hdrShapeDefaults"-                     , "footnotePr"+                     -- , "footnotePr" -- this can cause problems, see #9522+                     -- , "endnotePr"                      , "compat"                      , "docVars"                      , "rsids"
src/Text/Pandoc/Writers/EPUB.hs view
@@ -1050,7 +1050,8 @@         rightsNodes = maybe [] (dcTag' "rights") $ epubRights md         coverImageNodes = maybe []             (\img -> [unode "meta" !  [(metaprop,"cover"),-                                       ("content",toId img)] $ ()])+                                       ("content",toId img)] $ ()+                        | version == EPUB2])             $ epubCoverImage md         modifiedNodes = [ unode "meta" ! [(metaprop, "dcterms:modified")] $                showDateTimeISO8601 currentTime | version == EPUB3 ]
src/Text/Pandoc/Writers/LaTeX.hs view
@@ -175,7 +175,6 @@   titleMeta <- stringToLaTeX TextString $ stringify $ docTitle meta   authorsMeta <- mapM (stringToLaTeX TextString . stringify) $ docAuthors meta   -- we need a default here since lang is used in template conditionals-  let otherLangs = [l | l <- docLangs, mblang /= Just l]   let hasStringValue x = isJust (getField x metadata :: Maybe (Doc Text))   let geometryFromMargins = mconcat $ intersperse ("," :: Doc Text) $                             mapMaybe (\(x,y) ->@@ -251,15 +250,18 @@                           -> resetField "papersize" ("a" <> ds)                       _   -> id)                   metadata+  let babelLang = mblang >>= toBabel   let context' =           -- note: lang is used in some conditionals in the template,           -- so we need to set it if we have any babel/polyglossia:           maybe id (\l -> defField "lang"                       (literal $ renderLang l)) mblang         $ maybe id (\l -> defField "babel-lang"-                      (literal l)) (mblang >>= toBabel)+                      (literal l)) babelLang         $ defField "babel-otherlangs"-             (map literal $ mapMaybe toBabel otherLangs)+             (map literal+               (nubOrd . catMaybes . filter (/= babelLang)+                $ map toBabel docLangs))         $ defField "latex-dir-rtl"            ((render Nothing <$> getField "dir" context) ==                Just ("rtl" :: Text)) context
src/Text/Pandoc/Writers/Org.hs view
@@ -206,7 +206,7 @@ blockToOrg (BlockQuote blocks) = do   contents <- blockListToOrg blocks   return $ blankline $$ "#+begin_quote" $$-           contents $$ "#+end_quote" $$ blankline+           chomp contents $$ "#+end_quote" $$ blankline blockToOrg (Table _ blkCapt specs thead tbody tfoot) =  do   let (caption', _, _, headers, rows) = toLegacyTable blkCapt specs thead tbody tfoot   caption'' <- inlineListToOrg caption'@@ -352,6 +352,7 @@                              --   key-value pairs.   | UnwrappedWithAnchor Text -- ^ Not mapped to other type, only                              --   identifier is retained (if any).+  deriving (Show)  -- | Gives the most suitable method to render a list of blocks -- with attributes.@@ -368,23 +369,39 @@   = UnwrappedWithAnchor ident  where   isGreaterBlockClass :: Text -> Bool-  isGreaterBlockClass = (`elem` ["center", "quote"]) . T.toLower+  isGreaterBlockClass t = case T.toLower t of+                            "center" -> True+                            "quote" -> True+                            x -> isAdmonition x +isAdmonition :: Text -> Bool+isAdmonition "warning" = True+isAdmonition "important" = True+isAdmonition "tip" = True+isAdmonition "note" = True+isAdmonition "caution" = True+isAdmonition _ = False+ -- | Converts a Div to an org-mode element. divToOrg :: PandocMonad m          => Attr -> [Block] -> Org m (Doc Text) divToOrg attr bs = do-  contents <- blockListToOrg bs   case divBlockType attr of-    GreaterBlock blockName attr' ->+    GreaterBlock blockName attr' -> do       -- Write as greater block. The ID, if present, is added via       -- the #+name keyword; other classes and key-value pairs       -- are kept as #+attr_html attributes.-      return $ blankline $$ attrHtml attr'+      contents <- case bs of+                    (Div ("",["title"],[]) _ : bs')+                      | isAdmonition blockName -> blockListToOrg bs'+                    _ -> blockListToOrg bs+      return $ blankline+            $$ attrHtml attr'             $$ "#+begin_" <> literal blockName-            $$ contents+            $$ chomp contents             $$ "#+end_" <> literal blockName $$ blankline     Drawer drawerName (_,_,kvs) -> do+      contents <- blockListToOrg bs       -- Write as drawer. Only key-value pairs are retained.       let keys = vcat $ map (\(k,v) ->                                ":" <> literal k <> ":"@@ -394,6 +411,7 @@             $$ contents $$ blankline             $$ text ":END:" $$ blankline     UnwrappedWithAnchor ident -> do+      contents <- blockListToOrg bs       -- Unwrap the div. All attributes are discarded, except for       -- the identifier, which is added as an anchor before the       -- div contents.@@ -408,9 +426,13 @@   let     name = if T.null ident then mempty else "#+name: " <> literal ident <> cr     keyword = "#+attr_html"-    classKv = ("class", T.unwords classes)-    kvStrings = map (\(k,v) -> ":" <> k <> " " <> v) (classKv:kvs)-  in name <> keyword <> ": " <> literal (T.unwords kvStrings) <> cr+    addClassKv = if null classes+                    then id+                    else (("class", T.unwords classes):)+    kvStrings = map (\(k,v) -> ":" <> k <> " " <> v) (addClassKv kvs)+  in name <> if null kvStrings+                then mempty+                else keyword <> ": " <> literal (T.unwords kvStrings) <> cr  -- | Convert list of Pandoc block elements to Org. blockListToOrg :: PandocMonad m
src/Text/Pandoc/Writers/Typst.hs view
@@ -218,6 +218,9 @@   return $ hang ind (marker <> space) contents  inlinesToTypst :: PandocMonad m => [Inline] -> TW m (Doc Text)+inlinesToTypst ils@(Str t : _) -- need to escape - in '[-]' #9478+  | Just (c, _) <- T.uncons t+  , needsEscapeAtLineStart c = ("\\" <>) . hcat <$> mapM inlineToTypst ils inlinesToTypst ils = hcat <$> mapM inlineToTypst ils  inlineToTypst :: PandocMonad m => Inline -> TW m (Doc Text)@@ -360,11 +363,13 @@     needsEscape '~' = True     needsEscape ':' = context == TermContext     needsEscape _ = False-    needsEscapeAtLineStart '/' = True-    needsEscapeAtLineStart '+' = True-    needsEscapeAtLineStart '-' = True-    needsEscapeAtLineStart '=' = True-    needsEscapeAtLineStart _ = False++needsEscapeAtLineStart :: Char -> Bool+needsEscapeAtLineStart '/' = True+needsEscapeAtLineStart '+' = True+needsEscapeAtLineStart '-' = True+needsEscapeAtLineStart '=' = True+needsEscapeAtLineStart _ = False  data LabelType =     FreestandingLabel
test/command/8948.md view
@@ -3,7 +3,7 @@ ![minimal](command/minimal.svg) ![minimal](command/minimal.svg) ^D-<p><svg alt="minimal" viewBox="-.333 -.333 480 150" style="background-color:#ffffff00" xml:space="preserve" width="480" height="150"><use href="#svg_7868854ffb8f30209cd0" width="100%" height="100%" /></svg> <svg id="svg_7868854ffb8f30209cd0" alt="minimal" viewBox="-.333 -.333 480 150" style="background-color:#ffffff00" xml:space="preserve" width="480" height="150">+<p><svg role="img" aria-label="minimal" alt="minimal" viewBox="-.333 -.333 480 150" style="background-color:#ffffff00" xml:space="preserve" width="480" height="150"><use href="#svg_7868854ffb8f30209cd0" width="100%" height="100%" /></svg> <svg id="svg_7868854ffb8f30209cd0" role="img" aria-label="minimal" alt="minimal" viewBox="-.333 -.333 480 150" style="background-color:#ffffff00" xml:space="preserve" width="480" height="150">     <path d="M 0 35.5 L 6.5 22.5 L 16 37 L 23 24 L 34.8 43.7 L 42.5 30 L 50.3 47 L 59.7 27.7 L 69 47 L 85 17.7 L 98.3 39 L 113 9.7 L 127.7 42.3 L 136.3 23.7 L 147 44.3 L 158.3 20.3 L 170.3 40.3 L 177.7 25.7 L 189.7 43 L 199.7 21 L 207.7 35 L 219 11 L 233 37 L 240.3 23.7 L 251 43 L 263 18.3 L 272.7 33.3 L 283 10 L 295 32.3 L 301.3 23 L 311.7 37 L 323.7 7.7 L 339.3 39 L 346.3 25.7 L 356.3 42.3 L 369.7 15 L 376.3 25.7 L 384 9 L 393 28.3 L 400.3 19 L 411.7 38.3 L 421 21 L 434.3 43 L 445 25 L 453 36.3 L 464.3 18.3 L 476.2 40.3 L 480 33.5 L 480 215 L 0 215 L 0 35.5 Z" fill="#175720" /> </svg></p> ```@@ -13,7 +13,7 @@ ![minimal](command/minimal.svg) ![minimal](command/minimal.svg){#foo} ^D-<p><svg alt="minimal" viewBox="-.333 -.333 480 150" style="background-color:#ffffff00" xml:space="preserve" width="480" height="150"><use href="#foo" width="100%" height="100%" /></svg> <svg id="foo" alt="minimal" viewBox="-.333 -.333 480 150" style="background-color:#ffffff00" xml:space="preserve" width="480" height="150">+<p><svg role="img" aria-label="minimal" alt="minimal" viewBox="-.333 -.333 480 150" style="background-color:#ffffff00" xml:space="preserve" width="480" height="150"><use href="#foo" width="100%" height="100%" /></svg> <svg id="foo" role="img" aria-label="minimal" alt="minimal" viewBox="-.333 -.333 480 150" style="background-color:#ffffff00" xml:space="preserve" width="480" height="150">     <path d="M 0 35.5 L 6.5 22.5 L 16 37 L 23 24 L 34.8 43.7 L 42.5 30 L 50.3 47 L 59.7 27.7 L 69 47 L 85 17.7 L 98.3 39 L 113 9.7 L 127.7 42.3 L 136.3 23.7 L 147 44.3 L 158.3 20.3 L 170.3 40.3 L 177.7 25.7 L 189.7 43 L 199.7 21 L 207.7 35 L 219 11 L 233 37 L 240.3 23.7 L 251 43 L 263 18.3 L 272.7 33.3 L 283 10 L 295 32.3 L 301.3 23 L 311.7 37 L 323.7 7.7 L 339.3 39 L 346.3 25.7 L 356.3 42.3 L 369.7 15 L 376.3 25.7 L 384 9 L 393 28.3 L 400.3 19 L 411.7 38.3 L 421 21 L 434.3 43 L 445 25 L 453 36.3 L 464.3 18.3 L 476.2 40.3 L 480 33.5 L 480 215 L 0 215 L 0 35.5 Z" fill="#175720" /> </svg></p> ```
test/command/9420.md view
@@ -2,7 +2,7 @@ % pandoc --embed-resources ![](command/9420.svg) ^D-<p><svg id="svg_e1815ef374a63cf552e4" width="504pt" height="360pt" viewBox="0 0 504 360">+<p><svg id="svg_e1815ef374a63cf552e4" role="img" width="504pt" height="360pt" viewBox="0 0 504 360"> <defs> <clipPath id="svg_e1815ef374a63cf552e4_clip1-c3ce354c">   <path />
test/command/9467.md view
@@ -2,7 +2,7 @@ % pandoc --embed-resources ![](command/9467.svg) ^D-<p><svg id="svg2" width="191.56267" height="151.71201" viewBox="0 0 191.56267 151.71201" xmlns:svg="http://www.w3.org/2000/svg">+<p><svg id="svg2" role="img" width="191.56267" height="151.71201" viewBox="0 0 191.56267 151.71201" xmlns:svg="http://www.w3.org/2000/svg">   <defs id="svg2_defs6">     <clipPath clipPathUnits="userSpaceOnUse" id="svg2_clipPath24">       <path d="M 56.69362,0 113.38724,113.38724 170.08086,0 Z" id="svg2_path22" />
+ test/command/9472.md view
@@ -0,0 +1,85 @@+```+% pandoc -t latex -s+---+lang: de-DE+---++More text in English. ['Zitat auf Deutsch.']{lang=de}++[Bonjour]{lang=fr} [café]{lang="fr-FR"}+^D+% Options for packages loaded elsewhere+\PassOptionsToPackage{unicode}{hyperref}+\PassOptionsToPackage{hyphens}{url}+%+\documentclass[+]{article}+\usepackage{amsmath,amssymb}+\usepackage{iftex}+\ifPDFTeX+  \usepackage[T1]{fontenc}+  \usepackage[utf8]{inputenc}+  \usepackage{textcomp} % provide euro and other symbols+\else % if luatex or xetex+  \usepackage{unicode-math} % this also loads fontspec+  \defaultfontfeatures{Scale=MatchLowercase}+  \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}+\fi+\usepackage{lmodern}+\ifPDFTeX\else+  % xetex/luatex font selection+\fi+% Use upquote if available, for straight quotes in verbatim environments+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}+\IfFileExists{microtype.sty}{% use microtype if available+  \usepackage[]{microtype}+  \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts+}{}+\makeatletter+\@ifundefined{KOMAClassName}{% if non-KOMA class+  \IfFileExists{parskip.sty}{%+    \usepackage{parskip}+  }{% else+    \setlength{\parindent}{0pt}+    \setlength{\parskip}{6pt plus 2pt minus 1pt}}+}{% if KOMA class+  \KOMAoptions{parskip=half}}+\makeatother+\usepackage{xcolor}+\setlength{\emergencystretch}{3em} % prevent overfull lines+\providecommand{\tightlist}{%+  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}+\setcounter{secnumdepth}{-\maxdimen} % remove section numbering+\ifLuaTeX+\usepackage[bidi=basic]{babel}+\else+\usepackage[bidi=default]{babel}+\fi+\babelprovide[main,import]{ngerman}+\babelprovide[import]{french}+% get rid of language-specific shorthands (see #6817):+\let\LanguageShortHands\languageshorthands+\def\languageshorthands#1{}+\ifLuaTeX+  \usepackage{selnolig}  % disable illegal ligatures+\fi+\usepackage{bookmark}+\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available+\urlstyle{same}+\hypersetup{+  pdflang={de-DE},+  hidelinks,+  pdfcreator={LaTeX via pandoc}}++\author{}+\date{}++\begin{document}++More text in English. \foreignlanguage{ngerman}{`Zitat auf Deutsch.'}++\foreignlanguage{french}{Bonjour} \foreignlanguage{french}{café}++\end{document}++```
+ test/command/9475.md view
@@ -0,0 +1,102 @@+```+% pandoc -f org -t native+#+begin_note+Useful note.+#+end_note++#+begin_warning+Be careful!+#+end_warning++#+begin_tip+Try this...+#+end_tip++#+begin_caution+Caution+#+end_caution++#+name: foo+#+begin_important+Important+#+end_important+^D+[ Div+    ( "" , [ "note" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Note" ] ]+    , Para [ Str "Useful" , Space , Str "note." ]+    ]+, Div+    ( "" , [ "warning" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Warning" ] ]+    , Para [ Str "Be" , Space , Str "careful!" ]+    ]+, Div+    ( "" , [ "tip" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Tip" ] ]+    , Para [ Str "Try" , Space , Str "this\8230" ]+    ]+, Div+    ( "" , [ "caution" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Caution" ] ]+    , Para [ Str "Caution" ]+    ]+, Div+    ( "foo" , [ "important" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Important" ] ]+    , Para [ Str "Important" ]+    ]+]++```++```+% pandoc -f native -t org+[ Div+    ( "" , [ "note" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Note" ] ]+    , Para [ Str "Useful" , Space , Str "note." ]+    ]+, Div+    ( "" , [ "warning" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Warning" ] ]+    , Para [ Str "Be" , Space , Str "careful!" ]+    ]+, Div+    ( "" , [ "tip" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Tip" ] ]+    , Para [ Str "Try" , Space , Str "this\8230" ]+    ]+, Div+    ( "" , [ "caution" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Caution" ] ]+    , Para [ Str "Caution" ]+    ]+, Div+    ( "foo" , [ "important" ] , [] )+    [ Div ( "" , [ "title" ] , [] ) [ Para [ Str "Important" ] ]+    , Para [ Str "Important" ]+    ]+]+^D+#+begin_note+Useful note.+#+end_note++#+begin_warning+Be careful!+#+end_warning++#+begin_tip+Try this...+#+end_tip++#+begin_caution+Caution+#+end_caution++#+name: foo+#+begin_important+Important+#+end_important+```
+ test/command/9478.md view
@@ -0,0 +1,9 @@+```+% pandoc -t typst --wrap=preserve+**- a -+- b**+^D+#strong[\- a -+\- b]+```+
+ test/command/9481.md view
@@ -0,0 +1,7 @@+```+% pandoc -f markdown+wikilinks_title_after_pipe+[a](https://example.com)+^D+<p><a href="https://example.com">a</a></p>++```
+ test/command/9516.md view
@@ -0,0 +1,17 @@+```+% pandoc --number-sections+# One {-}++# Two++# Three {-}++# Four+^D+<h1 class="unnumbered" id="one">One</h1>+<h1 data-number="1" id="two"><span+class="header-section-number">1</span> Two</h1>+<h1 class="unnumbered" id="three">Three</h1>+<h1 data-number="2" id="four"><span+class="header-section-number">2</span> Four</h1>+```
test/docx/golden/block_quotes.docx view

binary file changed (9986 → 9961 bytes)

test/docx/golden/codeblock.docx view

binary file changed (9801 → 9776 bytes)

test/docx/golden/comments.docx view

binary file changed (10134 → 10109 bytes)

test/docx/golden/custom_style_no_reference.docx view

binary file changed (9901 → 9876 bytes)

test/docx/golden/custom_style_preserve.docx view

binary file changed (10532 → 10507 bytes)

test/docx/golden/custom_style_reference.docx view

binary file changed (12544 → 12517 bytes)

test/docx/golden/definition_list.docx view

binary file changed (9800 → 9775 bytes)

test/docx/golden/document-properties-short-desc.docx view

binary file changed (9808 → 9781 bytes)

test/docx/golden/document-properties.docx view

binary file changed (10293 → 10268 bytes)

test/docx/golden/headers.docx view

binary file changed (9940 → 9915 bytes)

test/docx/golden/image.docx view

binary file changed (26682 → 26657 bytes)

test/docx/golden/inline_code.docx view

binary file changed (9740 → 9715 bytes)

test/docx/golden/inline_formatting.docx view

binary file changed (9921 → 9896 bytes)

test/docx/golden/inline_images.docx view

binary file changed (26680 → 26655 bytes)

binary file changed (9962 → 9937 bytes)

test/docx/golden/links.docx view

binary file changed (10133 → 10108 bytes)

test/docx/golden/lists.docx view

binary file changed (10204 → 10179 bytes)

test/docx/golden/lists_continuing.docx view

binary file changed (9996 → 9971 bytes)

test/docx/golden/lists_div_bullets.docx view

binary file changed (9850 → 9825 bytes)

test/docx/golden/lists_multiple_initial.docx view

binary file changed (10081 → 10056 bytes)

test/docx/golden/lists_restarting.docx view

binary file changed (9994 → 9969 bytes)

test/docx/golden/nested_anchors_in_header.docx view

binary file changed (10133 → 10108 bytes)

test/docx/golden/notes.docx view

binary file changed (9909 → 9884 bytes)

test/docx/golden/raw-blocks.docx view

binary file changed (9841 → 9816 bytes)

test/docx/golden/raw-bookmarks.docx view

binary file changed (9975 → 9950 bytes)

test/docx/golden/table_one_row.docx view

binary file changed (9824 → 9799 bytes)

test/docx/golden/table_with_list_cell.docx view

binary file changed (10144 → 10119 bytes)

test/docx/golden/tables-default-widths.docx view

binary file changed (10169 → 10144 bytes)

test/docx/golden/tables.docx view

binary file changed (10183 → 10158 bytes)

test/docx/golden/tables_separated_with_rawblock.docx view

binary file changed (9822 → 9797 bytes)

test/docx/golden/track_changes_deletion.docx view

binary file changed (9784 → 9759 bytes)

test/docx/golden/track_changes_insertion.docx view

binary file changed (9767 → 9742 bytes)

test/docx/golden/track_changes_move.docx view

binary file changed (9801 → 9776 bytes)

test/docx/golden/track_changes_scrubbed_metadata.docx view

binary file changed (9910 → 9885 bytes)

test/docx/golden/unicode.docx view

binary file changed (9726 → 9701 bytes)

test/docx/golden/verbatim_subsuper.docx view

binary file changed (9773 → 9748 bytes)

test/docx/table_captions_no_field.native view
@@ -1,7 +1,6 @@ [Para [Str "See",Space,Str "Table",Space,Str "5.1."]-,Para [Str "Table",Space,Str "5.1"]-,Table ("",[],[]) (Caption Nothing- [])+,Table ("",[],[])+ (Caption Nothing [ Para [ Str "Table" , Space , Str "5.1" ] ])  [(AlignDefault,ColWidth 0.7605739372523825)  ,(AlignDefault,ColWidth 0.11971303137380876)  ,(AlignDefault,ColWidth 0.11971303137380876)]
test/docx/table_captions_with_field.native view
@@ -1,6 +1,6 @@ [Para [Str "See",Space,Str "Table",Space,Str "1."]-,Para [Str "Table",Space,Str "1"]-,Table ("",[],[]) (Caption Nothing [])+,Table ("",[],[])+ (Caption Nothing [ Para [ Str "Table" , Space , Str "1" ] ])  [(AlignDefault,ColWidth 0.7605739372523825)  ,(AlignDefault,ColWidth 0.11971303137380876)  ,(AlignDefault,ColWidth 0.11971303137380876)]@@ -31,7 +31,8 @@  (TableFoot ("",[],[])  []) ,Header 2 ("section", [], []) []-,Table ("",[],[]) (Caption Nothing [])+,Table ("",[],[])+ (Caption Nothing [Para [Str "Table", Space, Str "2"]])  [(AlignDefault,ColWidth 0.3332963620230701)  ,(AlignDefault,ColWidth 0.3332963620230701)  ,(AlignDefault,ColWidth 0.3334072759538598)]@@ -48,5 +49,4 @@   [])]  (TableFoot ("",[],[])  [])-,Para [Str "Table",Space,Str "2"] ,Para [Str "See",Space,Str "Table",Space,Str "2."]]
test/lhs-test.html view
@@ -179,7 +179,7 @@     }     @media print {     pre > code.sourceCode { white-space: pre-wrap; }-    pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }+    pre > code.sourceCode > span { display: inline-block; text-indent: -5em; padding-left: 5em; }     }     pre.numberSource code       { counter-reset: source-line 0; }
test/lhs-test.html+lhs view
@@ -179,7 +179,7 @@     }     @media print {     pre > code.sourceCode { white-space: pre-wrap; }-    pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }+    pre > code.sourceCode > span { display: inline-block; text-indent: -5em; padding-left: 5em; }     }     pre.numberSource code       { counter-reset: source-line 0; }
test/writer.org view
@@ -75,7 +75,6 @@  #+begin_quote This is a block quote. It is pretty short.- #+end_quote  #+begin_quote@@ -96,14 +95,11 @@  #+begin_quote nested- #+end_quote  #+begin_quote nested- #+end_quote- #+end_quote  This should not be a block quote: 2 > 1.@@ -345,7 +341,6 @@    #+begin_quote   orange block quote-   #+end_quote  Multiple definitions, tight:@@ -753,7 +748,6 @@  #+begin_quote Blockquoted: [[http://example.com/]]- #+end_quote  Auto-links should not occur here: =<http://example.com/>=@@ -787,7 +781,6 @@  #+begin_quote Notes can go in quotes.[fn:4]- #+end_quote  1. And in list items.[fn:5]