32 lines
1002 B
Lua
32 lines
1002 B
Lua
|
-- Transforme une espace insécable normale en espace fine insécable
|
|||
|
-- selon les conventions de la typographie française.
|
|||
|
|
|||
|
-- Lorsqu'un point-virgule est protégé dans une citation, il est représenté
|
|||
|
-- comme un objet Str à lui tout seul dans l'AST. La fonction Inlines sert
|
|||
|
-- à normaliser cette séquence avant le traitement par la fonction Str et
|
|||
|
-- prévient d'autres anomalies de ce type.
|
|||
|
|
|||
|
function Inlines(inlines)
|
|||
|
for i = #inlines-1, 2, -1 do
|
|||
|
if inlines[i].t == "Str" and string.match(inlines[i].text, "^[;!?]$")
|
|||
|
and inlines[i-1].t == "Str" and string.match(inlines[i-1].text, ".* $")
|
|||
|
then
|
|||
|
inlines[i-1].text = inlines[i-1].text .. inlines[i].text
|
|||
|
inlines:remove(i)
|
|||
|
end
|
|||
|
end
|
|||
|
return inlines
|
|||
|
end
|
|||
|
|
|||
|
function Str(elem)
|
|||
|
if string.match(elem.text, ".* [;!?]$") then
|
|||
|
new, _ = string.gsub(elem.text, " ([;!?])", utf8.char(8239) .. "%1")
|
|||
|
return pandoc.Str(new)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return {
|
|||
|
{ Inlines = Inlines },
|
|||
|
{ Str = Str }
|
|||
|
}
|