diff options
| author | John MacFarlane <jgm@berkeley.edu> | 2021-05-20 17:12:00 -0700 | 
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2021-05-20 17:12:38 -0700 | 
| commit | d7b5def287aefe91f881daeecc5f72121c843b66 (patch) | |
| tree | 37c3a7e85b025d2c264808ca3f44a4ad9bbc5693 /src/Text | |
| parent | bb11f5fb86993559f9999d4795355b02ae78cc3d (diff) | |
| download | pandoc-d7b5def287aefe91f881daeecc5f72121c843b66.tar.gz | |
Ms writer: handle tables with multiple paragraphs.
Previously they overflowed the table cell width.
We now set line lengths per-cell and restore them
after the table has been written.
Closes #7288.
Diffstat (limited to 'src/Text')
| -rw-r--r-- | src/Text/Pandoc/Writers/Ms.hs | 28 | 
1 files changed, 22 insertions, 6 deletions
| diff --git a/src/Text/Pandoc/Writers/Ms.hs b/src/Text/Pandoc/Writers/Ms.hs index 0ed7a8a64..97c23f24d 100644 --- a/src/Text/Pandoc/Writers/Ms.hs +++ b/src/Text/Pandoc/Writers/Ms.hs @@ -245,13 +245,17 @@ blockToMs opts (Table _ blkCapt specs thead tbody tfoot) =        aligncode AlignDefault = "l"    in do    caption' <- inlineListToMs' opts caption -  let iwidths = if all (== 0) widths -                   then repeat "" -                   else map (T.pack . printf "w(%0.1fn)" . (70 *)) widths +  let isSimple = all (== 0) widths +  let totalWidth = 70    -- 78n default width - 8n indent = 70n    let coldescriptions = literal $ T.unwords -                        (zipWith (\align width -> aligncode align <> width) -                        alignments iwidths) <> "." +                        (zipWith (\align width -> aligncode align <> +                                    if width == 0 +                                       then "" +                                       else T.pack $ +                                              printf "w(%0.1fn)" +                                              (totalWidth * width)) +                        alignments widths) <> "."    colheadings <- mapM (blockListToMs opts) headers    let makeRow cols = literal "T{" $$                       vcat (intersperse (literal "T}\tT{") cols) $$ @@ -260,13 +264,25 @@ blockToMs opts (Table _ blkCapt specs thead tbody tfoot) =                          then empty                          else makeRow colheadings $$ char '_'    body <- mapM (\row -> do -                         cols <- mapM (blockListToMs opts) row +                         cols <- mapM (\(cell, w) -> +                                   (if isSimple +                                       then id +                                       else (literal (".nr LL " <> +                                              T.pack (printf "%0.1fn" +                                                (w * totalWidth))) $$)) <$> +                                   blockListToMs opts cell) (zip row widths)                           return $ makeRow cols) rows    setFirstPara    return $ literal ".PP" $$ caption' $$             literal ".na" $$ -- we don't want justification in table cells +           (if isSimple +               then "" +               else ".nr LLold \\n[LL]") $$             literal ".TS" $$ literal "delim(@@) tab(\t);" $$ coldescriptions $$             colheadings' $$ vcat body $$ literal ".TE" $$ +           (if isSimple +               then "" +               else ".nr LL \\n[LLold]") $$             literal ".ad"  blockToMs opts (BulletList items) = do | 
