# Markdown

Markdown é uma linguagem de marcação simples originalmente criada por John Gruber e Aaron Swartz. Markdown converte seu texto em HTML válido. Markdown é frequentemente usado para formatar arquivos README, para escrever mensagens em fóruns de discussão online e para criar rich text usando um editor de texto simples .

## História

Em 2004, John Gruber criou a linguagem Markdown em colaboração com Aaron Swartz na sintaxe, buscando possibilitar a escrita em XHTML (ou HTML) estruturalmente válido partindo de textos simples.
Seu principal objetivo quanto ao design é a legibilidade, característica que normalmente é afetada em linguagens de marcação, tais como Rich Text Format (RTF) ou HTML, pela presença de tags ou instruções de formatações “explícitas”. Em Markdown as formatações são muito mais sutis, essa inspira-se nas convenções existentes para marcar um texto simples ou e-mail, apesar de ser baseada em linguagens de marcação anteriores, como setext, Textile e reStructuredText.
Gruber escreveu um script PerlMarkdown.pl , que converte a entrada de texto marcada em XHTML ou HTML válido e bem formado e substitui os colchetes angulares ' <' ' >' e o e comercial ' &' por suas referências de entidade de caractere correspondentes . Ele pode assumir o papel de um script independente, um plugin para Blosxom ou um Movable Type , ou de um filtro de texto para BBEdit .
Markdown foi reimplementado por outros, por exemplo, em um módulo Perl disponível no CPAN ( Text::Markdown) e em uma variedade de outras linguagens de programação. Ele é distribuído sob uma licença estilo BSD e está incluído ou disponível como um plugin para vários sistemas de gerenciamento de conteúdo .
Variações da linguagem Markdown são amplamente utilizada por sites como GitHub , Bitbucket , Reddit , Diaspora , Stack Exchange , OpenStreetMap e SourceForge para facilitar a comunicação e discussão entre usuários; também é muito utilizada em arquivos do tipo README.

## Padronização

Não há um padrão definido para Markdown, além da implementação original de John Gruber, que alguns consideram obsoleta. Isso é causado pela fragmentação, porque diferentes pessoas escrevem suas próprias variantes do Markdown para corrigir detalhes ou adicionar recursos ausentes, leia alguns desses exemplos a seguir:

### CommonMark

A partir de 2012, um grupo de pessoas, incluindo Jeff Atwood e John MacFarlane, lançou o que Atwood caracterizou como um esforço de padronização. Um site da comunidade que, hoje, visa "documentar várias ferramentas e recursos disponíveis para autores e desenvolvedores de documentos, bem como implementadores de várias implementações de markdown". Em setembro de 2014, Gruber se opôs ao uso de "Markdown" em nome deste esforço e foi rebatizado como um novo dialeto chamado CommonMark. CommonMark.org publicou várias versões de uma especificação, implementação de referência e suíte de teste.

### GitHub Flavored Markdown (GFM)

Em 2017, o GitHub lançou uma especificação formal de seu GitHub Flavored Markdown (GFM) que é baseado no CommonMark (Uma especificação fortemente definida e altamente compatível de Markdown). É um superconjunto estrito do CommonMark, seguindo sua especificação exatamente, exceto para tabelas, tachado, autolinks e listas de tarefas, que GFM adiciona como extensões. GitHub também mudou o analisador usado em seus sites, o que exigiu que alguns documentos fossem alterados. Por exemplo, o GFM agora requer que o símbolo hash que cria um título seja separado do texto do título por um caractere de espaço. No entanto, muito da linguagem original é aceito pelo site.

### Markdown Extra

Markdown Extra é uma linguagem de marcação leve baseada em Markdown implementado em PHP (originalmente), Python e Ruby . Ele adiciona recursos não disponíveis com a sintaxe Markdown simples. Markdown Extra é compatível com alguns sistemas de gerenciamento de conteúdo , como, por exemplo, Drupal e TYPO3 .
No MediaWiki, ele é implementado na extensão de função do analisador MarkdownExtraParser sem manutenção.
Markdown Extra adiciona os seguintes recursos ao Markdown:
* marcação de marcação dentro de blocos HTMLGitHub Flavored Markdown
* elementos com atributo id / class
* "blocos de código protegidos" que abrangem várias linhas de código
* tabelas
* listas de definição
* notas de rodapé
* abreviações

