Browse Source

Iterate on French typography

master
David Larlet 3 months ago
parent
commit
c759692ef1
1 changed files with 13 additions and 10 deletions
  1. 13
    10
      typography.py

+ 13
- 10
typography.py View File

@@ -1,7 +1,11 @@
import unicodedata

import regex # pour le support de "\p{}"

# ESPACE_FINE_INSECABLE = unicodedata.lookup("NARROW NO-BREAK SPACE")
# ESPACE_INSECABLE = unicodedata.lookup("NO-BREAK SPACE")
# Pour distinguer dans le HTML produit plus facilement.
ESPACE_FINE_INSECABLE = " "
ESPACE_INSECABLE = " "


def assemble_regexes(*regexes):
return "|".join(regexes)
@@ -10,22 +14,24 @@ def assemble_regexes(*regexes):
def build_regex(avant, apres):
# \p{} permet de reconnaître un caractère par sa catégorie Unicode
# "Zs" est la catégorie "Separator, space".
return rf"((?P<avant>{avant})" + r"\p{Zs}" + rf"(?P<apres>{apres}))"
return (
rf"((?P<avant>{avant})"
+ rf"(\p{{Zs}}|{ESPACE_INSECABLE})"
+ rf"(?P<apres>{apres}))"
)


RE_ESPACE_FINE_INSECABLE = regex.compile(
assemble_regexes(
build_regex(r"\w?", r"[;\?!]"), # Ponctuations doubles.
build_regex(r"\d", r"([ghj]|mg|°C)(\b|$)"), # Unités.
build_regex(r"\d", r"(Mo|Ko|Go|Mb|Kb|Gb)(\b|$)"), # Tailles de fichiers.
build_regex(r"\d", r"%"), # Pourcentages.
build_regex(r"\d", r"€"), # Symboles monétaires.
build_regex(r"\d", r"\d"), # Séparateurs de milliers.
)
)

ESPACE_FINE_INSECABLE = unicodedata.lookup("NARROW NO-BREAK SPACE")
ESPACE_FINE_INSECABLE = "&#8239;"


def insere_espaces_fines_insecables(texte):
return RE_ESPACE_FINE_INSECABLE.sub(
@@ -40,14 +46,11 @@ RE_ESPACE_INSECABLE = regex.compile(
# "Po" est la catégorie "Punctuation, other".
build_regex(r"[\w\p{Po}]?", r"»"), # Guillemets en chevrons.
build_regex(r"\d", r"(?!\d)\w"), # Chiffre suivi de lettres.
build_regex(r"(M\.|Mme)", r"\w"), # Titres (Monsieur, Madame).
)
)


ESPACE_INSECABLE = unicodedata.lookup("NO-BREAK SPACE")
ESPACE_INSECABLE = "&nbsp;"


def insere_espaces_insecables(texte):
return RE_ESPACE_INSECABLE.sub(
r"\g<avant>" + ESPACE_INSECABLE + r"\g<apres>", texte

Loading…
Cancel
Save