diff options
| author | Alina Banerjee <alinab@users.noreply.github.com> | 2019-08-01 16:01:39 -0500 | 
|---|---|---|
| committer | Alec Theriault <alec.theriault@gmail.com> | 2020-03-20 20:24:17 -0400 | 
| commit | dec888641006eb685a642ec489b198c61a5736dc (patch) | |
| tree | d9634c3b0e1f7b656ebb572db003e7fc12590359 | |
| parent | 053c9add568dad4264f4629bff0de9b10d9316e1 (diff) | |
Update parsing to strip whitespace from table cells (#1074)
* Update parsing to strip leading & trailing whitespace from table cells
* Update fixture data to disallow whitespaces at both ends in table cells
* Add test case for whitespaces stripped from both ends of table cells
* Update table reference test data for html tests
| -rw-r--r-- | haddock-library/fixtures/examples/table-cell-strip-whitespaces.input | 5 | ||||
| -rw-r--r-- | haddock-library/fixtures/examples/table-cell-strip-whitespaces.parsed | 29 | ||||
| -rw-r--r-- | haddock-library/fixtures/examples/table-simple.parsed | 28 | ||||
| -rw-r--r-- | haddock-library/fixtures/examples/table1.parsed | 45 | ||||
| -rw-r--r-- | haddock-library/fixtures/examples/table2.parsed | 20 | ||||
| -rw-r--r-- | haddock-library/fixtures/examples/table3.parsed | 22 | ||||
| -rw-r--r-- | haddock-library/fixtures/examples/table4.parsed | 10 | ||||
| -rw-r--r-- | haddock-library/fixtures/examples/table5.parsed | 27 | ||||
| -rw-r--r-- | haddock-library/src/Documentation/Haddock/Parser.hs | 14 | ||||
| -rw-r--r-- | html-test/ref/Table.html | 96 | 
10 files changed, 150 insertions, 146 deletions
diff --git a/haddock-library/fixtures/examples/table-cell-strip-whitespaces.input b/haddock-library/fixtures/examples/table-cell-strip-whitespaces.input new file mode 100644 index 00000000..f5e3756d --- /dev/null +++ b/haddock-library/fixtures/examples/table-cell-strip-whitespaces.input @@ -0,0 +1,5 @@ ++------+--------------+-------------------------------------------------+ +| C1   |     C2       |         C3                                      | ++======+==============+=================================================+ +| row  | 'test'       | 'test table cell with  .. whitepspace '         | ++------+--------------+-------------------------------------------------+ diff --git a/haddock-library/fixtures/examples/table-cell-strip-whitespaces.parsed b/haddock-library/fixtures/examples/table-cell-strip-whitespaces.parsed new file mode 100644 index 00000000..19002369 --- /dev/null +++ b/haddock-library/fixtures/examples/table-cell-strip-whitespaces.parsed @@ -0,0 +1,29 @@ +DocTable +  Table +    {tableBodyRows = [TableRow +                        [TableCell +                           {tableCellColspan = 1, +                            tableCellContents = DocString "row", +                            tableCellRowspan = 1}, +                         TableCell +                           {tableCellColspan = 1, +                            tableCellContents = DocIdentifier "test", +                            tableCellRowspan = 1}, +                         TableCell +                           {tableCellColspan = 1, +                            tableCellContents = DocString +                                                  "'test table cell with  .. whitepspace '", +                            tableCellRowspan = 1}]], +     tableHeaderRows = [TableRow +                          [TableCell +                             {tableCellColspan = 1, +                              tableCellContents = DocString "C1", +                              tableCellRowspan = 1}, +                           TableCell +                             {tableCellColspan = 1, +                              tableCellContents = DocString "C2", +                              tableCellRowspan = 1}, +                           TableCell +                             {tableCellColspan = 1, +                              tableCellContents = DocString "C3", +                              tableCellRowspan = 1}]]} diff --git a/haddock-library/fixtures/examples/table-simple.parsed b/haddock-library/fixtures/examples/table-simple.parsed index b5e62453..d027c75d 100644 --- a/haddock-library/fixtures/examples/table-simple.parsed +++ b/haddock-library/fixtures/examples/table-simple.parsed @@ -3,50 +3,40 @@ DocTable      {tableBodyRows = [TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " 200  ", +                            tableCellContents = DocString "200",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocAppend -                                                  (DocString "   ") -                                                  (DocAppend -                                                     (DocMonospaced (DocString "OK")) -                                                     (DocString "       ")), +                            tableCellContents = DocMonospaced (DocString "OK"),                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString -                                                  " operation successful                     ", +                            tableCellContents = DocString "operation successful",                              tableCellRowspan = 1}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " 204  ", +                            tableCellContents = DocString "204",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocAppend -                                                  (DocString " ") -                                                  (DocAppend -                                                     (DocMonospaced (DocString "No Content")) -                                                     (DocString " ")), +                            tableCellContents = DocMonospaced (DocString "No Content"),                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1,                              tableCellContents = DocString -                                                  " operation successful, no body returned   ", +                                                  "operation successful, no body returned",                              tableCellRowspan = 1}]],       tableHeaderRows = [TableRow                            [TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString " code ", +                              tableCellContents = DocString "code",                                tableCellRowspan = 1},                             TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString " message      ", +                              tableCellContents = DocString "message",                                tableCellRowspan = 1},                             TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString -                                                    " description                              ", +                              tableCellContents = DocString "description",                                tableCellRowspan = 1}]]} diff --git a/haddock-library/fixtures/examples/table1.parsed b/haddock-library/fixtures/examples/table1.parsed index 2fa58fd8..8b8908f4 100644 --- a/haddock-library/fixtures/examples/table1.parsed +++ b/haddock-library/fixtures/examples/table1.parsed @@ -3,79 +3,66 @@ DocTable      {tableBodyRows = [TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " body row 1, column 1   ", +                            tableCellContents = DocString "body row 1, column 1",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 2   ", +                            tableCellContents = DocString "column 2",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 3 ", +                            tableCellContents = DocString "column 3",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 4 ", +                            tableCellContents = DocString "column 4",                              tableCellRowspan = 1}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " body row 2             ", +                            tableCellContents = DocString "body row 2",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 3, -                            tableCellContents = DocString " Cells may span columns.          ", +                            tableCellContents = DocString "Cells may span columns.",                              tableCellRowspan = 1}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " body row 3             ", +                            tableCellContents = DocString "body row 3",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1,                              tableCellContents = DocString -                                                  (concat -                                                     [" Cells may  \n", -                                                      " span rows. \n", -                                                      "            "]), +                                                  (concat ["Cells may\n", "span rows.\n"]),                              tableCellRowspan = 2},                           TableCell                             {tableCellColspan = 2, -                            tableCellContents = DocAppend -                                                  (DocString " ") -                                                  (DocAppend -                                                     (DocMathDisplay -                                                        (concat -                                                           ["                  \n", -                                                            " f(n) = \\sum_{i=1}   \n", -                                                            " "])) -                                                     (DocString "                  ")), +                            tableCellContents = DocMathDisplay +                                                  (concat ["\n", "f(n) = \\sum_{i=1}\n"]),                              tableCellRowspan = 2}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " body row 4             ", +                            tableCellContents = DocString "body row 4",                              tableCellRowspan = 1}]],       tableHeaderRows = [TableRow                            [TableCell                               {tableCellColspan = 1,                                tableCellContents = DocString                                                      (concat -                                                       [" Header row, column 1   \n", -                                                        " (header rows optional) "]), +                                                       ["Header row, column 1\n", +                                                        "(header rows optional)"]),                                tableCellRowspan = 1},                             TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString -                                                    (concat [" Header 2   \n", "            "]), +                              tableCellContents = DocString "Header 2\n",                                tableCellRowspan = 1},                             TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString -                                                    (concat [" Header 3 \n", "          "]), +                              tableCellContents = DocString "Header 3\n",                                tableCellRowspan = 1},                             TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString -                                                    (concat [" Header 4 \n", "          "]), +                              tableCellContents = DocString "Header 4\n",                                tableCellRowspan = 1}]]} diff --git a/haddock-library/fixtures/examples/table2.parsed b/haddock-library/fixtures/examples/table2.parsed index e3dbf0b4..44cc813b 100644 --- a/haddock-library/fixtures/examples/table2.parsed +++ b/haddock-library/fixtures/examples/table2.parsed @@ -3,44 +3,44 @@ DocTable      {tableBodyRows = [TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " row 1, col 1 ", +                            tableCellContents = DocString "row 1, col 1",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 2 ", +                            tableCellContents = DocString "column 2",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 3  ", +                            tableCellContents = DocString "column 3",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 4  ", +                            tableCellContents = DocString "column 4",                              tableCellRowspan = 1}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " row 2        ", +                            tableCellContents = DocString "row 2",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 3, -                            tableCellContents = DocString "                                  ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " row 3        ", +                            tableCellContents = DocString "row 3",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "          ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "           ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "           ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1}]],       tableHeaderRows = []} diff --git a/haddock-library/fixtures/examples/table3.parsed b/haddock-library/fixtures/examples/table3.parsed index cabff9cb..c978b50f 100644 --- a/haddock-library/fixtures/examples/table3.parsed +++ b/haddock-library/fixtures/examples/table3.parsed @@ -3,48 +3,48 @@ DocTable      {tableBodyRows = [TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " row 1, col 1 ", +                            tableCellContents = DocString "row 1, col 1",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 2 ", +                            tableCellContents = DocString "column 2",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 3  ", +                            tableCellContents = DocString "column 3",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " column 4  ", +                            tableCellContents = DocString "column 4",                              tableCellRowspan = 1}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " row 2        ", +                            tableCellContents = DocString "row 2",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 2, -                            tableCellContents = DocString " Use the command ``ls ", +                            tableCellContents = DocString "Use the command ``ls",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " more``.   ", +                            tableCellContents = DocString "more``.",                              tableCellRowspan = 1}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString " row 3        ", +                            tableCellContents = DocString "row 3",                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "          ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "           ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "           ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1}]],       tableHeaderRows = []} diff --git a/haddock-library/fixtures/examples/table4.parsed b/haddock-library/fixtures/examples/table4.parsed index cfdd6f0f..c4dabb0d 100644 --- a/haddock-library/fixtures/examples/table4.parsed +++ b/haddock-library/fixtures/examples/table4.parsed @@ -8,10 +8,10 @@ DocAppend                                   {tableCellColspan = 1,                                    tableCellContents = DocString                                                          (concat -                                                           ["   outer     \n", -                                                            "             \n", -                                                            "-------+     \n", -                                                            " inner |     "]), +                                                           ["outer\n", +                                                            "\n", +                                                            "-------+\n", +                                                            "inner |"]),                                    tableCellRowspan = 1}]],             tableHeaderRows = []})       (DocAppend @@ -21,6 +21,6 @@ DocAppend               {tableBodyRows = [TableRow                                   [TableCell                                      {tableCellColspan = 1, -                                     tableCellContents = DocString " inner ", +                                     tableCellContents = DocString "inner",                                       tableCellRowspan = 1}]],                tableHeaderRows = []}))) diff --git a/haddock-library/fixtures/examples/table5.parsed b/haddock-library/fixtures/examples/table5.parsed index 9a547ad3..f9a387bb 100644 --- a/haddock-library/fixtures/examples/table5.parsed +++ b/haddock-library/fixtures/examples/table5.parsed @@ -4,50 +4,43 @@ DocTable                          [TableCell                             {tableCellColspan = 1,                              tableCellContents = DocString -                                                  (concat -                                                     [" row 2        \n", -                                                      "              \n", -                                                      "              \n", -                                                      " row 3        "]), +                                                  (concat ["row 2\n", "\n", "\n", "row 3"]),                              tableCellRowspan = 2},                           TableCell                             {tableCellColspan = 3,                              tableCellContents = DocAppend -                                                  (DocString " Use the command  ") +                                                  (DocString "Use the command  ")                                                    (DocAppend                                                       (DocMonospaced (DocString "ls | more")) -                                                     (DocString -                                                        (concat -                                                           [".    \n", -                                                            "                                  "]))), +                                                     (DocString ".\n")),                              tableCellRowspan = 1}],                        TableRow                          [TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "          ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "           ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1},                           TableCell                             {tableCellColspan = 1, -                            tableCellContents = DocString "           ", +                            tableCellContents = DocEmpty,                              tableCellRowspan = 1}]],       tableHeaderRows = [TableRow                            [TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString " row 1, col 1 ", +                              tableCellContents = DocString "row 1, col 1",                                tableCellRowspan = 1},                             TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString " column 2 ", +                              tableCellContents = DocString "column 2",                                tableCellRowspan = 1},                             TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString " column 3  ", +                              tableCellContents = DocString "column 3",                                tableCellRowspan = 1},                             TableCell                               {tableCellColspan = 1, -                              tableCellContents = DocString " column 4  ", +                              tableCellContents = DocString "column 4",                                tableCellRowspan = 1}]]} diff --git a/haddock-library/src/Documentation/Haddock/Parser.hs b/haddock-library/src/Documentation/Haddock/Parser.hs index 028422a7..17240792 100644 --- a/haddock-library/src/Documentation/Haddock/Parser.hs +++ b/haddock-library/src/Documentation/Haddock/Parser.hs @@ -267,7 +267,7 @@ picture = DocPic . makeLabeled Picture  -- >>> parseString "\\(\\int_{-\\infty}^{\\infty} e^{-x^2/2} = \\sqrt{2\\pi}\\)"  -- DocMathInline "\\int_{-\\infty}^{\\infty} e^{-x^2/2} = \\sqrt{2\\pi}"  mathInline :: Parser (DocH mod a) -mathInline = DocMathInline . T.unpack  +mathInline = DocMathInline . T.unpack               <$> disallowNewline  ("\\(" *> takeUntil "\\)")  -- | Display math parser, surrounded by \\[ and \\]. @@ -492,7 +492,7 @@ tableStepFour rs hdrIndex cells =  case hdrIndex of      -- extract cell contents given boundaries      extract :: Int -> Int -> Int -> Int -> Text      extract x y x2 y2 = T.intercalate "\n" -        [ T.take (x2 - x + 1) $ T.drop x $ rs !! y' +        [ T.stripEnd $ T.stripStart $ T.take (x2 - x + 1) $ T.drop x $ rs !! y'          | y' <- [y .. y2]          ] @@ -579,7 +579,7 @@ definitionList indent = DocDefList <$> p          Right i -> (label, contents) : i  -- | Drops all trailing newlines. -dropNLs :: Text -> Text  +dropNLs :: Text -> Text  dropNLs = T.dropWhileEnd (== '\n')  -- | Main worker for 'innerList' and 'definitionList'. @@ -653,7 +653,7 @@ takeNonEmptyLine = do  --  -- More precisely: skips all whitespace-only lines and returns indentation  -- (horizontal space, might be empty) of that non-empty line. -takeIndent :: Parser Text  +takeIndent :: Parser Text  takeIndent = do    indent <- takeHorizontalSpace    choice' [ "\n" *> takeIndent @@ -711,14 +711,14 @@ examples = DocExamples <$> (many (try (skipHorizontalSpace *> "\n")) *> go)          substituteBlankLine "<BLANKLINE>" = ""          substituteBlankLine xs = xs -nonEmptyLine :: Parser Text  +nonEmptyLine :: Parser Text  nonEmptyLine = try (mfilter (T.any (not . isSpace)) takeLine)  takeLine :: Parser Text  takeLine = try (takeWhile (/= '\n') <* endOfLine)  endOfLine :: Parser () -endOfLine = void "\n" <|> Parsec.eof  +endOfLine = void "\n" <|> Parsec.eof  -- | Property parser.  -- @@ -800,7 +800,7 @@ autoUrl :: Parser (DocH mod a)  autoUrl = mkLink <$> url    where      url = mappend <$> choice' [ "http://", "https://", "ftp://"] <*> takeWhile1 (not . isSpace) -     +      mkLink :: Text -> DocH mod a      mkLink s = case T.unsnoc s of        Just (xs,x) | x `elem` (",.!?" :: String) -> DocHyperlink (mkHyperlink xs) `docAppend` DocString [x] diff --git a/html-test/ref/Table.html b/html-test/ref/Table.html index 8a299018..26b0254d 100644 --- a/html-test/ref/Table.html +++ b/html-test/ref/Table.html @@ -87,33 +87,33 @@  	    ><thead  	      ><tr  		><th -		  > code </th +		  >code</th  		  ><th -		  > message      </th +		  >message</th  		  ><th -		  > description                              </th +		  >description</th  		  ></tr  		></thead  	      ><tbody  	      ><tr  		><td -		  > 200  </td +		  >200</td  		  ><td -		  >   <code +		  ><code  		    >OK</code -		    >       </td +		    ></td  		  ><td -		  > operation successful                     </td +		  >operation successful</td  		  ></tr  		><tr  		><td -		  > 204  </td +		  >204</td  		  ><td -		  > <code +		  ><code  		    >No Content</code -		    > </td +		    ></td  		  ><td -		  > operation successful, no body returned   </td +		  >operation successful, no body returned</td  		  ></tr  		></tbody  	      ></table @@ -133,33 +133,33 @@  	    ><tbody  	      ><tr  		><td -		  > 200  </td +		  >200</td  		  ><td -		  >   <code +		  ><code  		    >OK</code -		    >       </td +		    ></td  		  ><td -		  > operation successful                     </td +		  >operation successful</td  		  ></tr  		><tr  		><td -		  > 204  </td +		  >204</td  		  ><td -		  > <code +		  ><code  		    >No Content</code -		    > </td +		    ></td  		  ><td -		  > operation successful, no body returned   </td +		  >operation successful, no body returned</td  		  ></tr  		><tr  		><td -		  > 404  </td +		  >404</td  		  ><td -		  > <code +		  ><code  		    >Not Found</code -		    >  </td +		    ></td  		  ><td -		  > resource not found                       </td +		  >resource not found</td  		  ></tr  		></tbody  	      ></table @@ -179,57 +179,57 @@  	    ><thead  	      ><tr  		><th -		  > Header row, column 1    - (header rows optional) </th +		  >Header row, column 1 +(header rows optional)</th  		  ><th -		  > Header 2    -            </th +		  >Header 2 +</th  		  ><th -		  > Header 3  -          </th +		  >Header 3 +</th  		  ><th -		  > Header 4  -          </th +		  >Header 4 +</th  		  ></tr  		></thead  	      ><tbody  	      ><tr  		><td -		  > body row 1, column 1   </td +		  >body row 1, column 1</td  		  ><td -		  > column 2   </td +		  >column 2</td  		  ><td -		  > column 3 </td +		  >column 3</td  		  ><td -		  > column 4 </td +		  >column 4</td  		  ></tr  		><tr  		><td -		  > <code +		  ><code  		    ><a href="#" title="Table"  		      >tableWithHeader</a  		      ></code -		    >      </td +		    ></td  		  ><td colspan="3" -		  > Cells may span columns.          </td +		  >Cells may span columns.</td  		  ></tr  		><tr  		><td -		  > body row 3             </td +		  >body row 3</td  		  ><td rowspan="2" -		  > Cells may   - span rows.  -            </td +		  >Cells may +span rows. +</td  		  ><td colspan="2" rowspan="2" -		  > <span class="mathjax" -		    >\[                   - f(n) = \sum_{i=1}    - \]</span -		    >                  </td +		  ><span class="mathjax" +		    >\[ +f(n) = \sum_{i=1} +\]</span +		    ></td  		  ></tr  		><tr  		><td -		  > body row 4             </td +		  >body row 4</td  		  ></tr  		></tbody  	      ></table  | 
