Gekleurde vierkantjes weergeven in AsciiDoc: Praktische gids
Gepubliceerd op 01 November 2025
Inleiding
Tijdens het opstellen van technische documentatie, bijvoorbeeld voor stijlgidsen of specificaties voor de gebruikersinterface, is het vaak nodig om kleurpaletten weer te geven. AsciiDoc, hoewel zeer krachtig voor documentatie, biedt geen native syntaxis om kleurstalen weer te geven. Dit artikel onderzoekt de problematiek en stelt een elegante oplossing voor op basis van HTML-injectie.
De problematiek
Gebruikskontekst
Stel je voor dat je de CSS-variabelen van een webapplicatiethema documenteert. Je hebt nodig:
-
Lijst de hexadecimale kleurcodes
-
Toon een visueel voorbeeld van elke kleur
-
De leesbaarheid van het brondocument behouden
-
Zorg voor compatibiliteit met statische sitegenerators zoals JBake
@startuml
left to right direction
skinparam packageStyle rectangle
actor "Technisch Schrijver" as writer
actor "Lezer" as reader
rectangle "AsciiDoc Documentatie" {
usecase "Kleurenpalet documenteren" as UC1
usecase "Hexadecimale code weergeven" as UC2
usecase "Kleur visualiseren" as UC3
usecase "Statische site genereren" as UC4
usecase "Documentatie raadplegen" as UC5
}
writer --> UC1
UC1 ..> UC2 : include
UC1 ..> UC3 : include
UC1 --> UC4
UC4 --> UC5
UC5 <-- reader
@enduml
De mogelijke benaderingen
Meerdere oplossingen kunnen worden overwogen om kleuren weer te geven in een AsciiDoc-document:
@startuml
skinparam componentStyle rectangle
package "Mogelijke oplossingen" {
component "Unicode-tekens" as unicode
component "Externe afbeeldingen" as images
component "Aangepaste CSS-rollen" as css
component "HTML-injectie" as html
}
package "Evaluatiecriteria" {
component "Eenvoud" as simple
component "Portabiliteit" as portable
component "Aanpasbaarheid" as custom
component "Onderhoud" as maintain
}
unicode -down-> simple : ✓
unicode -down-> portable : ✓
unicode -down-> custom : ✗
images -down-> simple : ✗
images -down-> portable : ✗
images -down-> custom : ✓
css -down-> simple : ~
css -down-> portable : ✗
css -down-> custom : ✓
html -down-> simple : ✓
html -down-> portable : ✓
html -down-> custom : ✓✓
html -down-> maintain : ✓
note right of html
Aanbevolen oplossing
end note
@enduml
Optie 1: Unicodekarakters
Het gebruik van Unicode-tekens zoals`■`(■) is eenvoudig maar beperkt:
* ■ --accent-color: #7952b3 (violet Bootstrap)
Limitations : Geen controle over de kleur, hangt af van het systeemlettertype.
Optie 2: Externe afbeeldingen
Maak PNG- of SVG-afbeeldingen voor elke kleur :
* image:colors/violet.svg[width=16] --accent-color: #7952b3
Beperkingen: Zwaar onderhoud, vermenigvuldiging van bestanden, geen automatische synchronisatie.
Option 3: Aangepaste CSS-rollen
Definieer CSS-klassen en pas ze toe via AsciiDoc-rollen :
* [.color-violet]##■## --accent-color: #7952b3
Limitaties : Vereist een extern stijlblad, vooraf gedefinieerde alle mogelijke kleuren.
Optie 4: HTML-injectie (gekozen oplossing)
Gebruik de macro``om HTML in te voegen met inline-stijlen:
* pass:[<span style="display:inline-block;width:1em;height:1em;
background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>]
--accent-color: #7952b3 (violet Bootstrap)
De oplossing: HTML-injectie met
Werkingsprincipe
De macro``AsciiDoc staat het invoegen van ruwe inhoud toe die niet zal worden geïnterpreteerd door de AsciiDoc-processor. Dit stelt ons in staat om rechtstreeks HTML in te voegen met inline CSS-stijlen.
@startuml participant "Document\nAsciiDoc" as doc participant "Processor\nAsciiDoc" as processor participant "pass:[] macro" as pass participant "HTML\nfinal" as html doc -> processor : Analyse document processor -> pass : Détecte pass:[] pass -> processor : Retourne HTML brut processor -> html : Insère sans transformation html -> html : Navigateur applique styles @enduml
Implementatie
Dit is de HTML-structuur om in te voegen :
<span style="display:inline-block;
width:1em;
height:1em;
background:#7952b3;
vertical-align:middle;
margin-right:0.5em">
</span>
Uitleg van de CSS-eigenschappen
| Eigendom | Functie |
|---|---|
|
Maakt het mogelijk om width/height in te stellen terwijl het in de inline-flow blijft |
|
Grootte van het vierkant ten opzichte van de lettergrootte (responsief) |
|
De kleur om weer te geven (variabel volgens uw behoeften). |
|
Lijn het vierkant uit met de aangrenzende tekst |
|
Afstand tussen het vierkant en de tekst |
volledig voorbeeld
Hier is een voorbeeld dat een themapalet documenteert:
== Thème Clair
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#f8f9fa;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em"></span>] --bg-primary: `#f8f9fa` (blanc cassé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em"></span>] --text-primary: `#212529` (noir très foncé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>] --accent-color: `#7952b3` (violet Bootstrap)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#61428f;vertical-align:middle;margin-right:0.5em"></span>] --accent-hover: `#61428f` (violet plus foncé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em"></span>] --card-bg: `#ffffff` (blanc)
Wie de volgende weergave produceert:
Thema Licht
-
--bg-primary:`#f8f9fa`(gebroken wit)
-
--text-primary:`#212529`(zeer donker zwart)
-
--accent-color:`#7952b3`(violet Bootstrap)
-
--accent-hover:`#61428f`(donkerder violet)
-
--card-bg:`#ffffff`(wit)
Optimalisaties en goede praktijken
Beheren de lichte kleuren
Voor zeer lichte kleuren (wit, zeer licht grijs), voeg een rand toe om ze zichtbaar te maken op een witte achtergrond :
<span style="display:inline-block;width:1em;height:1em;
background:#ffffff;border:1px solid #ccc;
vertical-align:middle;margin-right:0.5em"></span>
De grijze rand (border:1px solid #ccc) maakt het mogelijk om het witte vierkant op een witte achtergrond af te bakenen.
De grootte van de vierkanten aanpassen
U kunt de grootte van de vierkanten aanpassen aan uw behoeften:
* pass:[<span style="display:inline-block;width:1.5em;height:1.5em;background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>] Grand carré
* pass:[<span style="display:inline-block;width:0.8em;height:0.8em;background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>] Petit carré
Het gebruik van de eenheid`em`zorgt ervoor dat de vierkanten zich aanpassen aan de lettergrootte
Varianten maken
Voor specifieke behoeften kunt u verschillende vormen maken:
gekleurde cirkel
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#7952b3;border-radius:50%;vertical-align:middle;margin-right:0.5em"></span>] Cercle violet
Vierkant met gekleurde rand
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#ffffff;border:3px solid #7952b3;vertical-align:middle;margin-right:0.5em"></span>] Bordure violette
Architectuur van de oplossing
@startuml
package "Documentatieworkflow" {
[Document AsciiDoc\navec pass macro] as asciidoc
[Processeur JBake] as jbake
[Site HTML statique] as html
[Navigateur Web] as browser
}
asciidoc --> jbake : 1. Compilation
jbake --> html : 2. Génération
html --> browser : 3. Affichage
browser --> browser : 4. Rendu CSS
note right of asciidoc
Bevat de tags
`pass:[]` met inline HTML
end note
note right of jbake
Bewaar de HTML
in pass:[]
end note
note right of browser
Pas de stijlen toe
inline CSS
end note
@enduml
Voordelen en beperkingen
Voordelen
-
✓ Autonomie : Geen afhankelijkheid van externe bestanden
-
✓ Portabiliteit : Werkt met alle AsciiDoc-processors
-
✓ Synchronisation : De kleurcode staat direct in de HTML
-
✓ Flexibiliteit : Volledige aanpassing van de stijl
-
✓ Onderhoud: Eenvoudige wijziging van de hexadecimale code
-
✓ JBake-compatibiliteit : Werkt perfect met statische sitegenerators
Beperkingen
-
✗ Verbositeit : Herhaalde HTML-code in de AsciiDoc-bron
-
Bronlezbaarheid : Het brondocument is minder gestroomlijnd
-
✗ Accessibilité : Geen natieve alternatieve tekst (handmatig toe te voegen)
Verbetering van de toegankelijkheid
Om de vierkanten toegankelijk te maken voor schermlezers :
* pass:[<span role="img" aria-label="Couleur violet Bootstrap"
style="display:inline-block;width:1em;height:1em;background:#7952b3;
vertical-align:middle;margin-right:0.5em"></span>]
--accent-color: `#7952b3` (violet Bootstrap)
De attributen`role="img"` et `aria-label`stellen assistieve technologieën in staat om visuele inhoud te begrijpen en te beschrijven
Concreet voorbeeld: Themadocumentatie
Hier is een compleet voorbeeld dat meerdere thema’s documenteert :
= Guide des couleurs de l'application
== Thème Clair (`:root`)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#f8f9fa;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em"></span>] --bg-primary: `#f8f9fa` (blanc cassé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em"></span>] --text-primary: `#212529` (noir très foncé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>] --accent-color: `#7952b3` (violet Bootstrap)
== Thème Sombre (`[data-bs-theme="dark"]`)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em"></span>] --bg-primary: `#212529` (noir très foncé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #999;vertical-align:middle;margin-right:0.5em"></span>] --text-primary: `#ffffff` (blanc)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#0d6efd;vertical-align:middle;margin-right:0.5em"></span>] --accent-color: `#0d6efd` (bleu Bootstrap)
== Thème Contraste Élevé (`[data-bs-theme="high-contrast"]`)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#000000;vertical-align:middle;margin-right:0.5em"></span>] --bg-primary: `#000000` (noir)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #000;vertical-align:middle;margin-right:0.5em"></span>] --text-primary: `#ffffff` (blanc)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#00ff00;vertical-align:middle;margin-right:0.5em"></span>] --accent-color: `#00ff00` (vert vif)
Conclusie
De HTML-injectie via de macro``d’AsciiDoc biedt een elegante en pragmatische oplossing voor het weergeven van kleurstalen in de technische documentatie. Hoewel iets omslachtig, garandeert deze aanpak maximale draagbaarheid en vereenvoudigd onderhoud.
Deze techniek vereist geen externe configuratie, geen aanvullende stylesheet, en werkt onmiddellijk met JBake en alle standaard AsciiDoc-processors.
Zodra je je eerste gekleurde vierkant hebt gemaakt, hoef je alleen de HTML-code te kopiëren en te plakken en de hexadecimale code aan te passen om snel een volledig kleurpalet te maken.
Deze techniek kan worden uitgebreid naar andere use-cases die aangepaste visuele weergave vereisen: pictogrammen, badges, eenvoudige grafieken, of elk visueel element dat een nauwkeurige stijlcontrole vereist.
Bronnen
Artikel gepubliceerd op 2025-11-01