Commit Graph
806 Commits
Author SHA1 Message Date
massifrg fe3684632b New xml format exactly representing a Pandoc AST.
This adds a reader and writer for an XML format equivalent to `native`
and `json`.

XML schemas for validation can be found in `tools/pandoc-xml.*`.

The format is documented in `doc/xml.md`.

API changes:

- Add module Text.Pandoc.Readers.XML, exporting `readXML`.
- Add module Text.Pandoc.Writers.XML, exporting `writeXML`.

A new unexported module Text.Pandoc.XMLFormat is also added.
2025-07-26 22:45:11 -07:00
Ryan Gibb b84fa66fcb Org reader: Recognize "fast access" characters in TODO state definitions (#10990) 2025-07-24 22:40:08 +02:00
John MacFarlane add83e8169 Markdown reader: make definition lists behave like other lists.
If the `four_space_rule` extension is not enabled,
figure out the indentation needed for child blocks dynamically,
by looking at the first nonspace content after the `:` marker.

Previously the four-space rule was always obeyed.

Remove the old `compact_definition_lists` extension. This was
neded to preserve backwards compatibility after pandoc 1.12
was released, but at this point we can get rid of it.

T.P.Extensions: remove `Ext_compact_definition_lists` constructor
for `Extension` [API change].

Fix tight/loose detection for definition lists, to conform to
the documentation.

Closes #10889.
2025-06-02 23:29:47 -07:00
John MacFarlane 75db10f315 Fix whitespace bugs. 2025-05-28 15:20:55 -07:00
Greg c27ceac5cf Adding support for sidebars to Asciidoc writer 2025-05-28 13:38:16 -07:00
John MacFarlane 28e01fac74 LaTeX writer: include alt option in \includegraphics.
Closes #6095.
2025-05-26 20:29:20 -07:00
John MacFarlane ca321e1b75 Fix problems with gridTable and add tests.
Closes #10848.
2025-05-16 18:10:06 -07:00
John MacFarlane ddcc4e0c65 Remove some redundant code in test. 2025-05-11 18:17:21 -07:00
John MacFarlane bfcff3eb99 Org reader: change handling of inline TeX.
Previously inline TeX was handled in a way that was different
from org's own export, and that could lead to information loss.
This was particularly noticeable for inline math environments
such as `equation`.  Previously, an `equation` environment
starting at the beginning of a line would create a raw block,
splitting up the paragraph containing it (see #10836).
On the other hand, an `equation` environment not at the beginning
of a line would be turned into regular inline elements
representing the math. (This would cause the equation number to
go missing and in some cases degrade the math formatting.)

Now, we parse all of these as raw "latex" inlines, which will be
omitted when converting to formats other than LaTeX (and other
formats like pandoc's Markdown that allow raw LaTex).

Closes #10836.
2025-05-11 17:38:18 -07:00
John MacFarlane 3a3fc66726 Use pdf-engine variable instead of extensions...
...to determine what to do about `.pdfhref` macros in `ms`
output.

When no PDF engine is specified, we don't use the `.pdfhref`
macros at all. This gives better results for links in formats
other than PDF, since the link text would simply disappear if
it exists only in a `.pdfhref` macro.

When a PDF engine is specified,  escape the argument of
`.pdfhref O` in a way that is appropriate.

Remove `groff` extension.

Text.Pandoc.Extensions: remove `Ext_groff` constructor.

See #10738.  This revises the earlier commit
3adcb4bd80.
2025-03-29 22:42:22 -07:00
John MacFarlane f717d1bccc Markdown writer: avoid spaces after/before open/close delimiters.
E.g. instead of rendering `x<em> space </em>y` as `x* space *y`
we render it as `x *space* y`.

Closes #10696.
2025-03-17 09:56:49 -07:00
John MacFarlane 28eca1e41e Markdown reader: remove some misguided list fanciness.
Previously we tried to handle things like commented out list
items:

    - one
    <!--
    - two
    -->
    - three

and also things like:

    - one `and
    - two` and

But the code we added to handle these cases caused problems with
other, more straightforward things, like:

    - one
    - ```
      code
      ```
    - three

So we are rolling back all the fanciness, so that the markdown
parser now behaves more like the commonmark parser, in which
indicators of block-level structure always take priority over
indicators of inline structure.

Closes #9865. Closes #7778. See also #5628.
2025-03-14 15:07:16 -07:00
John MacFarlane 0fe6254535 Markdown writer: omit extra space after bullets.
We used to insert extra spaces to ensure that the content respected
the four-space rule.  That is not really necessary now, since pandoc's
markdown and most markdowns don't follow the four-space rule.

Those who want the old behavior can obtain it by using
`-t markdown+four_space_rule`.

Closes #7172.
2025-02-12 09:41:20 -08:00
Evan Silberman 97b36ecb77 Track wikilinks with a class instead of a title
Once upon a time the only metadata element for links in Pandoc's AST was
a title, and it was hijacked to track certain links as having originated
in the wikilink syntax. Now we have Attrs and we can use a class to
handle wikilinks instead.

Requires coordinated changes to commonmark-hs.
2025-02-07 14:04:12 -08:00
Stephen ReindlandStephen Reindl 3c8ca600ef DOCX reader: do not issue warning for comments with +styles (#10572)
Closes #10571.

Co-authored-by: Stephen Reindl <stephen.reindl@outlook.de>
2025-01-30 15:23:53 -08:00
Max Heller b95645b0a0 Prefer MIME type when determining extensions for MediaBag items (#10557)
Currently, remote images added to the MediaBag are stored at paths with
extensions determined based on the external URI. For instance, an image
from https://example.com/image.png is stored as <hash>.png. If the
URI does not contain an extension (e.g., https://example.com/image),
then the content-type of the downloaded image is used to determine the
extension.

This change switches the precedence such that content-type is preferred
over extensions contained in the URI. This is necessary because some
images are located at URIs with misleading extensions -- shields.io,
for instance, serves SVGs from URIs with .yml extensions. With this
change, the image/svg+xml content-type is now preferred over the .yml
URI extension. This fixes a bug in the PDF writer in which such an image
would be mishandled due to not being identified as an SVG.
2025-01-21 17:54:47 -08:00
John MacFarlane 01b54593cc AsciiDoc writer: improve escaping.
Closes #10385.
Closes #2337.
Closes #6424.
2024-12-28 19:43:23 -08:00
Evan Silberman c4716d41c5 Add Pod reader
Pod ("Plain old documentation") is a markup languaged used principally
to document Perl modules and programs. Since it was originally meant to
be translated pretty directly to man, the semantics are fairly simple.

This Pod reader was developed with reference to the canonical user and
implementer documentation of Pod: https://perldoc.perl.org/perlpod and
https://perldoc.perl.org/perlpodspec.

There are 1490 .pod, .pl, and .pm in the Perl 5.34 distribution found in
/System/Library/Perl on my mac. Of those, this reader dies with a parse
error on 7 of them. All of them seem to be cases where pod commands are
found within a non-colon-prefixed =begin/=end. perlpodspec says I may
treat this as an error.

[API change] adds readPod
2024-12-27 11:10:48 -08:00
Evan Silberman 13b3453009 Add mdoc reader
This change introduces a reader for mdoc, a roff-derived semantic markup
language for manual pages. The two relevant contemporary implementations
of mdoc for manual pages are mandoc (https://mandoc.bsd.lv/), which
implements the language from scratch in C, and groff
(https://www.gnu.org/software/groff/), which implements it as roff macros.

mdoc has a lot of semantics specific to technical manuals that aren't
representable in Pandoc's AST. I've taken a cue from the mandoc HTML
output and many mdoc elements are encoded as Codes or Spans with classes
named for the mdoc macro that produced them.

Much like web browsers with HTML, mandoc attempts to produce best-effort
output given all kinds of weird and crappy mdoc input. Part of the
reason it's able to do this is it uses a very accommodating parse tree
and stateful output routines specialized to the output mode, and when it
encounters some macro it wasn't expecting, it can easily give up on
whatever it was outputting and output something else. I've encoded as
much flexibility as I reasonably could into the mdoc reader here, but I
don't know how to be as flexible as mandoc.

This branch has been developed almost exclusively against mandoc's
documentation and implementation of mdoc as a reference, and the
real-world manual pages tested against are those from the OpenBSD base
system. Of ~3500 manuals in mdoc format shipped with a fresh OpenBSD
install, 17 cause the mdoc reader to exit with a parse error. Any
further chasing of edge cases is deferred to future work.

Many of the tests in test/Tests/Readers/Mdoc.hs are derived directly
from mandoc's extensive regression tests.

[API change] Adds readMdoc to the public API
2024-12-05 22:57:18 -08:00
John MacFarlane 812b264a92 RST reader: avoid putting metadata in Para.
Create MetaInlines when possible, just as with markdown input.
MetaBlocks is still used when there are multiple paragraphs or
non-paragraph content.

This change also affects field lists.

Closes #7766.
2024-10-15 23:16:11 -07:00
John MacFarlane 4f15b03ad2 RST writer: change bullet list hang from 3 to 2.
This accords with the style in the reference docs.
2024-10-01 09:19:53 -07:00
John MacFarlane 7e6a3b063e DokuWiki reader: fix block quote behavior.
Closes #6461.

Blockquotes are not really block containers in DokuWiki;
the lines are interpreted literally (so, e.g., you can't
start a list), and line breaks are added at the ends.
2024-09-21 18:33:28 -07:00
John MacFarlane 4a42a7d4a9 Tests.Readers.Markdown: avoid use of 'head'. 2024-09-09 09:15:54 -07:00
John MacFarlane 90e8725f5b Tests: use 'drop 1' instead of partial function 'tail'. 2024-09-09 09:03:17 -07:00
John MacFarlane 0a362141cf Avoid use of 'head' in Tests.Shared. 2024-09-09 08:28:19 -07:00
John MacFarlane 9953f1d256 Add ansi writer tests. 2024-09-03 13:35:01 -07:00
John MacFarlane 6808788b21 HTML reader: only parse main element's contents (if present).
If main has an id or class, we include a div with that id or class;
otherwise just the contents.

Closes #10140.
2024-09-03 10:40:08 -07:00
John MacFarlane 6c43c03398 Docx writer: fix regression with nested lists.
Closes #9994.  The bug affects e.g. ordered lists with bullet
sublists; after the sublist the top-level list reverts to bullets
instead of being properly numbered.

This regression was introduced in version 3.2.1 and was caused by
commit f5531f1.
2024-07-27 21:01:00 -07:00
Albert Krewinkel 73ce302479 Harmonize maintainer email addresses in module headers. 2024-07-08 13:27:45 +02:00
John MacFarlane 26b25a4428 LaTeX writer: new method for ensuring images don't overflow.
Previously we relied on graphicx internals and made global
changes to Gin to force images to be resized if they exceed
textwidth.  This approach is brittle and caused problems
with `\includesvg` (see #9660).

The new approach uses a new macro `\pandocbounded` that is
now defined in the LaTeX template. (Thanks here to Falk Hanisch in
https://github.com/mrpiggi/svg/issues/60.)

The LaTeX writer has been changed to enclose `\includegraphics`
and `\includesvg` commands in this macro when they don't explicitly
specify a width or height.

In addition, the writer now adds `keepaspectratio` to the
`\includegraphics` or `\includesvg` options if `height` is specified
without width, or vice versa. Previously, this was set in the preamble
as a global option.

Compatibility issues:

- If custom templates are used with the new LaTeX writer, they will have
  to be updated to include the new `\pandocbounded` macro, or an error
  will be raised because of the undefined macro.

- Documents that specify explicit dimensions for an image may render
  differently, if the dimensions are greater than the line width or
  page height. Previously pandoc would shrink these images to fit,
  but the new behavior takes the specified dimensions literally.
  In addition, pandoc previously always enforced `keepaspectratio`,
  even when width and height were both specified, so images with
  width and height specified that do not conform to their intrinsic
  aspect ratio will appear differently.

Closes #9660.
2024-06-23 16:12:37 -07:00
John MacFarlane 3952d4d1a2 Docx reader: support task lists.
This also fixes a small bug in parsing delimiters in numbered lists,
which led to the default delimiter being used wrongly in some cases.

Closes #8211.
2024-06-04 15:17:43 -07:00
John MacFarlane f5531f18a5 Docx writer: better formatting for task lists.
Task lists are now properly formatted, with no bullet.

In addition, we have removed an expensive generic traverse to
remove Space elements, and replaced it with code in
`inlinesToOpenXML`.  This should give better performance; it
also reduces XML size in the metadata, which wasn't previously
affected by the de-Spacing.

TODO: parse this in the reader so that we can have task lists round-trip.

Closes #5198.
2024-06-04 10:03:26 -07:00
John MacFarlane 03630a2c6e Update copyright dates to 2024. 2024-04-25 18:16:49 -07:00
John MacFarlane f5c7d4dcf7 Markdown writer: don't use raw_attribute syntax for raw...
blocks, unless there is no other option.

Mainly this is motivated by #9677.  If we put raw tex in a
raw_attribute block, then the macros don't get interpreted
when it is read again by pandoc's markdown reader.
2024-04-23 15:45:55 -07:00
mbracke a331a1c00a Docx reader: fix anchor in header after anchor (#9626)
When the last parPart before a header was a bookmark, no span with an
anchor was added for a bookmark in the header. But the function that
adds header anchors to the anchor map, needs a span with an anchor.
So this commit adds that span.
2024-04-18 09:32:48 -07:00
John MacFarlane 96add8b9cc Command tests: include regular PATH...
...after directory with the test executable.
I want to see if this fixes the CI problem on Windows, which
may be due to problems finding a DLL.
2024-04-15 10:19:41 -07:00
John MacFarlane a0c1bdeb8b Markdown reader: auto-close unclosed divs.
This applies to both fenced and HTML-ish varieties.
Otherwise we face an exponential performance problem with
backtracking.

This also accords with the behavior of the `fenced_divs`
extension in commonmark.

A warning is issued when a div is implicitly closed.

Closes #9635.
2024-04-10 17:18:05 -07:00
John MacFarlane 604f541b0f Typst writer: support Typst 0.11 table features. (#9593)
* Typst writer: support Typst 0.11 table features.

- colspans
- rowspans
- cell alignment overrides
- relative column widths
- header and footer
- multiple table bodies with intermediate headers

Row heads are not yet supported.

The default typst template has been modified so that tables
don't have lines by default. As is standard with pandoc, we only
add a line under a header or over a footer. However, a different
default stroke pattern can easily be added in a template.

Closes #9588.
2024-03-20 14:25:08 -07:00
John MacFarlane 27ee5a7696 Change lhs tests so they don't use --standalone.
This will avoid test failures due to minor changes in
skylighting versions, e.g. #9589.
2024-03-19 07:58:42 -07:00
John MacFarlane 8c42926cb2 Add djot reader and writer.
Djot is a light markup syntax (https://djot.net).

This patch adds djot as input and output formats.

API changes:

Add Text.Pandoc.Readers.Djot
Add Text.Pandoc.Writers.Djot
2024-02-13 23:10:42 -08:00
John MacFarlane a5b691a77e Markdown reader: fix wikilinks extension to allow newlines in titles.
Closes #9454.
2024-02-13 22:20:03 -08:00
John MacFarlane caa73134bc Regenerate epub tests with latest changes to EPUB reader. 2024-01-27 10:34:00 -08:00
George Stagg 032f7c832f Add readMan to Text.Pandoc.Readers exports 2024-01-16 11:24:13 -08:00
Edwin Török 2477fb50ff test(docx): also compare number of children
This detects if a tag gets added/removed, or moves within the hierarchy.

Signed-off-by: Edwin Török <edwin@etorok.net>
2023-12-18 14:08:53 -08:00
Hikaru Ibayashi 3be253fb90 LaTeX writer: fix bug with big footnotes inside emphasis (#9168)
Closes #8982.
2023-12-10 09:29:45 -08:00
Stephan Meijer 2e8ecb3fba Docx reader: unwrap content of shaped textboxes...
* #9214 text in shape format test document

* #9214 support Text in Shape Format

* #9214 remove irrelevant code
2023-11-29 18:59:09 -08:00
Stephan Meijer 56f7f11473 ODT reader: Support attr text:continue-numbering (#8998)
Closes #8979.
2023-11-06 19:15:37 -08:00
John MacFarlane fbf9194e34 DokuWiki reader: parse <code> and <file> as block-level code.
Previously we treated them as inline code in some contexts,
but that is not how DokuWiki works.

Closes #9154.
2023-10-22 10:59:07 -07:00
Julia Diaz fa3513b104 JATS reader: fix handling of alt-text (#9134)
Previously we were looking for an attribute that doesn't exist in
JATS; alt-text is provided by a child element.

Closes #9130.
2023-10-17 09:16:00 -07:00
Amneesh Singh e4467ba10c Org reader: allow escaping commas in macro arguments
Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
2023-08-26 17:16:34 -07:00