Aller au contenu

Le dessin

tilttek/heraldry

Svg\SvgRenderer::render() écrit un écu comme un élément <svg> :

use Tilttek\Heraldry\Language;
use Tilttek\Heraldry\ShieldShape;
use Tilttek\Heraldry\Svg\SvgRenderer;

$svg = new SvgRenderer()->render($coat, ShieldShape::French, Language::French, title: 'Armoiries de la maison Corbin', id: 'corbin');

Ce que l'image contient

Des formes dessinées pour le paquet sur un écu de 200 sur 240 unités : quatre contours — Heater, French, Iberian, Lozenge —, les partitions, les pièces, les meubles, les brisures, et des motifs pour l'hermine et le vair. Il n'y a aucune image matricielle, aucune police, aucun texte hors le titre et la description, aucun script, aucune feuille de style et aucune référence hors de l'image. Le champ et tout ce qui s'y trouve sont découpés selon le contour, puis le contour est dessiné.

Accessibilité

La racine porte role="img" et aria-labelledby, qui nomment son <title> et sa <desc>. Le titre est celui qu'on a donné, ou « Coat of arms » / « Armoiries » ; la description est le blason dans la langue demandée. Le titre est échappé, et les caractères de contrôle autres que la tabulation et les sauts de ligne sont omis.

Identifiants

Chaque id commence par le préfixe donné — une lettre, puis jusqu'à 47 lettres, chiffres, - ou _ —, ou par arms- et 12 chiffres hexadécimaux dérivés des armes et de la forme. Plusieurs images partagent une page sans se heurter ; donnez à chacune son préfixe quand les mêmes armes paraissent deux fois. Tout autre préfixe lance Exception\InvalidDrawing.

Palette

Svg\Palette donne la couleur de chaque métal et de chaque couleur, en #rrggbb, et des contours ; une clé omise garde sa valeur par défaut. L'hermine est dessinée en mouchetures de sable sur argent, le vair en clochettes d'argent et d'azur, dans les couleurs de la palette.

$renderer = new SvgRenderer(new Palette(['azure' => '#2255aa'], outline: '#222222'));

Assainir

L'image passe phil/svg-sanitizer intacte sous une politique qui garde les identifiants tels qu'écrits et permet les deux attributs d'accessibilité, ce que les tests vérifient sur des centaines d'écus générés :

use Phil\SvgSanitizer\Policy;
use Phil\SvgSanitizer\SvgSanitizer;

$sanitizer = new SvgSanitizer(new Policy()->withIdPrefix(null)->withAttributes('role', 'aria-labelledby'));
$sanitizer->sanitize($svg)->isClean();   // true

Sous la politique par défaut, l'assainisseur retire role et aria-labelledby et préfixe les identifiants ; l'image se dessine toujours, et son <title> la nomme toujours.