You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.4 KiB
90 lines
3.4 KiB
#!/bin/sh
|
|
|
|
# Écriture du dictionnaire de substitutions de foqu à
|
|
# partir du tableau QUNI et de ses substitutions opentype
|
|
|
|
# nom des balises et de l'attribut QUNI correspondant
|
|
Q="q"
|
|
T="t"
|
|
U="u"
|
|
|
|
# note sur le symbole «|» : un pipe, ou tuyau permet de rediriger la sortie d'un programme dans l'entrée du suivant.
|
|
# la fonction dictionnaire ci-dessous est construite sur ce principe
|
|
dictionnaire () {
|
|
# télécharge le tableau QUNI et enregistre le dans un fichier qui s'appelle tableau
|
|
# curl -O https://typotheque.byebyebinary.space/fr/quni/tableau
|
|
# ne conserve que le texte contenu dans les div avec une classe ligne contenue dans l'élément avec un id ligature
|
|
cat tableau | htmlq main "#ligature" div.ligne --text |
|
|
# retire les espaces au début des lignes
|
|
sed 's/^[[:space:]]*//' |
|
|
# ne garde que les lignes qui commencent par «sub» ou qui contiennent «U+»
|
|
grep -E "^sub|U\+" |
|
|
# exclue les lignes qui contiennent «Unicode», «masc», «fem», «nb» ou des parenthèses
|
|
grep -vE "Unicode|masc|fem|nb|\(|\)" |
|
|
# remplace «;» par deux retours à la ligne
|
|
sed 's/;/\n\n/g' |
|
|
# efface les lignes vides
|
|
sed '/^$/d' |
|
|
# avant une ligne qui commence par «U+», ajoute un retour à la ligne
|
|
sed 's/^U+/\nU+/g' |
|
|
# retire «by» et ce qu'il y a après
|
|
sed 's/ by.*//g' |
|
|
# retire les espaces
|
|
sed 's/[[:space:]]//g' |
|
|
# remplace les noms ascii des diacritiques, espaces et points médians par leurs symboles unicode
|
|
sed -e 's/eacute/è/g' \
|
|
-e 's/Eacute/È/g' \
|
|
-e 's/aacute/á/g' \
|
|
-e 's/Aacute/Á/g' \
|
|
-e 's/agrave/à/g' \
|
|
-e 's/Agrave/À/g' \
|
|
-e 's/egrave/è/g' \
|
|
-e 's/Egrave/È/g' \
|
|
-e 's/idieresis/ï/g' \
|
|
-e 's/Idieresis/Ï/g' \
|
|
-e 's/space/ /g' \
|
|
-e 's/periodcentered.case/˙/' \
|
|
-e 's/periodcentered/·/' |
|
|
# retire les déclarations de substitutions opentype «sub» qui restent en début de ligne
|
|
sed 's/^sub//g' |
|
|
# remplace un seul retour à la ligne par une tabulation, mais pas deux
|
|
awk 'BEGIN {RS=""; ORS="\n\n"} {gsub(/\n/, "\t"); print}' |
|
|
# crée le dictionnaire de substitution sed en bouclant à partir du deuxième champ de chaque ligne
|
|
awk -v Q="$Q" -v T="$T" -v U="$U" -F'\t' '{
|
|
for (i = 2; i <= NF; i++){
|
|
split($i, term, "·|˙")
|
|
printf "-e '\''s\t%s\t<%s data-%s=\"%s\">", $2, Q, U, $1
|
|
for (t = 1; t <= length(term); t++){
|
|
printf "<%s>%s</%s>", T, term[t], T
|
|
}
|
|
printf "</%s>\tg'\'' \\\n", Q
|
|
}
|
|
}' |
|
|
# trie les substitutions pour les appliquer des plus longues aux plus courtes
|
|
awk '{ print length($0) " " $0; }'| sort -r -n | cut -d ' ' -f 2- |
|
|
# enlève la dernière barre oblique inversée «\» de la dernière ligne
|
|
sed '${s/ \\$//}'
|
|
}
|
|
|
|
cat << % > foqu
|
|
#!/bin/sh
|
|
|
|
#·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·
|
|
#
|
|
# Un outil qui sémantise l'écriture inclusive à point médian dans un document html
|
|
#
|
|
# Exemple :
|
|
# cat texte.html | foqu > texte-foqu.html
|
|
# <p>créateur·ices</p> → <p>créat<q><t>eur</t><t>ice</t></q>s</p>
|
|
#
|
|
# S'utilise en avale d'une conversion vers l'html au risque de rencontrer des soucis.
|
|
# le programme a été ré-écrit par le programme tableau.sh le $(date '+%A %d %B %Y à %Hh%M').
|
|
|
|
# auteur·ices :
|
|
# Martin Lemaire
|
|
#
|
|
#·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·˙·
|
|
|
|
sed \\
|
|
$(dictionnaire)
|
|
%
|
|
|