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.