Revision history for Text-AsciidocDown
v0.1.2 2026-09-08
- Fix: paired curly quotes ("`text`" and '`text`') no longer share one
"quotes" attribute or default to raw "" HTML.
* Verified against downdoc's actual source (lib/index.js) and test
suite that downdoc's own default IS "
" applied identically
to both forms via one shared attribute -- this is real, tested
downdoc behavior, not an oversight, so it is not a parity bug by
itself. However, that default is not round-trip stable through
Text::MarkdownAdoc: raw "" HTML is unknown to it and gets
progressively re-escaped as "++++++" passthrough on every pass.
* Verified against Text::MarkdownAdoc's source
(lib/Text/MarkdownAdoc/Inline.pm, _convert_smart_quotes) that it
maps U+201C/U+201D and U+2018/U+2019 straight back to "`text`" and
'`text`' respectively.
* Decision (deliberate, documented deviation from downdoc, made after
discussing the trade-off with the maintainer): default output now
uses real curly Unicode characters, and the two forms are
independently configurable via two attributes: `quotes`
(double-quoted, default U+201C/U+201D) and the new `quotes-single`
(single-quoted, default U+2018/U+2019). This distinguishes the two
forms in the output and makes a Markdown -> AsciiDoc -> Markdown
round trip through Text::MarkdownAdoc reach an exact, stable
fixpoint by default -- verified end-to-end with the installed
Text::MarkdownAdoc.
* The old shared "" downdoc-parity behavior remains available
by setting both `quotes` and `quotes-single` explicitly.
* This is a user-visible default change; hence the minor version bump.
- Fix (found while verifying the above against downdoc's actual
QuotedSpanRx): apply_quotes() now requires quoted content to be
bounded by non-whitespace on both sides (a single non-space
character, or non-space...non-space), matching downdoc's own
`\S|\S.*?\S` restriction. Previously, whitespace-padded
(`"` text `"`) or empty (`"``"`) spans were incorrectly treated as
paired quotes; they are now left for
apply_standalone_quote_markers() to resolve marker-by-marker, which
still produces a sensible result.
- Fix: inline AsciiDoc passthrough (`+++...+++`) is now recognized and
preserved verbatim -- no `<` escaping, no quote/format substitution,
no attribute or macro expansion inside it. Previously this content
was silently corrupted (its `<` escaped to `<`) because nothing
recognized the markers before the rest of the substitution pipeline
ran. This is a real correctness bug independent of any round trip
(hand-written passthrough content was corrupted on the very first
conversion), and it also permanently corrupted (not merely
destabilized) a round trip through Text::MarkdownAdoc whenever a
caller used the shared `` downdoc-parity `quotes` setting,
since that tool wraps unrecognized HTML tags as `++++++`
passthrough on the way back to AsciiDoc. Fixed even though downdoc
itself has no equivalent inline construct, since it was blocking
correct round trips in a configuration this module explicitly
supports.
- Updated POD and README.md to document the quotes/quotes-single
attribute grammar and the passthrough fix.
v0.1.1 2026-09-08
- Fix: implement the standalone typographic curly-quote/apostrophe
markers (`', '`, `", "`) so they resolve to their Unicode characters
(U+2019, U+2018, U+201D, U+201C) instead of passing through literally.
This fixes a round-trip regression where Text::MarkdownAdoc's `` `' ``
output was not converted back to a curly apostrophe by
Text::AsciidocDown.
- The fix lives in Subs::apply_inline_formatting(), between the
monospace stash and unstash, so real code-span backticks (e.g.
`` `code`'s ``) are never mistaken for a standalone marker.
v0.1.0 2026-07-02
- Initial public release.
- OO API via Text::AsciidocDown->new and ->convert.
- AsciiDoc-to-Markdown parser with practical block/inline support.
- Include pre-merge support with selector policies.
- CLI utility script/asciidoc-down with prepublish/postpublish workflows.