## Exemplos de sintaxe

Esta não é uma lista completa, veja a documentação para todas as informações. Caracteres que possam ser interpretados pelo markdown são ignorados se uma barra invertida é colocada antes deles; por exemplo, a sequência '\*' mostraria um asterisco ao invés de começar um texto com ênfase, veja a lista a seguir:
* Markdown fornece escapes de barra invertida para os seguintes caracteres:
* \ Barra invertida
* ` Crase
* * Asterisco
* _ Sublinhado
* { } Chaves
* [ ] Colchetes
* ( ) Parênteses
* + Sinal de adição
* - Sinal de subtração
* . Ponto
* ! Sinal de exclamação
| Texto usando sintaxe Markdown | HTML correspondente produzido por um processador Markdown | Texto visualizado em um navegador |
| Cabeçalho ========= Sub-Cabeçalho ------------- Sintaxe alternativa: # Cabeçalho de primeiro nível #### Cabeçalho de quarto nível Parágrafos são separados por uma linha em branco Dois espaços no fim de uma linha produzem uma quebra de linha. | <h1>Cabeçalho</h1> <h2>Sub-cabeçalho</h2> Sintaxe alternativa: <h1>Cabeçalho de primeiro nível</h1> <h4>Cabeçalho de quarto nível</h4> <p>Parágrafos são separados por uma linha em branco</p> <p>Dois espaços no final de uma linha produzem <br /> uma quebra de linha</p> | Cabeçalho Sub-cabeçalho Cabeçalho de quarto nível Parágrafos são separados por uma linha em branco. Dois espaços no final de uma linha produzem uma quebra de linha |
| Texto com ênfase: *Enfatizado - itálico* **Fortemente enfatizado - negrito** | <p>Texto com ênfase:</p> <em>Enfatizado - itálico</em> <strong>Fortemente enfatizado - negrito</strong> | Texto com ênfase: Enfatizado - itálico Fortemente enfatizado - negrito |
| Lista não ordenada: * item * item Lista ordenada: 1. item 2. item | <p>Lista não ordenada:</p> <ul> <li>item</li> <li>item</li> </ul> <p>Lista ordenada:</p> <ol> <li>item</li> <li>item</li> </ol> | Lista não ordenada: item item Lista ordenada: item item |
| Links: [Texto do link](http://example.com/ "Propriedade title, opcional") Imagem: ![Texto da propriedade alt](/pasta/da/img.jpg "Propriedade title") Citações: > Esse texto será envolto pelo elemento HTML blockquote. Código: `código` | <p>Links:</p> <a href="http://example.com/Propriedade title, opcional">Texto do link</a> Imagem: <p><img alt="Texto da propriedade alt" title="Propriedade title" src="/pasta/da/img.jpg " /></p> Citações: {{Quote| <p>Esse texto será envolto pelo elemento HTML blockquote.</p> }} <p><code>codigo</code></p> | Links: An example. Imagem: Citações: Esse texto será envolto pelo elemento HTML blockquote. Código: código |

### Implementações

Enquanto Markdown é uma linguagem de marcação mínima e é lida e editada com um editor de texto normal, existem editores especialmente projetados que visualizam os arquivos com estilos, que estão disponíveis para todas as plataformas principais. Muitos editores de texto e código de uso geral possuem plug-ins de realce de sintaxe para Markdown integrados a eles ou disponíveis como download opcional.
* Common Lisp: cl-markdown
* PHP: PHP Markdown
* Python: Python implementation of Markdown
* Perl: Text::Markdown
* C#: Markdown.NET
* R: RMarkdown
* Java: markdownj
* JavaScript: js-markdown
* Showdown: a JavaScript port of Markdown
* Lua: markdown.lua
* Go: Markdown parser and HTML renderer for Go