FR 2723457 A1 19960209 FR 9409801 A 19940808 1 2723457 Procédé de reconnaissance automatique d'un langage dans lequel des données numériques sont reçues. La présente invention concerne la reconnaissance automatique d'un langage dans lequel des données numériques sont reçues, notamment par un terminal d'un système informatique. Un domaine particulier d'application de l'invention est celui de la reconnaissance automatique du langage dans lequel des données numériques représentant une tâche à effectuer sont reçues par un dispositif d'impression tel qu'un traceur ou une imprimante, ou un dispositif d'affichage. Il existe différents langages ou formats dans lesquels des informations à reproduire par un traceur ou une imprimante peuvent être traduites sous forme de données numériques transmises depuis un ordinateur hôte. Les données reçues doivent être interprétées, ou décodées, au moyen d'un module d'interprétation particulier à chaque langage. L'interprétation permet de transformer les données sous une forme directement utilisable pour l'impression, indépendamment du langage employé, notamment sous forme d'une image décrite entièrement par points. Un même dispositif d'impression peut recevoir des données numériques codées sous différents langages. Il en est ainsi lorsqu'un même utilisateur choisit des langages différents selon les tâches à réaliser, ou lorsque plusieurs utilisateurs employant des langages différents peuvent accéder à un même dispositif d'impression via un réscau. Pour permettre le traitement des données reçues, il est alors nécessaire de sélectionner le module d'interprétation qui correspond au langage de codage utilisé. Le flux de données numériques est supposé être composé d'une succession de fichiers de dessins. Chacun des fichiers de dessins utilise un langage défini dans une liste. Dans le cas o un fichier de dessin n'a pas de fin explicite, la distinction des différents fichiers de dessins peut se faire par détection d'une désynchronisation ou d'un changement d'encodage. Si un fichier comporte des erreurs, le langage doit cependant pouvoir être correctement détecté dans la mesure o le nombre d'erreurs reste raisonnable. Entre les fichiers utilisant des langages de la liste précitée, peuvent se trouver des textes n'utilisant pas de langages qui seront appelés ciaprès "textes". Les dessins peuvent être séparés par un texte d'un format spécial qui sera 2 2723457 appelé plus loin "bannière". Une bannière peut ainsi être définie comme tout ensemble de données numériques codées (ou caractères) dans lequel on n'a reconnu aucun langage dans une liste prédéfinie de langages. Les langages identifiés peuvent appartenir à plusieurs classes: langages à signatures; langages à mots clés ou caractères de synchronisation; langages utilisant des mnémoniques. Un mnémonique peut être considéré comme un ensemble de données numériques codées en nombre prédéterminé, par exemple une suite de deux caractères significatifs. Il a été proposé différents procédés permettant une reconnaissance automatique du langage à partir d'au moins une partie des données reçues. Par reconnaissance automatique, on entend ici un processus qui, non seulement ne nécessite pas l'intervention physique d'un utilisateur pour effectuer une sélection au niveau du dispositif d'impression, mais qui, en outre, ne nécessite pas l'adjonction de séquences de commande ou d'en-têtes spécifiques à l'ensemble de données normalement élaboré au moyen d'un langage. Un procédé connu consiste à traiter les données numériques reçues par tous les modules d'interprétation et retenir celui qui engendre le moins d'erreurs. Un procédé de ce type est décrit dans le document EP-A-0 556 059. Bien que très fiable, un tel procédé ne peut pas être retenu dans beaucoup de cas, en raison du temps qu'il requiert et de la nécessité de mémoriser l'ensemble des données reçues. Un autre procédé connu, décrit dans le document US-A-5 293 466 consiste, dans un premier temps, à produire des échantillons de données codées avec différents langages et à les analyser de façon statistique pour déduire des caractéristiques propres à chaque langage sous forme de groupes de données qui sont mémorisés. Ensuite le début d'un ensemble de données numériques reçues par le dispositif d'impression est prélevé pour être comparé avec les groupes de données mémorisés et en déduire le langage utilisé. La difficulté ici est de déterminer les caractéristiques adéquates pour limiter le taux d'erreurs dans la reconnaissance. Il est encore connu, dans le document EP-A-0 558 804, d'analyser la syntaxe d'un bloc de données reçues et, pour chaque langage, d'identifier des clés favorables et des clés défavorables dans le bloc de données, de pondérer ces clés et de sommer les résultats obtenus afin de retenir le candidat le mieux placé parmi 3 2723457 tous les langages. Il s'agit encore d'un processus assez long et une difficulté là aussi est de choisir les clés et les facteurs de pondération permettant de minimiser les erreurs et les incertitudes de reconnaissance. La présente invention a pour but de permettre une reconnaissance de langage automatique fiable et rapide en utilisant une partie seulement des données reçues. A cet effet, l'invention concerne notamment un procédé de reconnaissance automatique d'un langage dans lequel des données numériques sont recçues, comprenant la sélection d'un bloc de données parmi les données reçues et la recherche, dans ce bloc, d'éléments témoignant en faveur de la présence ou de l'absence d'un langage. Selon un aspect de l'invention, la reconnaissance est effectuée en recherchant plusieurs langages connus de façon séquentielle, dans un ordre prédéterminé, en procédant, pour chaque langage, à la recherche d'au moins un élément caractéristique de ce langage dans le bloc de données. De préférence, l'ordre de recherche des langages est celui dans lequel la probabilité d'une erreur de reconnaissance est croissante. On pourra ainsi rechercher successivement les langages ayant une signature particulière, dans l'ordre de longueur de signature décroissante, puis les langages comprennant des mots clefs ou des caractères de synchronisation particuliers, et ensuite des langages utilisant des mnémoniques. Selon le type de langage recherché, la longueur des blocs de données utilisés est avantageusement variable, la longueur étant choisie pour minimiser la probabilité d'erreur de reconnaissance. Selon un mode particulier de réalisation de l'invention, pour la reconnaissance automatique d'un langage parmi un groupe de plusieurs langages utilisant des mnémoniques formés d'un nombre déterminé de caractères significatifs, le procédé comprend notamment les étapes de: enregistrement de mnémoniques appartenant aux langages du groupe, parmi lesquels des mnémoniques discriminants appartenant à un ou une partie des langages du groupe et n'appartenant pas aux autres langages du groupe; comparaison aux mnémoniques enregistrés des ensembles de caractères faisant partie du bloc sélectionné et ayant même longueur que les mnémoniques enregistrés; et - lorsqu'à l'étape de comparaison, un ensemble de caractères est détecté 4 2723457 correspondant à un mnémonique discriminant, élimination du ou des langage(s) au(x)quel(s) celui-ci n'appartient pas. Une caractéristique du procédé réside donc dans l'utilisation de critères permettant d'exclure un ou plusieurs langage(s) lors du processus de reconnaissance. Mais le processus de reconnaissance peut aussi comporter des phases positives. Ainsi, lorsqu'à l'étape de comparaison, un ensemble de caractères est détecté correspondant à un mnémonique appartenant à un seul langage du groupe de langages, ledit seul langage est réputé reconnu. En outre, il est avantageusement prévu que, pour chaque mnémonique appartenant à plusieurs langages du groupe et normalement suivi, dans un ensemble de données codées, d'un nombre prédéterminé de paramètres particulier à chacun de ces langages, le nombre prédéterminé de paramètres associé à ce mnémonique pour chaque langage est enregistré. Ainsi, lorsqu'à l'étape de comparaison, un ensemble de caractères est détecté correspondant à un mnémonique appartenant à plusieurs langages du groupe de langages et normalement suivi ou non de paramètres, le nombre de paramètres suivant le mnémonique détecté dans le bloc de données est compté et est comparé aux nombres de paramètres enregistrés pour ce mnémonique pour différents langages, et le langage pour lequel le nombre de paramètres enregistré est égal au nombre de paramètres compté est réputé reconnu. Dans les deux cas de reconnaissance positive évoqués plus haut, une confirmation du langage réputé reconnu peut être effectuée en vérifiant que le bloc de données ne contient pas de paramètres et/ou de mnémoniques erronés au regard de ce langage, sur au moins une partie de sa longueur à partir du premier mnémonique détecté valide. Un autre but de la présente invention est de fournir un procédé grâce auquel le processus de reconnaissance automatique de langage et le processus de décodage des données reçues par un module d'interprétation correspondant au langage reconnu ne sont pas inhibés par la présence, dans les données reçues, de bannières ou de défauts. Ainsi, selon encore un autre aspect de l'invention, dans un procédé de sélection automatique d'un module d'interprétation pour le décodage de données numériques reçues, comprenant: la sélection d'un bloc de données parmi les 2723457 données reçues, la reconnaissance automatique de langage par recherche, dans le bloc de données, d'éléments témoignant en faveur ou en défaveur d'un langage parmi plusieurs langages utilisables pour le codage des données, et la sélection d'un module d'interprétation correspondant au langage reconnu, un défaut ou une bannière sont détectés et peuvent être traités lorsque le langage reconnu après détection d'une erreur de syntaxe est le même que le langage précédent et qu'un décalage existe dans le flux de données numériques entre le début de l'erreur de syntaxe et l'origine à partir de laquelle le même langage a été à nouveau reconnu. Le traitement des défauts ou bannières peut consister simplement à les ignorer; ou éventuellement à les imprimer ou afficher. Une bannière est aussi détectée et peut être traitée lorsque le langage reconnu après détection d'une erreur de syntaxe est différent du langage précédent et qu'un décalage existe dans le flux de données numériques entre le début de l'erreur de syntaxe et l'origine à partir de laquelle le nouveau langage a été reconnu, et après vérification de l'absence de tout langage dans l'intervalle. L'invention sera mieux comprise à la lecture de la description faite ciaprès à titre indicatif, mais non limitatif, en référence aux dessins annexés sur lesquels: - la figure 1 montre un organigramme général d'un processus de reconnaissance automatique du langage dans lequel les données numériques reçues par un traceur sont codées; - la figure 2 montre un organigramme détaillé d'une phase du processus de la figure 1 concernant la recherche de signatures; - la figure 3 montre un organigramme détaillé d'une phase du processus de la figure 1 concernant la recherche de mots-clés; - la figure 4 montre un organigramme détaillé d'une phase du processus de la figure 1 concernant la recherche automatique du langage CALCOMP; - les figures 5 et 6 montrent des organigrammes détaillés d'une phase du processus de la figure 1 concernant la reconnaissance automatique d'un langage utilisant des mnémoniques; - les figures 7 et 8 montrent des organigrammes d'un processus de détection et suppression automatique de défauts et bannières dans des données numériques recçues par un traceur, en utilisant un processus de reconnaissance automatique de langage; - les figures 9A à 9F sont des représentations de parties de blocs de données numériques illustrant le processus de détection et suppression 6 2723457 automatique de défauts et bannières notamment des figures 7 et 8, et - la figure 10 est un schéma fonctionnel d'une unité de traitement de données numériques reçues par un traceur en vue de l'exécution de dessins. La description qui suit est faite dans le cadre d'une application à la reconnaissance automatique de langage et au décodage de données numériques reçues par un traceur. Il apparaîtra immédiatement à l'homme de l'art que les mêmes principes pourront être mis en oeuvre pour des dispositifs autres que des traceurs, en particulier des imprimantes, mais aussi d'autres dispositifs périphériques recevant des données numériques d'un ordinateur hôte ou d'un réseau informatique, ou même au sein d'un ordinateur lui-même. La figure 10 est un schéma fonctionnel d'une unité de réception et de traitement de données numériques reçues par un traceur et représentant des informations graphiques à reproduire. Le flux de données entrantes est reçu par un module de traitement 10 qui traite les données pour les mettre sous forme d'une liste d'affichage comprenant des primitives graphiques élémentaires: vecteurs, polylignes, images décrites en points (ou "bitmaps"). Les primitives graphiques élémentaires, sont transformées par un module 14 en un ensemble de points qui décrivent l'image à imprimer. Un automate 16 relie le module de traitement 10 à une unité centrale 18, notamment afin de commander le module de traitement 10 par un module d'interprétation adapté au langage dans lequel les données reçues sont codées. Un panneau d'affichage 12, relié à l'unité centrale permet notamment d'afficher le nom du langage reconnu en cours. Plusieurs modules d'interprétation sont disponibles en unité centrale, la sélection du module adéquat étant effectuée à partir des informations reçues d'un module 20 de reconnaissance automatique de langage. Le module 20 est relié à l'unité centrale 18 et reçoit au moins une partie des données entrantes. Une architecture telle que décrite ci-avant est connue en soi et ne nécessite donc pas une description plus détaillée. Un module de reconnaissance automatique de langage est destiné à identifier le langage dans lequel les données sont reçues parmi plusieurs langages connus, ainsi que la position du début du langage détecté. Dans le domaine graphique, différents langages sont connus et utilisés. Certains décrivent un tracé à effectuer par des vecteurs, d'autres par des points. Des 7 2723457 informations à reproduire, notamment des caractères alphanumériques, peuvent aussi être reçues suivant un langage particulier (texte) n'appartenant pas aux catégories précédentes. Des exemples de langages vectoriels sont les langages - "BGL" ("Benson Graphic Language") de la demanderesse, - "HP-GL" et "HP-G12" ("Hewlett Packard Graphic Language") de la société des Etats-Unis d'Amérique Hewlett Packard, - "VDF" ("Variable Data Format") de la demanderesse, - "CALCOMP 906/907" de la société des Etats-Unis d'Amérique Calcomp, et - "PostScript" de la société Adobe System. Des exemples de langages décrivant le tracé par des points ("raster") sont les langages: -"HP RTL" ("Hewlett Packard Raster Transfer Language") de la société des Etats-Unis d'Amérique Hewlett Packard, - "CALS" ("Computer-aided Acquisition and Logistic Support") - "TIFF" ("Tagged Image File Format"), de la société Aldus, et - "CCRF" ("Calcomp Raster Format") de la société des Etats-Unis d'Amérique Calcomp. Parmi d'autres langages, outre le texte, on peut citer: -"OGRCF" ("Océ Graphics Remote Control Format") de la demanderesse, qui peut être utilisé comme langage de contrôle, en particulier pour la configuration du traceur. La reconnaissance automatique de langage consiste à examiner une partie des données numériques reçues et à rechercher dans ces données des éléments caractéristiques de la présence ou de l'absence d'un langage. La partie de données examinées est un bloc de longueur variable situé au début du flux de données reçues. Les éléments caractéristiques de la présence ou de l'absence d'un langage peuvent être de différentes natures, selon le langage. Certains langages utilisent une signature, c'est-à-dire un ensemble prédéterminé et invariable de caractères qui se trouvent en en-tête, c'est-à-dire au début des ensembles de données codées par ces langages. La détection d'une signature dans le bloc de données examiné permet une reconnaissance directe du langage correspondant. Parmi les langages indiqués plus haut, le tableau 1 ci-après donne ceux qui 8 2723457 ont une signature et indique celle-ci. Tableau 1 Langage Signature "CALS" srcdocid: "CCRF" &&&& CALCOMP DEVICE CONTROL, CCRF () "OGRCF" BEGMF "PostScript" %! P S (1) "TIFF" II * ou MM * "VDF" (1) non nécessairement toujours présente; NUL = caractère nul table ASCII. D'autres langages utilisent des mots clefs ou des caractères particuliers. Ainsi, avec "CALCOMP" un flux de données utiles commence par un ou plusieurs caractères de synchronisation dépendante de la configuration du traceur. "PostScript" utilise un grand nombre de mots-clefs. La reconnaissance peut alors être effectuée par recherche de mots-clefs ou caractères de synchronisation dans le bloc de données examiné. Parmi les autres langages n'utilisant ni signature ni mots-clefs, "BGL", "HP-GL" et "HP-GL/2" utilisent des mnémoniques, c'est-à-dire des ensembles de données numériques codées en nombre prédéterminé, par exemple une suite de deux caractères significatifs. Dans un groupe de langages utilisant des mnémoniques, plusieurs situations peuvent être rencontrées: - il existe des mnémoniques discriminants qui n'existent pas dans au moins un langage, - il existe des mnémoniques déterminants qui n'existent que dans un seul langage, - il existe des mnémoniques communs qui existent dans plusieurs langages. Dans un premier cas, la détection d'un mnémonique discriminant dans le 9 2723457 bloc de données examiné permet d'exclure un ou plusieurs langage(s), donc de restreindre le champ de la recherche. A titre d'exemples non limitatifs, le mnémonique DT est discriminant dans la mesure o il exclut le langage BGL, le mnémonique CR est discriminant dans la mesure o il exclut "HP-GL", et le mnémonique AP est discriminant dans la mesure o il exclut "HP-GU2". Dans le deuxième cas, la détection d'un mnémonique déterminant dans le bloc de données examiné permet, sous réserve d'une vérification éventuelle, de reconnaître le langage correspondant. A titre d'exemples non limitatifs, le mnémonique CH est déterminant pour "BGL", le mnémonique CV est déterminant pour "HP-GL" et, le mnémonique CF est déterminant pour "HP-GI2". Dans le troisième cas, une caractéristique supplémentaire doit être examinée pour effectuer la reconnaissance. Certains mnémoniques sont normalement suivis ou non, dans le flux de données, d'un nombre prédéterminé de paramètres. Ce nombre, qui peut différer d'un langage à l'autre constitue une telle caractéristique supplémentaire. Il suffit alors, lors de la détection d'un mnémonique commun, de compter les paramètres qui lui sont associés à sa suite dans le bloc de données examiné et de comparer le nombre de paramètres compté avec les nombres de paramètres normalement présents pour les différents langages considérés. A titre d'exemples non limitatifs, le mnémonique CA est commun aux langages "BGL" et "HP-GL", le nombre de paramètres normalement présents étant de 3 pour le langage "BGL" et de "1" pour le langage "HP-GL", et le mnémonique DV est commun aux langages "BGL" et "HP-G[2", le nombre de paramètres normalement présents étant de 1 pour le langage "BGL" et de 2 pour le langage "HP-GI.2". La reconnaissance automatique du langage dans le bloc de données examiné est effectuée en recherchant de facçon séquentielle parmi les différents langages ou types de langage connus. L'ordre de recherche est celui dans lequel la probabilité d'une erreur de reconnaissance de langage est croissante. En conséquence, il est préférable de rechercher d'abord si le langage à reconnaître est un langage comportant une signature. Si cette signature ne comporte qu'un ou deux caractères, une vérification peut être effectuée. En effet, 2723457 plus la signature est longue, moins le risque d'une erreur de reconnaissance est élevé. Ensuite, la recherche est le cas échéant poursuivie parmi les langages utilisant des mots-clefs ou des caractères de synchronisation. Enfin, la recherche est le cas échéant poursuivie parmi les langages utilisant des mnémoniques, le processus étant par exemple conforme à celui évoqué plus haut. En outre, la longueur de la fenêtre d'observation, c'est-à-dire la longueur du bloc de données examiné peut être différente selon le type de langage recherché. Lorsque la recherche porte sur une signature qui se trouve normalement en tête du flux de données reçues, la largeur de la fenêtre est choisie à une valeur limitée, éventuellement, mais non nécessairement, inférieure à celle utilisée pour la recherche de langages utilisant des mots-clefs ou caractères de synchronisation qui ne sont pas nécessairement en tête du flux de données. La largeur de la fenêtre pourra par contre être plus longue dans le cas o les langages recherchés utilisent des mnémoniques. Ainsi, la largeur de la fenêtre d'observation pourra être variable en croissant dans l'ordre o la probabilité d'erreur de reconnaissance est croissante, c'est-à-dire dans l'ordre de la recherche. Le tableau 2 ci-après indique la valeur optimale minimale de la largeur de la fenètre d'observation pour différents langages. Tableau 2 langages largeur de fenêtre (octets) "CALS", "CCRF", "HP RTL", "TIFF" 32 "CALCOMP", "PostScript", "VDF" 128 "OGRCF" 256 "BGL", "HP-GL", "HP-GL/2" 1024 Un exemple de mise en oeuvre d'un procédé de reconnaissance automatique de langage utilisant les principes décrits ci-avant est maintenant décrit en référence aux figures 1 à 6. La reconnaissance est effectuée sur un bloc de données de par exemple 1024 octets, mais la fenêtre d'observation est différente selon le type de langage recherché. 11 2723457 Au début du processus de reconnaissance (figure 1), on se place à l'origine du bloc de données sélectionné, c'est-à-dire dans la position x=o (étape 100) et les paramètres utilisés par le traceur pour le langage "CALCOMP" sont enregistrés (étape 102). Ensuite, à l'étape 104, il est procédé à la recherche de la signature d'un langage en commençant par le langage ayant la plus longue signature (il s'agit dans le présent exemple, du langage "CCRF"). Pour tous les langages ayant une signature, la recherche est ici effectuée sur un bloc de données de N octets, c'est- à-dire entre la position d'origine et la position N-1, N pouvant être égal par exemple à 256. La figure 2 montre le détail d'une phase de recherche de signatures entre les positions 0 et N-1. Au début de cette phase, on se place à l'origine du bloc de données sélectionné, c'est-à-dire dans la position x = O (étape 200). Un test 202 est effectué pour déterminer si le caractère à la position x en cours d'observation correspond au premier caractère d'une signature. Si le résultat du test est positif, on procède à un autre test 204 de comparaison de la signature potentielle avec les caractères du bloc à la position x. Si le résultat du test est positif, on indique à l'étape 206 qu'un langage a été trouvé et on passe au test 106 du processus général de la figure 1. Si le résultat de l'un ou l'autre des tests 202 et 204 est négatif, on passe à l'étape 203 qui consiste à incrémenter la position x, puis on effectue un test 205 destiné à déterminer si la position x atteinte est supérieure ou égale au nombre N. Si ce n'est pas le cas, on retourne à l'entrée du test 202. Si en revanche x est trouvé supérieur ou égal à N, c'est la fin de la phase de recherche de signatures et l'on retourne au test 106 de l'organigramme de la figure 1. Si le test 106 indique qu'une signature a été trouvée, il peut commander la fin du processus de reconnaissance de langage. Dans un mode de réalisation plus particulier, dans le cas o une signature comprenant au moins trois caractères est détectée au test 106, le langage correspondant est considéré comme reconnu et le processus est arrêté. Par contre, dans le cas o une signature comprenant seulement deux caractères est détectée, le langage correspondant est sélectionné mais l'on procède de préférence à une vérification en raison de la plus forte probabilité d'erreur de reconnaissance qui existe avec une signature très courte. La vérification consiste par exemple à rechercher l'existence éventuelle, en 12 2723457 amont de la signature, d'une commande appartenant à un autre langage et avec laquelle une configuration identique à la signature détectée peut être rencontrée. Dans le cas du langage "VDF" ayant une signature sur deux caractères, le tableau 3 ci-après donne les commandes d'autres langages dans lesquelles cette même signature peut être trouvée. Tableau 3 Langage de la signature Commandes d'autres langages dans lesquelles la signature peut être trouvée "VDF" PE, LB, BL, TX,! (commentaires "BGL"), % (commentaires "OGRCF") "PostScript" LB, BL, BP, TX,!, % "CALCOMP" DT, SM. Si une telle commande n'est pas trouvée, la signature est réputée vraie et la reconnaissance du langage de la signature détectée est confirmée mettant fin au processus de reconnaissance. Si une telle commande est trouvée, la signature est réputée fausse, le point courant y dans le bloc de données est pris comme origine: x=y et l'on retourne à l'étape 104 de recherche de signature. Si aucune signature n'est trouvée (sortie négative du test 106), on passe à une phase 108 de recherche de mots-clés, illustrée sur l'organigramme de la figure 3. On commence à l'origine du bloc de données: x=0 (étape 300) et l'on recherche un mot-clé (étape 302) à la position x dans les N premiers octets du bloc (entre x et N-1), N étant par exemple égal à 256. Après recherche d'un mot-clé à la position x à l'étape 302, la valeur de x est incrémentée d'une unité (étape 303) et l'on procède à un test 304 pour déterminer si la valeur de x a dépassé le nombre N. Si c'est la cas, il est mis fin au processus de recherche de mots-clés et l'on passe au test 110 permettant de déterminer si le langage PostScript a été reconnu. Si le résultat du test 304 est négatif, on procède au test 305 pour déterminer si un mot-clé a été trouvé. Si la réponse est non, on retourne à l'étape 302. Sinon, si un mot-clé a été trouvé, on passe à une nouvelle phase de recherche d'un mot- clé à la position x, à l'étape 306 et on incrémente x d'une unité à l'étape 307 avant 13 2723457 d'effectuer un test 308 pour déterminer si la valeur de x a dépassé le nombre N. Si c'est le cas, il est mis fin au processus de recherche de mots-clés et l'on passe au test 110. Sinon, si le résultat du test 308 est négatif, on passe au test 309 pour déterminer si un mot-clé a été trouvé. Si la réponse est non, on retourne à l'étape 306. Sinon, si un mot-clé a été trouvé, on indique à l'étape 310 qu'un langage PostScript a été trouvé dans la position x-1 et il est mis fin au processus de recherche de mots-clés et de reconnaissance du langage PostScript par retour au test 110 de l'organigramme de la figure 1. On notera que lorsqu'un mot-clé a été trouvé au test 305, le fait de rechercher un autre mot-clé ou le même dans le reste du bloc de données (étapes 306 à 309) permet d'effectuer une vérification et de confirmer la reconnaissance du langage si un autre mot-clé ou le même a été détecté au test 309. Si le résultat du test 110 de la figure 1, destiné à déterminer si un langage à mots-clés tel que PostScript a été détecté, est positif, il est mis fin au processus de reconnaissance de langage. Si en revanche le résultat du test 110 est négatif, on procède à la phase 112 à la recherche d'un caractère de synchronisation, dans cet exemple significatif du langage "CALCOMP". Ce processus de recherche d'un langage à caractère de synchronisation, tel que le langage "CALCOMP" est illustré par l'organigramme de la figure 4. Au début du processus un indice y est initialisé à zéro (étape 400) et l'information "Nouveaux paramètres" est initialisée comme étant fausse (étape 401). Il est procédé alors à l'étape 402 de demande des paramètres "CALCOMP" n y et à un test pour déterminer si un caractère de synchronisation a été trouvé entre 0 et N. Si le résultat de ce test est négatif, la valeur de y est incrémentée d'une unité (étape 404) et un test est effectué pour déterminer s'il existe des paramètres "CALCOMP" n'y. Si c'est le cas, il y a retour à l'étape 402. Sinon, il est mis fin au processus et passage au test 114 de la figure 1, signifiant qu'aucun caractère de synchronisation n'a été trouvé pour les différents jeux de paramètres de "CALCOMP" déjà connus par le système. Si le résultat du test 403 est positif en position p, un test 406 est effectué pour déterminer si la configuration utilisée est une nouvelle configuration. Si ce n'est pas le cas, le paramètre B est indiqué comme étant le Bias usuel (étape 408), le Bias étant ici le décalage entre le caractère de synchronisation et le début du 14 2723457 message utile. Si en revanche, la configuration est nouvelle, le paramètre B est indiqué comme étant le Bias de cette configuration (étape 407). Après les étapes 407 et 408, un test 409 est effectué pour déterminer si le caractère p+1 est égal à B. Si ce n'est pas le cas, un test 410 est effectué pour déterminer si le caractère p+1 est inférieur à 127. Si ce n'est pas le cas, il est mis fin au processus et renvoi au test 114. Si le résultat du test 410 est positif, dans une étape 411 on indique que B est égal au caractère p+1 et l'étape suivante, comme lorsque le résultat du test 409 est positif, est constituée par le test 412 dans lequel on détermine si le caractère p+2 est supérieur ou égal à B. Si ce n'est pas le cas, il est mis fin au processus et l'étape suivante est le test 114. Si le résultat du test 412 est positif, on procède à un test 413 pour déterminer si le nombre de caractères de synchronisation est égal à 1 et si p est supérieur à 3. Si le résultat du test 413 est négatif, on procède à l'étape 415 à la mise à jour de la configuration actuelle et le Bias est mis à jour, puis à l'étape 416 on indique que le langage "CALCOMP" a été trouvé et il est mis fin au processus par passage au test 114. Si le résultat du test 413 est positif on vérifie s'il n'existe pas en amont du caractère de synchronisation une commande appartenant à un autre langage qui contient aussi ce caractère de synchronisation. Pour "CALCOMP" une telle commande appartenant à un autre langage pourrait être DT ou SM. Aussi, on procède à un test 414 pour déterminer si l'on a un caractère en p-2 égal à 'D' et un caractère en p-1 égal à 'T ou bien si l'on a un caractère en p-2 égal à 'S' et un caractère p-1 égal à 'M'. Si le résultat du test 414 est positif, on passe directement au test 114. En revanche, si le résultat du test 414 est négatif, on passe à l'étape 415 précitée. Le test 114 de la figure 1 permet de déterminer si un langage à caractère de synchronisation (langage "CALCOMP") a été reconnu. Si le résultat de ce test est positif, le processus de reconnaissance est arrêté. Sinon, c'est-à-dire si aucun caractère de synchronisation n'a été détecté, il est procédé à une étape 116 de recherche d'un langage utilisant des mnémoniques pour des positions comprises entre 0 et N-1. Ce processus 116 est décrit de façon détaillée sur les figures 5 et 6. Dans une étape initiale 500, on détermine la valeur n correspondant au nombre de langages à reconnaître et on initialise la position x à zéro. 2723457 Dans une étape 501 de recherche de mnémonique M, on initialise à zéro la valeur du paramètre a associé à chaque langage. On procède alors à une étude du mnémonique M pour le langage Lca dans une étape 502 dont l'organigramme détaillé est donné sur la figure 6. Dans une étape 502 d'étude de mnémonique M pour un langage L donné, on procède d'abord à un test 601 pour déterminer si M est le début d'un commentaire ou label. Si c'est le cas, on indique dans une étape 602 que M est un label ou un commentaire et l'on passe directement au test 505 de la figure 5. Si le résultat du test 601 est négatif, on procède à un test 603 pour déterminer si le mnémonique M appartient au langage L considéré. Si ce n'est pas le cas (mnémonique discriminant), on indique dans une étape 604 que le mnémonique M considéré n'appartient pas au langage considéré, qui est éliminé, et on passe directement au test 505 de la figure 5. Si le résultat du test 603 est positif, on procède au test 605 pour examiner si le mnémonique M est déterminant pour le langage L. Si c'est le cas, on indique dans une étape 610 que ce mnémonique M détermine le langage L et on passe au test 505 de la figure 5. Si le résultat du test 605 est négatif, on détermine dans le test 606 s'il faut compter le nombre de paramètres. Si le résultat du test 606 est négatif, on indique dans un test 607 qu'on ne peut rien dire avec ce mnémonique M et on passe au test 505 de la figure 5. Si le résultat du test 606 est positif, on passe à l'étape 608 de comptage des paramètres puis au test 609 pour déterminer si ces paramètres comptés sont caractéristiques pour le langage considéré L. Si c'est le cas, on passe à l'étape 610 indiquant que le mnémonique détermine le langage L. Sinon, on passe à l'étape 607 indiquant qu'on ne peut rien dire avec ce mnémonique M. Si l'on se reporte à nouveau à la figure 5, le test 505 consiste à déterminer si le langage La a été éliminé ou non à la suite de l'étape 502 (organigramme de la figure 6). Si la réponse est oui, dans une étape 506, n est décrémenté d'une unité et il est indiqué que le langage La est éliminé. On passe alors à l'étape 503 o aL est incrémenté d'une unité puis au test 504 déterminant si ac est supérieur à n. Si ce n'est pas le cas, on retourne à l'étape 502. Sinon, on passe à l'étape 515 dans laquelle la position x est incrémentée d'une unité, puis au test 516 pour déterminer si x est supérieur à N. Si ce n'est pas le cas, on passe au test 517 pour déterminer si n est nul. Si ce n'est pas le cas, on retourne à l'étape 501, sinon on passe à l'étape 16 2723457 518 dans laquelle il est indiqué que le langage n'a pas été trouvé et on passe au test 118 de la figure 1. Si le résultat du test 516 est positif, on passe au test 519 dans lequel on détermine si n=1. Si la réponse est oui, on passe à l'étape 520 indiquant qu'un langage a été trouvé puis au test 118. Si le résultat du test 519 est négatif, on passe au test 521 dans lequel on détermine s'il reste un langage tel que "HP-GL" ou "HP-GL2". Si la réponse est oui on passe à l'étape 522 indiquant que le langage est "HP-GL" (sinon "HP- GL2" aurait été vraisemblablement déjà reconnu) puis à l'étape 520 indiquant qu'un langage a été trouvé. Sinon, on passe à l'étape 518 indiquant qu'un langage n'a pas été trouvé. Si au test 505, on a déterminé que le langage Lac n'a pas été éliminé, on passe au test 507 dans lequel on examine si le langage Lac est déterminé. Si la réponse est oui, on procède à une vérification (étape 508) puis à un test 509 pour déterminer si la vérification est concluante. Si la réponse est non on passe à l'étape 503. Si la réponse est oui on passe à l'étape 510 indiquant que le langage Lac a été détecté en x puis à l'étape 118 de la figure 1. La vérification à l'étape 508 peut consister à examiner un nombre prédéterminé de caractères suivant le mnémonique détecté et à contrôler qu'ils correspondent à des mnémoniques ou des commandes du langage La. Si le résultat du test 507 est négatif, on passe au test 511 pour déterminer si le mnémonique M appartient au langage La. Si la réponse est non, on passe à l'étape 503. Si la réponse est oui, on passe au test 512 pour déterminer si un label ou un commentaire a été trouvé. Si la réponse est positive, on passe à l'étape 513 positionnant x à la fin du label ou du commentaire, et on passe à l'étape 503. Si le résultat du test 512 est négatif, on passe à l'étape 514 indiquant que le mnémonique M existe mais que l'on ne peut rien déterminer avec, puis à l'étape 515 déjà précédemment décrite. Un flux de données reçues par le traceur peut comporter des défauts et des bannières qui sont sans rapport avec l'impression à réaliser. Les défauts peuvent résulter de l'utilisation de générateurs de commandes qui ne respectent pas les normes définies pour certains langages et engendrent des commandes erronnées ou incomplètes. Celles-ci doivent être ignorées. Les bannières sont des données qui peuvent être envoyées par le système informatique, notamment s'il s'agit d'un réseau, et qui n'ont rien à voir avec le dessin à réaliser. Ces bannières doivent être 17 2723457 détectées pour être éliminées car, sur toute ou partie de leur longueur, le décodeur engendrerait des erreurs de syntaxe, on pourrait reconnaître des langages à tort. Le procédé de reconnaissance automatique de langage peut être utilisé pour détecter et éliminer des bannières ou défauts. Un exemple est illustré par les figures 7 et 8. Lorsque, au cours du décodage de données au moyen d'un module d'interprétation correspondant à un langage L1 précédemment reconnu, une erreur de syntaxe est détectée, le processus dont l'organigramme est représenté par la figure 7 peut être déclenché. On suppose qu'au moment de la détection d'une erreur de syntaxe on se trouve à la position Pl dans le flux de données et que l'origine de l'erreur se trouve dans une position Po déterminée par le circuit de décodage (étape initiale 700). * Le décalage entre ces positions est d1 = Pl-Po. En réponse à la détection d'une erreur de syntaxe, le processus de traitement du langage L1 est interrompu (étape 702) et un processus de reconnaissance automatique de langage est lancé (étape 704), celui-ci étant par exemple tel que décrit en référence à l'organigramme de la figure 8. L'organigramme de la figure 8 concerne un processus 800 de reconnaissance automatique d'un langage dans un bloc de N caractères (entre des positions Po et N-1). Dans une étape initiale 803, on attribue au paramètre P2 la valeur N et l'ancien langage est défini comme inconnu. On procède ensuite à l'étape 804 à une recherche de langage entre les positions Po et P2-1. Cette recherche peut être effectuée selon les processus automatiques définis dans la figure 1 et les figures 2 à 6. Un test 806 permet ensuite de déterminer si l'on a reconnu un langage L dans une position p. Si la réponse est positive on indique à l'étape 808 que l'ancien langage est constitué par le langage L et que la valeur du paramètre P2 est égale à la position p. On passe ensuite au test 809 destiné à déterminer si la valeur de P2 est nulle. Si ce n'est pas le cas, on retourne à l'étape 804 de recherche de langage entre Po et P2-1. Si en revanche la valeur de P2 est nulle, on passe à l'étape 810 dans laquelle on indique que le langage détecté est l'ancien langage en position p2. On passe alors au test 710 de la figure 7. Si la réponse au test 806 est négative, on procède à un test 807 pour 18 2723457 déterminer si l'ancien langage est inconnu. Si ce n'est pas le cas, on passe à l'étape 810 dans laquelle on indique que le langage détecté est l'ancien langage en position P2 et qu'il existe une bannière entre les positions Po et P2-1 si P2 est différent de zéro. Si en revanche la réponse au test 807 est positive, on passe à l'étape 813 qui indique simplement qu'il existe une bannière entre Po et p2-1, puis on passe à l'étape 815 de demande d'un autre bloc et on retourne à l'étape 804 de recherche de langage entre Po et P2-1. Si l'on se rapporte à la figure 7, le test 710 consiste à déterminer si le langage L1 précédemment traité est égal au langage L2 trouvé à l'étape 704 correspondant à l'organigramme de la figure 8. Si le résultat du test 710 est négatif on passe à l'étape 711 qui consiste à ne pas tenir compte des données entre les positions Po et p et à lancer le traitement du langage L2 dans la position p. Si le résultat du test 710 est positif on passe à l'étape 712 qui consiste à ignorer les données entre Po et p, et continuer le traitement du langage L1 dans la position correspondant au minimum de p et pl. Un exemple de processus de reconnaissance automatique mettant en oeuvre au moins une partie des organigrammes des figures 1 à 8 sera donné en référence aux figures 9A à 9F. Le processus de reconnaissance automatique est effectué sur un bloc de données à partir de la position po, par exemple un bloc de 1024 octets. Si ce processus échoue, aucun langage n'étant reconnu, au moins une partie avant du bloc de données est éliminée et le bloc est complété par le nombre d'octets nécessaire pris dans la suite du flux de données. On pourra par exemple conserver une partie terminale du bloc initial limitée à 128 octets. On réitère alors un processus de reconnaissance automatique de langage avec une nouvelle position d'origine po augmentée du nombre d'octets éliminés dans le bloc initial. Cette situation peut être due à la présence d'une bannière B longue, notamment plus longue que le bloc de données, comme montré par la figure 9A. Le processus de reconnaissance, initialement conduit sur le bloc b1 est reconduit sur le bloc b2. Si un langage L2 est reconnu, on examine si le décalage d2 entre la position P2, à laquelle le langage L2 est reconnu, et la position po est nulle. Si d2- est nul, on examine si le langage L2 est le même que le langage L1. Dans l'affirmative, si le décalage d1 est nul aussi, le processus de reconnaissance est recommencé en retournant à l'étape d'interruption du traitement. On se trouve 19 2723457 en effet alors dans une situation o il y a commutation de langage à la position po sans aucune bannière (figure 9B), et o le langage L1 n'a pas été reconnu après po. Par contre, si, le décalage d1 n'est pas nul, la reconnaissance à nouveau du langage L1 est confirmée et le traitement est repris avec le langage L1, à partir de la position Pl, c'est-à-dire après décalage de d1 octets après la position Po. On se trouve dans la situation o un défaut F se trouve entre les positions po et Pi (figure 9C), et o il est sauté avant de reprendre le traitement. Lorsque le test 710 indique que le nouveau langage reconnu L2 est différent du précédent L1, le traitement est repris avec le langage L2 à partir de la position po. On se trouve dans le cas o il y a commutation de langage entre L1 et L2, sans bannière (figure 9D). Lorsque le décalage d2 n'est pas nul, il est vérifié si des caractères figurant entre les positions po et P2 sont caractéristiques du langage L1. Dans la négative, le traitement est repris avec le langage L2, à partir de la position P2, c'est-à-dire en sautant les d2 octets compris entre les positions po et P2. On se trouve dans le cas o il y a commutation de langage après un défaut F ou une bannière B (figure 9E). Si, par contre, des caractères du langage L1 sont trouvés en amont de la position P2, le traitement avec le langage L1 est poursuivi à partir de la position P3 après laquelle ces caractères ont été trouvés, c'est-à- dire après avoir réalisé un décalage d3 pour sauter les caractères compris entre Po et p3. On se trouve dans une situation o un défaut F, une bannière B et une commutation de langage existent sur la longueur d'un bloc de données (figure 9F). Le traitement avec le langage L1 doit être poursuivi, après élimination du défaut, jusqu'à ce qu'une erreur de syntaxe signale la présence de la bannière B. 2723457 REVENDICATIONS 1. Procédé de reconnaissance automatique d'un langage dans lequel des données numériques sont reçues, comprenant la sélection d'un bloc de données parmi les données reçues et la recherche, dans ce bloc, d'éléments témoignant en faveur de la présence ou de l'absence d'un langage, caractérisé en ce que la reconnaissance est effectuée en recherchant plusieurs langages connus dans un ordre prédéterminé, en procédant, pour chaque langage, à la recherche d'au moins un élément caractéristique de ce langage dans le bloc de données. 2. Procédé selon la revendication 1, caractérisé en ce que l'ordre de recherche des langages est celui dans lequel la probabilité d'une erreur de reconnaissance est croissante. 3. Procédé selon l'une quelconque des revendications 1 et 2, caractérisé en ce que l'on recherche d'abord des langages ayant une signature particulière. 4. Procédé selon la revendication 3, caractérisé en ce que l'on recherche les langages ayant une signature particulière dans l'ordre de longueur de signature décroissante. 5. Procédé selon l'une quelconque des revendication 3 et 4, caractérisé en ce que l'on recherche ensuite des langages ayant des mots clefs ou des caractères de synchronisation particuliers. 6. Procédé selon l'une quelconque des revendications 3 à 5, caractérisé en ce que l'on recherche ensuite des langages utilisant des mnémoniques formés d'un nombre déterminé de caractères significatifs. 7. Procédé selon la revendication 6, caractérisé en ce que pour la reconnaissance automatique d'un langage parmi un groupe de plusieurs langages utilisant des mnémoniques formés d'un nombre déterminé de caractères, le procédé comprend notamment les étapes de: - enregistrement de mnémoniques appartenant aux langages du groupe, parmi lesquels des mnémoniques discriminants appartenant à un ou une partie des langages du groupe et n'appartenant pas aux autres langages du groupe; - comparaison aux mnémoniques enregistrés des ensembles de caractères faisant partie du bloc sélectionné et ayant même longueur que les mnémoniques enregistrés; et - lorsqu'à l'étape de comparaison, un ensemble de caractères est détecté 21 2723457 correspondant à un mnémonique discriminant, élimination du ou des langages au(x)quel(s) celui-ci n'appartient pas. 8. Procédé selon la revendication 7, caractérisé en ce que, lorsqu'à l'étape de comparaison un ensemble de caractères est détecté correspondant à un mnémonique appartenant à un seul langage du groupe de langages, ledit seul langage est réputé reconnu. 9. Procédé selon l'une quelconque des revendications 7 et 8 caractérisé en ce que: - pour chaque mnémonique appartenant à plusieurs langages du groupe et normalement suivi, dans un ensemble de données codées, d'un nombre prédéterminé de paramètres particulier à chacun de ces langages, le nombre prédéterminé de paramètres associé à ce mnémonique pour chaque langage est enregistré, et - lorsqu'à l'étape de comparaison, un ensemble de caractères est détecté correspondant à un mnémonique appartenant à plusieurs langages du groupe de langages et normalement suivi ou non de paramètres, le nombre de paramètres suivant le mnémonique détecté dans le bloc de données est compté et est comparé aux nombres de paramètres enregistrés pour ce mnémonique pour différents langages, et le langage pour lequel le nombre de paramètres enregistré est égal au nombre de paramètres compté est réputé reconnu. 10. Procédé selon l'une quelconque des revendications 8 et 9, caractérisé en ce que ledit langage réputé reconnu est confirmé après vérification que le bloc de données ne contient pas de paramètres et/ou de mnémoniques erronés au regard de ce langage, sur au moins une partie de sa longueur à partir du premier mnémonique détecté valide. 11. Procédé selon l'une quelconque des revendications 1 à 10, caractérisé en ce que la longueur de bloc de données effectivement utilisée pour rechercher la présence des langages, ou fenêtre d'observation, est variable. 12. Procédé selon la revendication 11, caractérisé en ce que la fenêtre d'observation a une largeur variable selon le type de langage recherché. 13. Procédé de sélection automatique d'un module d'interprétation pour le décodage de données numériques reçues, comprenant: la sélection d'un bloc de données parmi les données reçues; la reconnaissance automatique de langage par recherche, dans le bloc de données, d'éléments témoignant en faveur ou en défaveur d'un langage parmi plusieurs langages utilisables pour le codage des 22 2723457 données, et la sélection d'un module d'interprétation correspondant au langage reconnu; caractérisé en ce que la reconnaissance automatique de langage est réalisée selon un procédé conforme à l'une quelconque des revendications 1 à 12. 14. Procédé de sélection automatique d'un module d'interprétation pour le décodage de données numériques reçues, comprenant: la sélection d'un bloc de données parmi les données reçues; la reconnaissance automatique de langage par recherche, dans le bloc de données, d'éléments témoignant en faveur ou en défaveur d'un langage parmi plusieurs langages utilisables pour le codage des données, et la sélection d'un module d'interprétation correspondant au langage reconnu; caractérisé en ce que, lorsqu'une erreur de syntaxe est détectée par le module d'interprétation, le décodage est interrompu et le processus de reconnaissance automatique de langage est redémarré pour l'une au moins des étapes suivantes: a) détecter la présence d'un défaut dans les données reçues, et traiter ce défaut, b) détecter la présence d'une bannière dans les données reçues et traiter cette bannière, c) détecter une commutation de langage et sélectionner le module d'interprétation correspondant au nouveau langage reconnu. 15. Procédé selon la revendication 14, caractérisé en ce que la reconnaissance automatique de langage est effectuée selon l'une quelconque des revendications 1 à 12. 16. Procédé selon l'une quelconque des revendications 14 et 15, caractérisé en ce qu'un défaut ou une bannière sont détectés et peuvent être traités lorsque le langage reconnu après détection d'une erreur de syntaxe est le même que le langage précédent et qu'un décalage existe dans le flux de données numériques entre le début de l'erreur de syntaxe et l'origine à partir de laquelle le même langage a été à nouveau reconnu. 17. Procédé selon l'une quclconque des revendications 14 et 15, caractérisé en ce qu'une bannière est détectée et peut être traitée lorsque le langage reconnu après détection d'une erreur de syntaxe est différent du langage précédent et qu'un décalage existe dans le flux de données numériques entre le début de l'erreur de syntaxe et l'origine à partir de laquelle le nouveau langage a été reconnu, 23 2723457 et après vérification de l'absence de tout autre langage dans l'intervalle. 18. Utilisation d'un procédé selon l'une quelconque des revendications 13 à 17 pour le décodage de données numériques reçues par un dispositif d'impression ou d'affichage.