Manuel de Codage

Le manuel de codage est un standard de saisie pour les textes hiéroglyphiques. Il est officiellement décrit dans [BGH+88]. Les logiciels d'édition de hiéroglyphes utilisent ce standard, mais lui apportent généralement un certain nombre de modifications. Celles-ci répondent, d'une part, à la demande des utilisateurs, qui réclament un meilleur contrôle sur le rendu du système, et d'autre part corrigent quelque bogues dans le standard d'origine (en particulier pour tout ce qui concerne le hachurage des textes).

Ce document se veut une présentation précise de l'état « actuel » du standard. Il se base essentiellement sur winglyph1.2. Dans cette présentation, les éléments présentés sans commentaire spécial font partie de [BGH+88]. Ceux qui sont extraits de Winglyph sont suivis de WG ; ceux qui proviennent de Tksesh sont suivis de Tk. La version de Tksesh correspondante est la version actuellement en développement. Je ne connais pas assez bien Macscribe pour l'inclure ici. Enfin, les propositions sans implémentation actuelle sont suivie du mot PROP

Conventions

Un texte au format du manuel de codage est a priori écrit en ASCII ou en ISO8859.1.

Du fait de la multiplicité des plates-formes, il serait souhaitable (ce n'est pas le cas actuellement, à ma connaissance) que tout programme traitant des textes au format du MDC reconnût les séquence de codes ascii (10), (13, 10) et (13) comme des fins de lignes.

Description informelle du manuel de codage

le principe général du Manuel est le suivant : les signes sont codés selon leur code typographique dans la fonte de Gardiner (A40, I3, etc.) sauf pour les unilitaires, les bilitaires, et les trilitères. Pour ceux-ci, il est aussi possible d'utiliser leur translittération (voir tableau pour les codes). En cas d'ambiguïté, seul le signe le plus fréquent sera accessible par sa translittération.

Les choix sont parfois curieux. Par exemple, iw est N18 (l'île), pas D54 (les jambes qui marchent). Le corpus utilisé pour faire ces choix était-il représentatif de l'ensemble des textes ? (dans l'état actuel de ma base, où le néo-égyptien et les textes écrits en hiératique sont très représentés, je trouve 40 N18 pour 892 D54 !)

Les variantes de signes dont les codes sont suivis d'une astérisque dans la liste, comme A14*, sont codés en remplaçant l'astérisque par un « A » : « A14A », ceux suivis de deux astérisques, comme G7** sont codés avec un « B » : « G7B ».

Les signes sont combinés en les séparant par les symboles « - », « * », « : »   : « - » sépare deux cadrats, « : » permet d'empiler des signes verticalement, et « * » sépare des signes horizontalement, à l'intérieur d'un cadrat. Les parenthèses permettent de changer les priorités.

Ligatures (TK, WG)

Le système de ligatures proposé ici est particulier à la version actuelle de TKsesh. Winglyph utilise la même notation, mais considère les ligatures commes des hiéroglyphes composites. En particulier, pour winglyph, une ligature est connue ou inconnue. Pour Tksesh, une ligature est une façon particulière de grouper des hiéroglyphes. Si la ligature est définie, tksesh les groupera d'une manière spéciale, sinon, il se comportera comme si les signes étaient séparés par '*'. Le symbole servant à lier des hiéroglyphes est '&'. Les modificateurs comme \, \t, etc. ne sont pas pris en compte. Les marques grammaticales sont par contre significatives.

exemples

A&t
ligature simple des signes A et t
t&w&t
ligature de trois signes. On peut lier autant de signes que nécessaire.
k-A &p-w
ligature de deux signes n'appartenant pas au même mot

Grammaire du manuel de codage

Nous donnons ici une grammaire formelle du manuel de codage. Cette grammaire est destinée aux programmeurs qui voudraient écrire des logiciels lisant et écrivant des textes au format du manuel.

La description de cette grammaire utilise les notations suivantes :

[...]
le texte entre crochets est optionnel
(...)
les parentèses groupent du texte
*
le texte suivi par l'astérisque est répété 0 ou plusieurs fois
+
le texte suivi par « plus » est répété 1 ou plusieurs fois
A|B
la barre signifie « ou » : le texte A ou le texte B
"..."
le texte entre guillemets se trouve tel quel dans le document. Par exemple, "*" désigne le signe « astérisque ».

mdcfile ::= [WORDEND] [SEPARATOR] (textitem [SEPARATOR])* textitem [SEPARATOR]
textitem ::= uppercadrat | PAGEEND | LINEEND | textsuper
textsuper ::= TEXTSUPER TEXTSUPERCHAR*
uppercadrat ::= cadrat [HACHING]
::= TOGGLE
::= TEXT
cadrat ::= (subcadrat ":")* subcadrat
subcadrat ::= (inhierlist "*")* inhierlist
inhierlist ::= sign
::= STARTCONSTRUCT cadrats ENDCONSTRUCT
::= "(" cadrats ")"
cadrats ::= uppercadrat ([SEPARATOR] uppercadrat)*
sign ::= hieroglyphs | lig
| HALFSPACE | FULLSPACE | REDPOINT | BLACKPOINT
| HACHG | HACHV | HACHT | HACHH
hieroglyphs ::= hieroglyph | hieroglyph OVERWRITE hieroglyph
lig ::= hieroglyph ("&" hieroglyph)+
hieroglyph ::= [GRAMMAR] HIEROGLYPH MODIFIER* [WORDEND]

Note : remarquez que le texte en caractères latins n'intervient pas comme élément de cadrat (+lSigne inconnu+s:n, par exemple, est illégal). On peut cependant l'inclure dans un cadrat en le parenthésant.

Éléments lexicaux

ESPSO ::= (" "|\t|\n|\015|"_"|"-")*
(Tk) Espaces optionnels. Ce token permet d'apporter une certaine robustesse à l'analyseur syntaxique. Il est légal après la plupart des autres tokens, si un espace n'a pas de sens.
WORDEND ::= " ", " " (deux espaces), "_", "__"
un espace ou un souligné marquent la fin d'un mot. Deux espaces ou deux soulignés marquent la fin d'une phrase.

(Tk) Note : remarquer que le marqueur suit immédiatement le dernier signe du mot. Ainsi, la séquence : "tA:Aa32*(t:xAst)" doit-elle se coder "tA:Aa32*(t:xAst_)" et non "tA:Aa32*(t:xAst)_".

HACHING ::= "#"["1"]["2"]["3"]["4"]
(WG, repris dans Tk) Système simple de hachurage. Le cadrat est séparé en quatre quadrants, ainsi :
1 2
3 4
chaque quart peut être hachuré ou non. Ainsi, "#124" signifient que les cadrants 1,2, et 4 sont hachurés.
PAGEEND ::= "-!!"
PAGEEND ::= "-!!" [ ENTIER "%" ] ESPSO (WG)
LINEEND ::= "-!"
LINEEND ::= "-!" [ ENTIER "%" ] ESPSO (WG)
marque la fin d'une page (resp. d'une ligne). L'entier optionnel qui suit indique un saut dans winglyph.
SEPARATOR ::= "-"
SEPARATOR ::= "-" ESPSO(Tk)
OVERWRITE ::= "#" | "##"
Superposition de deux signes. La première version est à éviter, elle devrait être supprimée du MDC, car elle est ambiguë.
Sépare deux cadrats.
TOGGLE ::= ("-#-" | "#b" | "#e" | "$r" | "$b" | "?" | "??" | "^" | "$" ) ESPSO
Ces séparateurs sont des "drapeaux". Ils modifient le texte qui les suit, et l'état du texte en question reste modifié jusqu'à ce qu'un autre TOGGLE le change à nouveau. Par exemple, le texte après "$r" est en rouge jusqu'à ce qu'un "$b" le passe en noir.
TEXT ::= ([^+])*
Le texte dans un passage en caractères alphabétiques. Notez que le symbole "+" ne peut être utilisé. On pourra le remplacer par "+"
TEXTSUPER ::= "|"
TEXTSUPERCHAR ::= [^-]
Un numéro de ligne est indiqué par un "|" suivi du texte à placer au dessus de la barre. Il se termine par un "-".

Constructions parenthésées : cartouches, commentaires philologiques

STARTCONSTRUCT ... ENDCONSTRUCT

En fait, nous résumons ici plusieurs constructions.

Cartouches

Les cartouches, serekh, etc... sont construits grâce à des crochets "<" et ">".

"<"["S"|"F"|"H"]["b"|"m"|"e"] ESPSO... ">"
Cartouche. La première lettre indique de quel type de cartouche il s'agit : la seconde lettre spécifie quelle partie du cartouche doit être dessinée :
"<"["S"|"F"|"H"][0123] ESPSO... ["S"|"F"|"H"][0123]">"
(WG) Système similaire au précédent. Les numéros ont les significations suivantes:

Commentaires philologiques

Ces constructions sont:

Modificateurs

Les modificateurs (MODIFIER dans la grammaire précédente) permettent de fixer ou changer certaines caractéristiques des signes. Actuellement, les modificateurs reconnus sont :

"\" NOMBRE
fixe la taille du signe, en pourcentage de sa taille « normale ». La signification de « taille normale » n'est pas fixée a priori.
"\"
inverse un signe. S'il est dans le sens gauche/droite, le met dans le sens droite-gauche. Par exemple : C2\-A30
"\r" ("1"|"2"|"3"|"4")
rotation dans le sens inverse des aiguilles d'une montre (donc dans le sens trigonométrique). Chaque unité correspond à 90 degrés.
"\t" ("1"|"2"|"3"|"4")
rotation dans le sens des aiguilles d'une montre. Chaque unité correspond à 90 degrés. Le signes est auparavant inversé.
"\R" ["-"]ENTIER
rotation dans le sens des aiguilles d'une montre, exprimée en degrés.
"\i"
(Tk) signe à ignorer. Ce signe n'est là que pour occuper de l'espace. Le système pourra, soit ne pas le dessiner du tout, soit le dessiner en pointillés, en gris pâle, etc... Le signe ne devra pas non plus être pris en compte dans des applications lexicographiques.

L'intérêt de ce signe est de régler le problème qui se pose quand la structure logique du texte et la structure graphique des cadrats ne coïncident pas. Pour un exemple non informatique, voir par exemple Hornung, Amduat, III, p. 780. Une colonne commence ainsi : i\i*(n\i:U36*(1:n), parce que le i-n est déjà écrit sur la page précédente.

L'idée de cette extension doit beaucoup à Spencer Tasker, dans les versions préliminaires d'ETML.
"\inword" NOMBRE
(PROP) Le signe appartient au mot dont le numéro suit. Ceci est une méthode alternative pour délimiter les mots. Deux possibilités sont à étudier. D'un point de vue logique, ce système fonctionne, mais rend complexe la recherche des mots d'un texte. On peut envisager d'ajouter un marqueur de début de mot et un marqueur de fin de mot. Cela permettrait de plus d'avoir une certaine localité des numéros, si on le souhaite. Exemple : H\fw1-Xr\fw2\ew2 -b\ew1 permet d'écrire le groupe Xry-Hbd en distingant les deux mots.

Un problème de cette approche est que nous aurions deux systèmes de désignation des mots, certe compatibles, mais pas forcément faciles à combiner.

Forme générale d'un modificateur

Pour la compatibilité des applications, nous proposons que toute séquence de la forme "\" LETTRE* CHIFFRE* soit reconnue comme un modificateur, et ignorée le cas échéant.

Autres éléments

HALFSPACE ::= "."
demi-espace. Un quart de cadrat
SPACE ::= ".."
espace. Un cadrat
HACHG= "//""
hachure de la taille d'un cadrat entier
HACHV= "v/"
hachure vertical d'un demi-cadrat
HACHH= "h/"
hachure horizontale d'un demi-cadrat
HACHT= "/"
hachure d'un quart de cadrat

Bibliographie

[BGH+88]
Jan BUURMAN, Nicolas GRIMAL, Michael HAINSWORTH, Jochen HALLOF et Dirk VAN DER PLAS. « Inventaire des signes hiéroglyphiqures en vue de leur saisie informatique » ; Mémoires de l'Académie des Inscriptions et Belles Lettres. Institut de France, Paris, 1988.

Serge Rosmorduc