Увод

Pri izradi tehničke dokumentacije, posebno za vodiče po stilu ili specifikacije korisničkog interfejsa, često je potrebno prikazati palete boja. AsciiDoc, iako je vrlo moćan za dokumentaciju, ne nudi native sintaksu za prikaz uzoraka boja. Ovaj članak istražuje problematiku i predlaže elegantno rešenje zasnovano na HTML injekciji.

проблематика

Контекст употребе

Pretpostavimo da dokumentirate CSS promenljive teme web aplikacije. Treba vam :

  1. Излистати хексадецималне кодове боја

  2. Prikazati vizuelni pregled svake boje

  3. Задржавати читаљивост изворног документа

  4. Osigurati kompatibilnost sa generatorima statičkih sajtova kao što je JBake

@startuml
left to right direction
skinparam packageStyle rectangle

actor "Tehnički pisac" as writer
actor "Čitač" as reader

rectangle "Документација AsciiDoc" {
  usecase "Документисати бојну палету" as UC1
  usecase "Приказати хексадецимални код" as UC2
  usecase "Визуализовати боју" as UC3
  usecase "Генерисати статични сајт" as UC4
  usecase "Погледајте документацију" as UC5
}

writer --> UC1
UC1 ..> UC2 : include
UC1 ..> UC3 : include
UC1 --> UC4
UC4 --> UC5
UC5 <-- reader
@enduml

Mogući pristupi

Размишља се о неколико решења за приказивање боја у документу AsciiDoc:

@startuml
skinparam componentStyle rectangle

package "Могућа решения" {
  component "Unicode znakovi" as unicode
  component "Spoljne slike" as images
  component "Персонализоване улоге CSS" as css
  component "Injekcija HTML" as html
}

package "Kriteriji vrednovanja" {
  component "Простота" as simple
  component "Преносливост" as portable
  component "персонализација" as custom
  component "Održavanje" 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
  Solution recommandée
end note
@enduml

Опција 1 : Юникод карактери

Koristenje Unicode karaktera kao`■`(■) je jednostavna ali ograničena :

* ■ --accent-color: #7952b3 (violet Bootstrap)

Ograničenja : Nema kontrole nad bojom, zavisi od sistema fonta.

Опција 2 : спољне слике

Kreirajte PNG ili SVG slike za svaku boju:

* image:colors/violet.svg[width=16] --accent-color: #7952b3

Limitations : Teško održavanje, množenje fajlova, nema automatske sinhronizacije.

Opcija 3 : prilagođene CSS uloge

Definisati CSS klase i primenjivati ih putem AsciiDoc uloga:

* [.color-violet]##■## --accent-color: #7952b3

Ograničenja : Zahtijeva vanjski stil, prethodno definisanje svih mogućih boja.

Опција 4 : убацивање HTML (одбрано решење)

Користити макрос``за убацивање HTML-а са стилови у линији :

* 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)

Решење: HTML инжекција са

princip radnje

Makro``AsciiDoc omogućava uvođenje sirovog sadržaja koji neće biti interpretiran AsciiDoc procesorom. To nam omogućava direktno ubacivanje HTML sa inline CSS stilovima.

@startuml
participant "Документ\nAsciiDoc" as doc
participant "Процесор
AsciiDoc" as processor
participant "pass:[] macro" as pass
participant "HTML
konačno" 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

Implementacija

Evo HTML strukture za ubaciti :

<span style="display:inline-block;
             width:1em;
             height:1em;
             background:#7952b3;
             vertical-align:middle;
             margin-right:0.5em">
</span>

Објашњење својстава CSS

Svojstvo funkcija

display:inline-block

Omogućava definiranje širine/visine, ostajući u inline toku

width:1em; height:1em

Veličina kvadrata relativna prema veličini fonta (responsive)

background:#7952b3

Boja koja se prikazuje (varijabilna prema vašim potrebama)

vertical-align:middle

Упореди квадрат са суседим текстом

margin-right:0.5em

Razmak između kvadrata i teksta

Комплетни пример

Ovo je primer koji dokumentuje paletu teme:

== 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)

Ko daje sledeći izlaz :

svetla tema

  • --bg-primary:`#f8f9fa`(ebež)

  • lozinka:[<span style="display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em"></span>] --text-primary:`#212529`(vrlo tamno crno)

  • --accent-color:`#7952b3`(ljubičasta Bootstrap)

  • --accent-hover:`#61428f`(tamniji ljubičast)

  • --card-bg:`#ffffff`(бел)

Optimizacije i najbolje prakse

upravljaj svetle boje

Za veoma svetle boje (bele, veoma svetle sive), dodajte rub za da budu vidljivi na beloj pozadini :

<span style="display:inline-block;width:1em;height:1em;
background:#ffffff;border:1px solid #ccc;
vertical-align:middle;margin-right:0.5em"></span>

Siva ruba (border:1px solid #ccc) омогућава обележивање белог квадрата на белој подложи.

Prilagodi veličinu kvadrata

Možete prilagoditi veličinu kvadrata po vašim potrebama:

* 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é

Korišćenje jedinice`em`Гарантује да се квадрати прилагођавају величини фонта.

Kreirati varijante

Za specifične potrebe, možete da kreirate različite oblike :

obojen krug

* 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

Kvadrat sa obojenom rubom

* 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

Архитектура решења

@startuml
package "Radni tok dokumentacije" {
  [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
  Contient les balises
  pass:[] avec HTML inline
end note

note right of jbake
  Préserve le HTML
  dans pass:[]
end note

note right of browser
  Applique les styles
  inline CSS
end note
@enduml

Prednosti i ograničenja

Предности

  • ✓ Autonomija : Nema ovisnosti o vanjskim datotekama

  • Преносност : Radi sa svim procesorima AsciiDoc

  • Синхронизација : Boijski kod je непосредno u HTML

  • ✓ Fleksibilnost : Potpuna prilagođavanje stila

  • ✓ Održavanje : Jednostavna izmena heksadekadarnog koda

  • ✓ Судирање JBake : Сасвим ради са генераторима статичних сајтова

Ograničenja

  • visložitost : Ponavljajući HTML kod u izvoru AsciiDoc

  • ✗ Izvorna čitljivost : Izvorni dokument je manje obrađen

  • Приступност : Ниједан нативни алтернативни текст (да додате ручно)

Unapređenje pristupačnosti

Da bi kvadrati bili dostupni čitaocima ekrana:

* 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)

Atributi`role="img"` et `aria-label`omogućavaju tehnologijama podrške da razumeju i opišu vizuelni sadržaj.

Konkreatan primer: Dokumentacija tema

Ovo je kompletan primer dokumentujući više tema:

= 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)

Zaključak

HTML injekcija kroz makro``AsciiDoc nudi elegantno i praktično rešenje za prikaz uzoraka boje u tehničkoj dokumentaciji. Iako je malo rečniva, ovaj pristup osigurava maksimalnu prenosivu i pojednostavljeno održavanje.

Ova tehnika ne zahteva nikakvu spoljušnju konfiguraciju, nikakvu dodatnu stilsku listu, i odmah radi sa JBake-om i svim standardnim procesorima AsciiDoc-a.

Jednak, nakon što ste napravili svoj prvi obojen kvadrat, dovoljno je kopirati i zalijepiti HTML kod i promeniti heksadekadni kod da biste brzo stvorili kompletnu paletu.

Ova technika se može proširiti na druge slučajeve upotrebe koji zahtevaju prilagođeno vizuelno renderovanje: ikonice, odličke, jednostavni grafikoni, ili svaki vizuelni element koji zahteva preciznu kontrolu stila.

Повезани чланци