
Qu'est-ce qu'une lettre large ?
Une lettre large est un assemblage de caractères formant une seule grande lettre ou signe.
Exemple : ___ / | / /| | / ___ | /_/ |_|
Par ce procédé, une lettre est remplacée par le dessin d'elle même. Cette lettre est devenue un calligramme.
Le mot Calligramme a été créé par Guillaume Apollinaire, un grand poète français, dans le livre Calligrammes en 1918.

Lettres larges et xml
Les fontes à lettres larges peuvent être stockées dans des fichiers xml. Par exemple, FoxLet utilise le format xml pour stocker des fontes. Notamment, les signatures flx2a et flf2a peuvent être stockées ainsi.
La signature flf2a (FigLet) ne contient pas de paramètres d'opacité des caractères ni de couleurs. La signature flx2a (FoxLet) contient des paramètres d'opacité des caractères et de couleurs.
Etant donné que xml peut supporter ces deux signatures, leurs caractéristiques ont été détaillées sur cette page.
La compatibilité avec les Figfonts de FigLet a fait l'objet d'une étude très rigoureuse. Il était nécessaire de préserver l'apparence originale, quasiment historique, et d'ajouter de nouvelles possibilités. Ce point a nécessité énormément de temps de développement.

Structure xml
Les sous-caractères qui composent une fonte doivent tous être affichables. Ils doivent aussi faire partie du charset indiqué dans l'entête du fichier xml ("encoding").
Voici un exemple d'une fonte à signature flx2a enregistrée en xml.
<?xml version="1.0" encoding="ISO-8859-1"?>
<font xml:space="preserve">
<info>
<font-name>Name of the font</font-name>
<author>Author's name</author>
<year>2012</year>
<style>Outline</style>
<header>flx2a$ 5 6 59 32 12 0 512 153 #000000 #000000 ¨ @</header>
<signature>flx2a</signature>
<hardblank>$</hardblank>
<font-height>5</font-height>
<baseline>6</baseline>
<max-length>59</max-length>
<old-layout>32</old-layout>
<comment-lines>12</comment-lines>
<print-direction>0</print-direction>
<full-layout>512</full-layout>
<codetag-count>153</codetag-count>
<color-begin>#000000</color-begin>
<color-end>#000000</color-end>
<char-opacity>¨</char-opacity>
<char-delimiter>@</char-delimiter>
<comments><![CDATA[
<!-- Comments of the font are below... -->
]]<comments>
</info>
<characters><![CDATA[
UDC32
$@
$@
$@
$@
$@@
UDC33
_ @
|¨|@
|_|@
(_)@
@@
<!-- The others large letters are below... -->
]]></characters>
</font>
Les points suivants sont à noter :
- L'instruction "preserve" sert à conserver les espaces qui sont essentiels pour restituer correctement les grandes lettres. Les sauts de ligne seront conservés, permettant facilement des modifications dans un simple éditeur de texte ;
- le header de la fonte est contenu entre les tags "header" ;
- les éléments du header sont séparés entre leurs tags correspondants ;
- par suite, la double entrée du header donne un choix au programmeur, selon ce qu'il préfère utiliser : splittage du header, ou bien parsing des tags xml du header ;
- les tags "font-name", "author", "year", "style" donnent des informations qui pourront être lues aisément par un parser ;
- la fonte est placée entre les tags "characters". Chaque grande lettre est obligatoirement précédée par son unicode.
Avantages
L'archivage en xml autorise le tri des fontes par auteur, année de création et
style d'une fonte, sur les serveurs. Pour cela, il suffit d'utiliser
des parsers qui iront lire directement entre les tags xml.
xml autorise une séparation parfaitement définie de tous les
champs de données.
xml est un format de stockage universellement connu.
Des scripts de parsing sont disponibles sur Internet pour différents langages de programmation.
Remarque
Avec un navigateur Internet, les sauts de ligne et les espaces entre les grandes lettres ne seront pas visibles. Par contre, ils apparaîtront avec un éditeur de texte ou un éditeur xml.

