doc/filters: fix myst-reader role detection

matching on only `{...}` does not trigger if the role tag is preceded by
something usually considered a semantic separator that isn't a separator
as markdown knows it, e.g. punctuation characters.

pennae 798b7fdc dfdaa0ce

Changed files
+10 -3
doc
build-aux
pandoc-filters
myst-reader
+10 -3
doc/build-aux/pandoc-filters/myst-reader/roles.lua
···
if correct_tags then
-- docutils supports alphanumeric strings separated by [-._:]
-- We are slightly more liberal for simplicity.
-
local role = first.text:match('^{([-._+:%w]+)}$')
-
if role ~= nil then
-
inlines:remove(i)
+
-- Allow preceding punctuation (eg '('), otherwise '({file}`...`)'
+
-- does not match. Also allow anything followed by a non-breaking space
+
-- since pandoc emits those after certain abbreviations (e.g. e.g.).
+
local prefix, role = first.text:match('^(.*){([-._+:%w]+)}$')
+
if role ~= nil and (prefix == '' or prefix:match("^.*[%p ]$") ~= nil) then
+
if prefix == '' then
+
inlines:remove(i)
+
else
+
first.text = prefix
+
end
second.attributes['role'] = role
second.classes:insert('interpreted-text')
end