Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ghc-commonmark-extensions for
openSUSE:Factory checked in at 2023-09-21 22:23:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-commonmark-extensions (Old)
and /work/SRC/openSUSE:Factory/.ghc-commonmark-extensions.new.1770 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-commonmark-extensions"
Thu Sep 21 22:23:12 2023 rev:12 rq:1112759 version:0.2.3.6
Changes:
--------
---
/work/SRC/openSUSE:Factory/ghc-commonmark-extensions/ghc-commonmark-extensions.changes
2023-07-18 21:54:29.306415126 +0200
+++
/work/SRC/openSUSE:Factory/.ghc-commonmark-extensions.new.1770/ghc-commonmark-extensions.changes
2023-09-21 22:23:40.310222817 +0200
@@ -1,0 +2,18 @@
+Wed Sep 13 23:22:12 UTC 2023 - Peter Simons <[email protected]>
+
+- Update commonmark-extensions to version 0.2.3.6.
+ ## 0.2.3.6
+
+ * Fix pipe table parser so that `|`s don't interfere with
+ other block structures (Michael Howell, #111, fixing #52 and
+ #95). This parser is structured as a system that parses the
+ *second* line first, then parses the first line. That is, if
+ it detects a delimiter row as the second line of a
+ paragraph, it converts the paragraph into a table. This
+ seems counterintuitive, but it works better than trying to
+ convert a table into a paragraph, since it might need to be
+ something else.
+
+ * Improve parsing of inline math (#110).
+
+-------------------------------------------------------------------
Old:
----
commonmark-extensions-0.2.3.5.tar.gz
New:
----
commonmark-extensions-0.2.3.6.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-commonmark-extensions.spec ++++++
--- /var/tmp/diff_new_pack.w6sU3D/_old 2023-09-21 22:23:41.438263750 +0200
+++ /var/tmp/diff_new_pack.w6sU3D/_new 2023-09-21 22:23:41.438263750 +0200
@@ -20,7 +20,7 @@
%global pkgver %{pkg_name}-%{version}
%bcond_with tests
Name: ghc-%{pkg_name}
-Version: 0.2.3.5
+Version: 0.2.3.6
Release: 0
Summary: Pure Haskell commonmark parser
License: BSD-3-Clause
++++++ commonmark-extensions-0.2.3.5.tar.gz ->
commonmark-extensions-0.2.3.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/commonmark-extensions-0.2.3.5/changelog.md
new/commonmark-extensions-0.2.3.6/changelog.md
--- old/commonmark-extensions-0.2.3.5/changelog.md 2001-09-09
03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.3.6/changelog.md 2001-09-09
03:46:40.000000000 +0200
@@ -1,5 +1,19 @@
# Changelog for commonmark-extensions
+## 0.2.3.6
+
+ * Fix pipe table parser so that `|`s don't interfere with
+ other block structures (Michael Howell, #111, fixing #52 and
+ #95). This parser is structured as a system that parses the
+ *second* line first, then parses the first line. That is, if
+ it detects a delimiter row as the second line of a
+ paragraph, it converts the paragraph into a table. This
+ seems counterintuitive, but it works better than trying to
+ convert a table into a paragraph, since it might need to be
+ something else.
+
+ * Improve parsing of inline math (#110).
+
## 0.2.3.5
- Resolve entities inside wikilinks (#105, MichaÅ KukieÅa).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/commonmark-extensions-0.2.3.5/commonmark-extensions.cabal
new/commonmark-extensions-0.2.3.6/commonmark-extensions.cabal
--- old/commonmark-extensions-0.2.3.5/commonmark-extensions.cabal
2001-09-09 03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.3.6/commonmark-extensions.cabal
2001-09-09 03:46:40.000000000 +0200
@@ -1,5 +1,5 @@
name: commonmark-extensions
-version: 0.2.3.5
+version: 0.2.3.6
synopsis: Pure Haskell commonmark parser.
description:
This library provides some useful extensions to core commonmark
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/commonmark-extensions-0.2.3.5/src/Commonmark/Extensions/Math.hs
new/commonmark-extensions-0.2.3.6/src/Commonmark/Extensions/Math.hs
--- old/commonmark-extensions-0.2.3.5/src/Commonmark/Extensions/Math.hs
2001-09-09 03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.3.6/src/Commonmark/Extensions/Math.hs
2001-09-09 03:46:40.000000000 +0200
@@ -41,9 +41,10 @@
symbol '$'
display <- (True <$ symbol '$') <|> (False <$ notFollowedBy whitespace)
contents <- try $ untokenize <$> pDollarsMath 0
+ let isWs c = c == ' ' || c == '\t' || c == '\r' || c == '\n'
if display
then displayMath contents <$ symbol '$'
- else if T.all (==' ') (T.takeEnd 1 contents)
+ else if T.null contents || isWs (T.last contents)
-- don't allow math to end with SPACE + $
then mzero
else return $ inlineMath contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/commonmark-extensions-0.2.3.5/src/Commonmark/Extensions/PipeTable.hs
new/commonmark-extensions-0.2.3.6/src/Commonmark/Extensions/PipeTable.hs
--- old/commonmark-extensions-0.2.3.5/src/Commonmark/Extensions/PipeTable.hs
2001-09-09 03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.3.6/src/Commonmark/Extensions/PipeTable.hs
2001-09-09 03:46:40.000000000 +0200
@@ -12,7 +12,8 @@
)
where
-import Control.Monad (guard)
+import Control.Monad (guard, void, mzero)
+import Control.Monad.Trans.Class (lift)
import Commonmark.Syntax
import Commonmark.Types
import Commonmark.Tokens
@@ -137,30 +138,55 @@
{ syntaxBlockSpecs = [pipeTableBlockSpec]
}
+-- This parser is structured as a system that parses the *second* line first,
+-- then parses the first line. That is, if it detects a delimiter row as the
+-- second line of a paragraph, it converts the paragraph into a table. This
seems
+-- counterintuitive, but it works better than trying to convert a table into
+-- a paragraph, since it might need to be something else.
+--
+-- See GH-52 and GH-95
pipeTableBlockSpec :: (Monad m, IsBlock il bl, IsInline il,
HasPipeTable il bl)
=> BlockSpec m il bl
pipeTableBlockSpec = BlockSpec
{ blockType = "PipeTable" -- :: Text
, blockStart = try $ do -- :: BlockParser m il bl ()
- interruptsParagraph >>= guard . not
- nonindentSpaces
- notFollowedBy whitespace
- pos <- getPosition
- (cells, toks) <- withRaw pCells
- nl <- lookAhead lineEnd
- let tabledata = PipeTableData
- { pipeTableAlignments = []
- , pipeTableHeaders = cells
- , pipeTableRows = []
- }
- addNodeToStack $
- Node (defBlockData pipeTableBlockSpec){
- blockStartPos = [pos]
- , blockData = toDyn tabledata
- , blockLines = [toks ++ [nl]]
- } []
- return BlockStartMatch
+ (cur:rest) <- nodeStack <$> getState
+ guard $ blockParagraph (bspec cur)
+ nonindentSpaces
+ pos <- getPosition
+ aligns <- pDividers
+ skipWhile (hasType Spaces)
+ lookAhead (eof <|> void lineEnd)
+
+ st <- getState
+
+ let headerLine =
+ case blockLines $ rootLabel cur of
+ [onlyLine] -> onlyLine
+ _ -> []
+
+ cellsR <- lift $ runParserT pCells st "" headerLine
+ case cellsR of
+ Right cells ->
+ if length cells /= length aligns
+ then mzero -- parse fail: not a table
+ else do
+ updateState $ \st' -> st'{ nodeStack = rest }
+ let tabledata = PipeTableData
+ { pipeTableAlignments = aligns
+ , pipeTableHeaders = cells
+ , pipeTableRows = []
+ }
+ addNodeToStack $
+ Node (defBlockData pipeTableBlockSpec){
+ blockStartPos = blockStartPos (rootLabel
cur) ++ [pos]
+ , blockData = toDyn tabledata
+ , blockAttributes = blockAttributes
(rootLabel cur)
+ } []
+ _ ->
+ mzero -- parse fail: not a table
+ return BlockStartMatch
, blockCanContain = \_ -> False -- :: BlockSpec m il bl -> Bool
, blockContainsLines = False -- :: Bool
, blockParagraph = False -- :: Bool
@@ -173,26 +199,11 @@
, pipeTableHeaders = []
, pipeTableRows = [] }
pos <- getPosition
- if null (blockLines ndata)
- then do
- cells <- pCells
- let tabledata' = tabledata{ pipeTableRows =
- cells : pipeTableRows tabledata }
- return $! (pos, Node ndata{ blockData =
- toDyn tabledata' } children)
- else
- -- last line was first; check for separators
- -- and if not found, convert to paragraph:
- try (do aligns <- pDividers
- guard $ length aligns ==
- length (pipeTableHeaders tabledata)
- let tabledata' = tabledata{ pipeTableAlignments = aligns }
- return $! (pos, Node ndata{
- blockLines = []
- , blockData = toDyn tabledata'
- } children))
- <|> (return $! (pos, Node ndata{
- blockSpec = paraSpec } children))
+ cells <- pCells
+ let tabledata' = tabledata{ pipeTableRows =
+ cells : pipeTableRows tabledata }
+ return $! (pos, Node ndata{ blockData =
+ toDyn tabledata' } children)
, blockConstructor = \(Node ndata _) -> do
let tabledata = fromDyn
(blockData ndata)
@@ -206,8 +217,5 @@
(reverse $ pipeTableRows tabledata)
return $! (pipeTable aligns headers rows)
, blockFinalize = \(Node ndata children) parent ->
- defaultFinalizer
- (if null (blockLines ndata)
- then Node ndata children
- else Node ndata{ blockSpec = paraSpec } children) parent
+ defaultFinalizer (Node ndata children) parent
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/commonmark-extensions-0.2.3.5/test/math.md
new/commonmark-extensions-0.2.3.6/test/math.md
--- old/commonmark-extensions-0.2.3.5/test/math.md 2001-09-09
03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.3.6/test/math.md 2001-09-09
03:46:40.000000000 +0200
@@ -18,9 +18,13 @@
```````````````````````````````` example
This is not math: 2000$.
And neither is this $ 4 $.
+Or this $4
+$.
.
<p>This is not math: 2000$.
-And neither is this $ 4 $.</p>
+And neither is this $ 4 $.
+Or this $4
+$.</p>
````````````````````````````````
Display math delimiters can be surrounded by whitespace:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/commonmark-extensions-0.2.3.5/test/pipe_tables.md
new/commonmark-extensions-0.2.3.6/test/pipe_tables.md
--- old/commonmark-extensions-0.2.3.5/test/pipe_tables.md 2001-09-09
03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.3.6/test/pipe_tables.md 2001-09-09
03:46:40.000000000 +0200
@@ -264,3 +264,51 @@
</code></pre>
````````````````````````````````
+
+Pipe tables have exactly one header row, and do not interrupt paragraphs.
+
+```````````````````````````````` example
+| Too much table | to be considered table |
+| Too much table | to be considered table |
+|----------------|------------------------|
+| Too much table | to be considered table |
+.
+<p>| Too much table | to be considered table |
+| Too much table | to be considered table |
+|----------------|------------------------|
+| Too much table | to be considered table |</p>
+````````````````````````````````
+
+
+Other block structures, like headers, have higher priority than tables.
+Tables can be nested in other elements, but don't benefit from laziness.
+
+```````````````````````````````` example
+# abc | def
+------|-----
+
+
+> abc | def
+> ----|-----
+
+
+> abc | def
+----|-----
+.
+<h1>abc | def</h1>
+<p>------|-----</p>
+<blockquote>
+<table>
+<thead>
+<tr>
+<th>abc</th>
+<th>def</th>
+</tr>
+</thead>
+</table>
+</blockquote>
+<blockquote>
+<p>abc | def
+----|-----</p>
+</blockquote>
+````````````````````````````````