Pour en savoir plus sur la logique de l'alphabet arménien et sur son fonctionnement, voyez Arménie.online ou votre serviteur.
Un autre point de vue est donné par Wikipedia. On y trouvera la translittération ISO 9985, légèrement différente.
La translittération HMB est résumée par le tableau suivant :
Ա | Բ | Գ | Դ | Ե | Զ | Է | Ը | Թ | Ժ | Ի | Լ | Խ | Ծ | Կ | Հ | Ձ | Ղ | Ճ | Մ | Յ | Ն | Շ | Ո | Չ | Պ | Ջ | Ռ | Ս | Վ | Տ | Ր | Ց | Ւ | Փ | Ք | Օ | Ֆ | |
ա | բ | գ | դ | ե | զ | է | ը | թ | ժ | ի | լ | խ | ծ | կ | հ | ձ | ղ | ճ | մ | յ | ն | շ | ո | չ | պ | ջ | ռ | ս | վ | տ | ր | ց | ւ | փ | ք | օ | ֆ | և |
a | b | g | d | e | z | ē | ǝ | t῾ | ž | i | l | x | c | k | h | j | ł | č | m | y | n | š | o | č῾ | p | ǰ | ṙ | s | v | t | r | c῾ | w | p῾ | k῾ | ō | f | ew |
La translittération HMB utilise
Cette marque n'est pas un banal quote ni même une apostrophe, mais bien l'esprit rude du grec ancien,
appelé dasia dans la nomenclature Unicode (n° 0x1FFE, dans le bloc Greek Extended).
On note que dans son principe la translittération ne se préoccupe pas de la correspondance majuscules/minuscules,
considérée sans doute comme allant de soi.
Effectivement, dans la plupart des cas, Unicode nous fournit une majuscule irréfutable
(c'est même pour cela que nous avons choisi le e retourné ǝ du bloc Latin Extended-B
et non pas le schwa de l'alphabet phonétique international, n° 0x0259).
La seule exception est le ǰ (n° 0x01F0, du bloc Latin Extended-B), qui note l'affriquée chuintante sonore :
il n'a point de correspondant exact en majuscule.
Pour être complet, on a donc choisi la majuscule "la plus proche", à savoir Ĵ (n° 0x0134, du bloc Latin Extended-A).
Ainsi : Ի ԽՈՐՈՑ ՍՐՏԻՑ ԽԱՒՍՔ ԸՆԴ ԱՍՏՈՒԾՈՅ <=>
I XOROC῾ SRTIC῾ XAWSK῾ ƎND ASTOWCOY
Le langage JavaScript nous offre un mécanisme qui fait de cette réalisation un jeu d'enfant,
à savoir
des tableaux dits associatifs, dont les clefs sont des chaînes et les valeurs quelconques.
Il
est très facile de traduire les explications ci-dessus définissant la
translittération HMB par un tel tableau,
dont les clefs sont des chaînes d'un seul caractère (arménien) et les
valeurs les chaines d'un ou deux caractères de la translittération.
En voici le début :
var unihmb = {"Ա":"A","Բ":"B","Գ":"G","Դ":"D","Ե":"E","Զ":"Z","Է":"Ē","Ը":"Ǝ","Թ":"T῾","Ժ":"Ž", ...};
La translittération directe, de l'arménien vers HMB, est alors effectuée par une simple boucle,
lisant la chaîne d'entrée caractère par caractère et construisant la
chaîne-résultat en concaténant les valeurs trouvées dans le tableau :
function uniToHmb (chn) {
var res = "";
for ( var i = 0; i<chn.length; i++ ) {
res += unihmb[chn.charAt(i)];
}
return res;
}
En fait les choses ne sont pas aussi simples, car (comme on l'a vu à la fin du cours n° 4),
dans le texte d'un programme JavaScript on ne peut écrire que le l'ASCII.
Il va donc falloir remplacer dans le tableau ci-dessus tous les caractères non-ASCII par \ulenumérohexa,
ce qui donne :
var unihmb = {
"\u0531":"A","\u0532":"B",...,"\u0536":"Z","\u0537":"\u0112","\u0538":"\u018e","\u0539":"T\u1ffe",
"\u053A":"\u017d", ...};
Cette tâche fastidieuse sera avantageusement effectuée par un programme C
du genre de ceux que nous avons vus
dans la première partie de ce cours.
En effet, la technique de lecture des caractères dans un fichier UTF-8 pour engendrer leurs numéros Unicode
s'applique immédiatement à la production des escape-sequences \ulenumérohexa.
Voyez utf8ToESC.c pour les détails.
À partir d'un fichier texte contenant la spécification de HMB en
UTF-8, lisible, contrôlable et modifiable, dont voici le début :
Ա:A,
Բ:B,
Գ:G,
Դ:D,
Ե:E,
Զ:Z,
Է:Ē,
Ը:Ǝ,
Թ:T῾,
Ժ:Ž,
...
un programme C ad hoc engendre le programme JavaScript désiré.
La spécification HMB - source : fichier HMB.txt.
Le programme JavaScript engendré : fichier UniHMB.js.
Le programme C : fichier ArmToHMB.c.
N.B. Ce programme a été écrit comme extension directe de la suite de la première partie du cours,
pour faire simple il exploite les particularités de la forme du fichier HMB-source, il est donc fragile.
En programmation cela s'appelle du quick & dirty...
Le même principe s'applique, avec un tableau associatif qui échange les clefs et les valeurs :
var hmbuni = {"A":"Ա","B":"Բ","G":"Գ",..."Z":"Զ","Ē":"Է","Ǝ":"Ը","T῾":"Թ","Ž":"Ժ", ...};
La boucle exploitant ce tableau est un peu plus délicate, car il faut tenir compte des esprits rudes.
function hmbToUni (chn) {
var res = "";
for ( var i = 0; i<chn.length; i++ ) {
var clef = chn.charAt(i);
if( chn.charCodeAt(i+1) == 0x1FFE ){
clef += chn.charAt(++i);
}
res += hmbuni[clef];
}
return res;
}
Enfin, il faut comme ci-dessus substituer aux caractères non-ASCII leurs escape-sequences
\ulenumérohexa.
Le programme JavaScript désiré (fichier HMBUni.js) sera engendré à partir du même fichier-source HMB.txt,
par un programme C (fichier HMBToArm.c) utilisant le même principe que ci-dessus.
N.B. Ce programme est vraiment très dirty, il devient urgent de le réécrire (refactoring).
Prenez-le donc comme une preuve de faisabilité mais pas comme un modèle de style !