
Markdown til HTML og tilbake: en konverter med direkte forhåndsvisning
Lim inn Markdown, så ser du den ferdige siden med ren HTML ved siden av. Lim inn HTML, så får du Markdown som duger til en README eller et blogginnlegg. Begge retninger kjører i nettleseren din: teksten sendes ingen steder og lagres ingen steder.
.md her — filen leses lokalt. CommonMark støttes i vanlig omfang pluss GFM-utvidelsene: tabeller, gjennomstreking og oppgavelister.
Lim inn Markdown over — HTML-en vises her.
.html her — filen leses lokalt. Tolkingen går via DOMParser, så den fungerer både med et utdrag og med en hel side.
Lim inn HTML over — Markdown vises her.
Teksten forlater ikke nettleseren din — konverteringen skjer lokalt, uten at noe sendes til en server.
Hva som nøyaktig støttes
På Markdown-siden — CommonMark i vanlig omfang pluss GFM-utvidelsene: overskrifter med skigarder og med understreking, avsnitt, vannrette linjer; punktlister, nummererte og nøstede lister, i både tett og løs form; oppgavelister i hakeparenteser; sitater, også med lat linjefortsettelse; inngjerdet kode med språknavn og innrykket kode; GFM-tabeller med kolonnejustering; lenker, bilder, autolenker og referanselenker nederst i dokumentet; fet skrift, kursiv, gjennomstreking, kode i tekst, escapede tegn og hardt linjeskift. På HTML-siden går tolkingen via nettleserens egen DOMParser, så både et utdrag og en hel side med head fungerer. Tabeller med sammenslåtte celler lar seg ikke overføre til Markdown — den syntaksen finnes ikke der, så de forblir tagger, og verktøyet sier fra. Hva som bevisst mangler: syntaksfarging i kodeblokker, fotnoter, formler og direktiver fra bestemte statiske nettstedsgeneratorer. Det er ikke lenger Markdown, men dialekten til ett enkelt verktøy.
Ett linjeskift: to ulike Markdown
Den vanligste kilden til avvik mellom konvertere er nettopp det enkle linjeskiftet inne i et avsnitt. Etter CommonMark er det et vanlig mellomrom: to linjer limes sammen til ett avsnitt. Slik oppfører Pandoc, dokumentasjonsgeneratorer og de fleste statiske nettsteder seg. GitHub gjør det motsatt i kommentarer, saksbeskrivelser og gjennomganger: hvert skift blir en br-tagg. Nettopp derfor klumper en tekst som så bra ut i en sak, seg til ett eneste avsnitt når den flyttes til en README. Avkrysningsboksen «Et enkelt linjeskift er et br» veksler mellom disse to vanene. Som standard gjelder CommonMark-regelen.
Hvorfor forhåndsvisningen ikke viser alt som finnes i HTML-en
Etter spesifikasjonen tillater Markdown HTML inne i seg selv. Det er praktisk og betyr samtidig at enhver innlimt tekst kan inneholde kjørbar kode. Populære nettvisere legger resultatet i innerHTML som det er. Biblioteket marked som de bygger på, har fra versjon fire ingen innebygd sanering i det hele tatt — en script-tagg fra andres Markdown kjører rett og slett der. Her bygges forhåndsvisningen av DOM-noder etter en hviteliste: script, iframe, object, hendelsesbehandlere av typen onclick og lenker med skjemaet javascript: kommer ikke inn, og listen over det bortklippede vises under resultatet. I fanen «HTML-kode» ser du hele utdataen uten kutt — det er tekst, ikke en side, og den lar seg ikke kjøre. HTML fra kilden kan bare nå forhåndsvisningen når du selv har slått på den tilhørende avkrysningsboksen. Som standard escapes tagger og vises som tekst.