Les champs des grandes lettres en xml
Chaque grande lettre sans exception est précédée par son unicode, comme ceci :
UDC32
$@
$@
$@
$@
$@@
UDC33
_ @
|¨|@
|_|@
(_)@
@@
Cela permet d'isoler facilement les lettres larges lors du parsing, puisqu'un délimiteur de début (trois lettres devant l'unicode) et un délimiteur de fin de ligne double (@@) sont disponibles. Le délimiteur de fin de ligne utilisé est indiqué dans le header de la fonte.
Codes de stockage de l'Unicode
UDC | unicode décimal |
UHX | unicode hexadécimal |
AHX | ansi hexadécimal |
HEX | hexadécimal |
OCT | octal |
Afin d'obtenir une forme standard, seul l'unicode décimal (UDC) est utilisé actuellement. Rien n'interdit de stocker l'unicode autrement, à condition qu'il soit précédé du code correspondant dans le tableau.
Remarque
Les grandes lettres sont stockées en bloc entre les tags "characters".
Cela évite d'augmenter la taille des fichiers plus que nécessaire,
XML étant un langage verbeux.

Font Header
L'ordre des données d'un header de Figfont a été, bien évidemment, conservé pour les raisons de compatibilité évoquées plus haut (en bleu). Une nouvelle partie (en vert) apporte des paramètres d'opacité et de couleur qui ajoutent de nouvelles possibilités.

Si une Figfont doit être archivée en xml, de nouveaux paramètres seront ajoutés (Begin color, End color, Char Opacity, Char Delimiter), même s'ils ne sont pas utilisés.
Si une fonte utilise plusieurs Char Delimiter, le Char Delimiter à indiquer dans le header, sera celui utilisé le plus souvent. Si deux Char Delimiter différents sont présents dans un nombre de grandes lettres identique, celui utilisé en premier sera à indiquer dans le header.
Compatibilité du header
Signature | La signature doit comporter 5 caractères. Les 3 premiers indiquent la version majeure, le 4e est la sous-version, le 5e est une option (le plus souvent "a") qui doit figurer même s'il n'est pas utilisé. |
Hardblank | Le Hardblank représente un espace insécable qui ne sera pas effacé lors de la compression de lignes. Par convention, le "$" est utilisé, mais il peut être remplacé par n'importe quel autre caractère affichable. |
Height | Hauteur des caractères mesurée en sous-caractères. Tous les caractères d'une fonte doivent avoir la même hauteur, cela incluant les espaces. |
Baseline | Nombre de lignes de sous-caractères depuis la Baseline jusqu'au sommet du plus grand caractère. C'est la hauteur d'un caractère sans le jambage des lettres minuscules (g, j, p, q). Cette valeur est indispensable lors de la compression verticale des lignes. |
Max Length | Longueur maximale du caractère le plus large + 2 à cause des signes de fin de ligne. Cette valeur pourra être plus grande que nécessaire pour plus de souplesse. |
Old Layout | Voir Layout Parameters |
Comment Lines | Nombre de lignes de commentaire utilisées pour décrire les particularités ou l'historique d'une fonte. |
Print Direction | Sens de lecture horizontal d'une fonte. 0 signifie une lecture de gauche à droite, 1 une lecture de droite à gauche. |
Full Layout | Voir Layout Parameters |
Codetag Count | Nombre de caractères non-requis contenus dans la fonte. C'est le nombre total de caractères de la fonte, moins 102. |
Begin Color (flx) | Couleur de début des caractères. |
End Color (flx) | Couleur de fin des caractères. Elle peut être égale à la couleur de début. Dans ce cas, aucun gradient ne sera initialisé par défaut. |
Char opacity (flx) | Caractère d'opacité des lettres. |
Char Delimiter (flx) | Le caractère de fin de ligne est indiqué dans le header : soit il s'agit d'un Char Delimiter unique pour tout le fichier, soit de celui le plus utilisé, soit de celui utilisé en premier, dans cet ordre de priorité. Dans la plupart des cas, le Char Delimiter est "@". |

Règles de compression des lignes
La compatibilité avec les règles du Smush des Figfonts a été conservée.
Le terme Spring (ressort) a été choisi à la place du terme Smush de FigLet, considéré comme intraduisible dans d'autres langues. Les règles restent numérotées selon l'ordre initial.
Le Spring agit dans le sens horizontal et vertical. Il peut avoir des valeurs positives ou négatives,
permettant la compression déjà existante (valeurs négatives),
ou bien un écartement variable des grandes lettres (valeurs positives).
Les 6 règles de compression horizontale (source)
Règle | Nom | Valeur | Description |
1 | EQUAL | 1 | Si deux caractères sont identiques, ils sont fusionnés dans le même caractère. Cela n'inclut pas le Hardblank. |
2 | LOWLINE | 2 | Un tiret bas ("_") sera remplacé, lors de la compression, par un sous-caractère parmi ceux-ci : "|", "/", "\", "[", "]", "{", "}", "(", ")", "<" or ">". |
3 | HIERARCHY | 4 | Une hiérarchie de 6 classes est utilisée : "|", "/\", "[]", "{}", "()", and "<>". Quand deux sous-caractères appartiennent à des classes différentes, celui de la dernière classe est utilisé lors de la compression. |
4 | PAIR | 8 | Fusionne deux caractères de parenthèses "[]" ou "][", "{}" or "}{", "()" or ")(" par une barre verticale ("|"). |
5 | BIG X | 16 | Fusionne "/\" en "|", "\/" en "Y", et "><" en "X". "<>" n'est pas fusionné par cette règle. |
6 | HARDBLANK | 32 | Fusionne deux hardblanks ensemble, en les remplaçant par un seul. |
Règle | Nom | Valeur | Description |
1 | EQUAL | 256 | Identique à la règle 1 horizontale. |
2 | LOWLINE | 512 | Identique à la règle 2 horizontale. |
3 | HIERARCHY | 1024 | Identique à la règle 3 horizontale. |
4 | MIDDLE LOW | 2048 | Fusionne les paires "-" et "_" en un seul "=". |
5 | SUPERSMUSHING | 4096 | Fusionne les lignes verticales en remplaçant les sous-caractères par des barres verticales ("|"), pour donner l'illusion qu'une lettre glisse par dessus l'autre. Les résultats obtenus sont, le plus souvent, décevants, car le supersmush n'est pas possible dans la majorité des cas. |
UNIVERSAL est une règle pratiquée par défaut, résolvant la plupart des options de fusion des caractères lors de la compression.

Layout Parameters
La compatibilité du Layout avec les Figfonts a pu être conservée.
Old_Layout : valeurs admises de -1 à 63 (Source)
-1 | Full-width layout par défaut : pas de compression horizontale. |
0 | Horizontal fitting (kerning) : pas de compression horizontale (kerning), pas de compression verticale (fitting). |
1 | Applique la compression horizontale règle 1 par défaut |
2 | Applique la compression horizontale règle 2 par défaut |
4 | Applique la compression horizontale règle 3 par défaut |
8 | Applique la compression horizontale règle 4 par défaut |
16 | Applique la compression horizontale règle 5 par défaut |
32 | Applique la compression horizontale règle 6 par défaut |
Full_Layout : valeurs admises 0 à 32767 (Source)
1 | Applique la compression horizontale règle 1 par défaut |
2 | Applique la compression horizontale règle 2 par défaut |
4 | Applique la compression horizontale règle 3 par défaut |
8 | Applique la compression horizontale règle 4 par défaut |
16 | Applique la compression horizontale règle 5 par défaut |
32 | Applique la compression horizontale règle 6 par défaut |
64 | Pas de compression horizontale par défaut (kerning) |
128 | Compression horizontale par défaut (écrase 64) |
256 | Applique la compression verticale règle 1 par défaut |
512 | Applique la compression verticale règle 2 par défaut |
1024 | Applique la compression verticale règle 3 par défaut |
2048 | Applique la compression verticale règle 4 par défaut |
4096 | Applique la compression verticale règle 5 par défaut |
8192 | Pas de compression verticale par défaut (fitting) |
16384 | Vertical smushing by default (écrase 8192) |
Remarque
Old Layout gère la compression horizontale. Full Layout peut gérer à la fois la compression
horizontale et verticale. Les deux peuvent être employés ensemble dans une fonte.
Si tel est le cas, utilisez Old Layout pour indiquer la compression horizontale d'une fonte,
et Full Layout pour indiquer la compression verticale d'une fonte.

Hardblank
Le Hardblank des Figfonts a été conservé, toujours pour des raisons de compatibilité.
Lors de la compression horizontale, le harblank est un espace insécable que la fusion de caractères ne fera pas disparaître. Un espace normal est considéré comme vacant, ce qui fusionne les lettres comme dans l'exemple ci-dessous.
______ ______ / ____/ / ____/ / __/ ______ ==> / __/______ / /___ /_____/ / /__/_____/ /_____/ /_____/
Le tiret se trouve fusionné avec le "E": ce n'est pas bon. Dans le cas d'un "C-", celui-ci pourrait être confondu avec un "G", à cause du tiret placé trop près de la lettre. L'utilisation d'un harblank résoud le problème comme ceci :
______ ______ / ____/ / ____/ / __/ $______ ==> / __/ ______ / /___ /_____/ / /___/_____/ /_____/ /_____/
Pour arriver à ce résultat, le hardblank doit être placé ainsi dans la fonte :
UDC67 ______@ / ____/@ / __/ $ @ / /___ @ /_____/ @
Lors de l'affichage, le Hardblank sera remplacé par un espace. Par conséquent, il ne sera plus visible.

Opacité des caractères
La signature flx indique que l'opacité des caractères est gérée quand une lettre en recouvre une autre, lors de la compression verticale. L'opacité des caractères est une caractéristique fondamentale de la signature flx.
Par convention, le sous-caractère d'opacité conseillé est un tréma ("¨").
Lorsque le caractère d'opacité n'est pas présent, on obtient ceci (notez le haut du "l" en 2e ligne, traversé par la lettre en dessous): __ __ __ __ / / / /___ / // /____ / /_/ // _ \ / // // __ \ / __ // __// // // /_/_/ __ __ /_/ /_/ \___//_//_/_\___///____/ / / / | | /| / // __ \ / ___// // __ / / / | |/ |/ // /_/ // / / // /_/ / /_/ |__/|__/ \____//_/ /_/ \__,_/ (_) L'opacité des caractères permet de résoudre ce problème : __ __ __ __ / / / /___ / // /____ / /_/ // _ \ / // // __ \ / __ // __// // // /_/_/ __ __ /_/ /_/ \___//_//_/_\___/ /____/ / / / | | /| / // __ \ / ___// // __ / / / | |/ |/ // /_/ // / / // /_/ / /_/ |__/|__/ \____//_/ /_/ \__,_/ (_) Pour obtenir ce résultat, le "l" contient le caractère d'opacité ("¨") aux endroits à opacifier, comme ceci : UDC108 __@ /¨/@ /¨/ @ /¨/ @ /_/ @ @@ |
Avantages
Les grandes lettres ne sont plus traversées lors de la compression verticale des lignes.
La compression verticale des lignes sur plusieurs niveaux s'en trouve facilitée.
Remarque
Le caractère d'opacité concerne uniquement les lettres à contours (style Outline)
qui contiennent des espaces à l'intérieur. Les espaces
internes de la lettre sont remplis par le caractère d'opacité.

Caractères requis dans une fonte
Pour des raisons de compatibilité, les caractères requis dans une fonte sont les suivants :
32 (blank/space) 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~(source) |
Il est à conseiller qu'une fonte contienne cette liste de caractères. Des caractères spéciaux suivants peuvent être ajoutés à cette liste :
196 (umlaut "A" -- deux points sur la lettre "A") 214 (umlaut "O" -- deux points sur la lettre "O") 220 (umlaut "U" -- deux points sur la lettre "U") 228 (umlaut "a" -- deux points sur la lettre "a") 246 (umlaut "o" -- deux points sur la lettre "o") 252 (umlaut "u" -- deux points sur la lettre "u") 223 ("ess-zed") ___ @ /¨_¨\@ Ess-zed |¨|/¨/@ with |¨|\¨\@ Char-Opacity |¨||_/@ |_| @ |

Ajouter des lettres dans une fonte
Il est possible d'ajouter d'autres lettres appartenant à
d'autres alphabets. Dans ce cas, vous devez indiquer
le code Unicode de ces lettres au dessus de chacune
d'elles, comme ceci :
UDC188 _ __ @ /¨| /¨/ _ @ |¨|/¨/¨|¨| @ |_/¨/|_¨¨_|@ /_/ |_| @ @@
L'unicode de chaque grande lettre doit précéder celle-ci, sans exception.

Support de l'Unicode
L'étendue de caractères autorisée est de 65 536 caractères répartis de -2 147 483 648 jusqu'à +2 147 483 647. En pratique, les codes 32 jusqu'à 255 sont, le plus fréquemment, utilisés dans les fontes à grandes lettres.
L'umlaut est supporté.
La Table de caractères de FoxLet permet d'accéder à la totalité des lettres d'une fonte, même dans le cas de cns.flf qui contient plus de 13 000 caractères.

Foxfiles ou Foxfonts ?
Les fichiers de lettres larges en XML pour FoxLet ont été baptisés "FoxLet files" (et non pas "Foxfiles" ni "Foxfonts" !).

Sources
Les informations concernant les Figfonts ont été écrites d'après notre étude de la documentation Figfonts. La documentation Figfonts est fournie dans la distribution Figlet.
_____ .__ .__ __ .__ ___. __ ._. / _ \ | | | | _/ |_| |__ ____ \_ |__ ____ ______/ |_ | | / /_\ \| | | | \ __\ | \_/ __ \ | __ \_/ __ \ / ___/ __\ | | / | \ |__ |__ | | | Y \ ___/ | \_\ \ ___/ \___ \ | | \| \____|__ /____/____/ |__| |___| /\___ > |___ /\___ >____ >|__| __ \/ \/ \/ \/ \/ \/ \/
FoxLet Team & FoxLet author, 26/11/2012.