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 }
|
||
}
|