Markdown
O recurso Markdown permite transformar strings e arquivos Markdown em HTML, tornando-o útil em diversos cenários, como a criação de blogs.
Convertendo string
Convertendo uma string contendo Markdown para HTML com parágrafos:
use Inphinit\Experimental\Utility\Markdown;
$parser = new Markdown();
$input = "*Italic*\n\n**bold**\n\n\n\n[login access](/login.html)";
$output = $parser->fromString($input);
echo $output;
Saída:
<p><em>Italic</em></p>
<p><strong>bold</strong></p>
<p><figure><img src="/images/forest.jpg" alt="forest"></figure></p>
<p><a href="/login.html">login access</a></p>
Convertendo uma string contendo Markdown para HTML sem parágrafos:
use Inphinit\Experimental\Utility\Markdown;
$parser = new Markdown();
$input = "*Italic*\n\n**bold**\n\n\n\n[login access](/login.html)";
$output = $parser->fromInlineString($input);
echo $output;
Saída:
<em>Italic</em>
<strong>bold</strong>
<figure><img src="/images/forest.jpg" alt="forest"></figure>
<a href="/login.html">login access</a>
Para permitir HTML arbitrário na sintaxe do documento, deve-se utilizar o método enableHtml(), como no exemplo:
use Inphinit\Experimental\Utility\Markdown;
$parser = new Markdown();
$parser->enableHtml(true);
$input = "**bold**\n\n<div align='center'>foo bar baz</div>\n\n<video src='video.webm'></video>";
$output = $parser->fromString($input);
echo $output;
Saída:
<p><strong>bold</strong></p>
<p><div align='center'>foo bar baz</div></p>
<p><video src='video.webm'></video></p>
Convertendo arquivos
Para converter arquivos, o método utilizado é o fromFile() (as quebras de linha serão convertidas em parágrafos <p>...</p>). Exemplo:
use Inphinit\Experimental\Utility\Markdown;
$parser = new Markdown();
$parser->enableHtml(true);
$output = $parser->fromFile('/foo/bar/baz/document.md');
echo $output;
Convertendo arquivo do armazenamento:
$output = $parser->fromFile(INPHINIT_SYSTEM . '/storage/document.md');
echo $output;
API
| Uso | Descrição |
|---|---|
__construct(bool $enableCustom = true) |
Se $enableCustom for true (padrão), as seguintes sintaxes customizadas serão adicionadas:
|
fromString(string $input): string |
Converte uma string markdown em HTML, tornando quebras de linhas em paragrafos <p>...</p>.
|
fromInlineString(string $input): string |
Converte uma string markdown em HTML, preservando as quebras de linha. |
fromFile(string $path): string |
Converte um arquivo markdown em HTML, tornando quebras de linhas em paragrafos <p>...</p>.
|
enableErrors(bool $enable): void |
Habilita ou desabilita erros no parser. Se habilitado, qualquer falha grave irá emitir uma exception, se desabilitado (padrão) a falha será ignorada, e a sintaxe falha será tratada como texto no HTML gerado. |
enableHtml(bool $enable): void |
Habilita ou desabilita tags HTML dentro do documento markdown. O comportamento padrão (desabilitado) transforma tags HTML no markdown e texto de entidades HTML. |
setCustomInline(string $delimiter, string $template): void |
Se necessitar criar um sintaxe própria para gerar elementos a partir de uma sintaxe inline (ou dentro de paragráfos) é possivel executar algo como $parser->setCustomInline('@', '<div align="center">{contents}</div>'); que irá permitir algo como Foo @sample@ bar gerar Foo <div align="center">sample</div> bar.
|
setTemplate(int $type, string $template): void |
Permite criar sintaxe simples para gerar elementos em um contexto inline. |
Customizando saída HTML
É possivel customizar a maioria das tags HTML geradas na conversão, usando o método setTemplate() através das constantes pré-definidas:
| Uso | Nota |
|---|---|
setTemplate(Markdown::BLOCKQUOTE, '<blockquote>{contents}</blockquote>') |
|
setTemplate(Markdown::CODE_BLOCK, '<pre data-lang="{lang}"><code>{contents}</code></pre>') |
Se a sintaxe não contiver a linguagem, o valor de {lang} será none.
|
setTemplate(Markdown::H1, '<h1>{contents}</h1>') |
|
setTemplate(Markdown::H2, '<h2 id="{id}"><a href="#{id}">{contents}</a></h2>') |
Somente o H2 (## heading 2) recebe ID, e cada H2 assim como o conteudo posterior, serão movido para dentro <section>...</section> próprio.
|
setTemplate(Markdown::H3, '<h3>{contents}</h3>') |
|
setTemplate(Markdown::H4, '<h4>{contents}</h4>') |
|
setTemplate(Markdown::H5, '<h5>{contents}</h5>') |
|
setTemplate(Markdown::H6, '<h6>{contents}</h6>') |
|
setTemplate(Markdown::HR, '<hr>') |
|
setTemplate(Markdown::ANCHOR, '<a href="{url}">{contents}</a>') |
|
setTemplate(Markdown::ANCHOR_TITLE, '<a href="{url}" title="{title}">{contents}</a>') |
Similar ao Markdown::ANCHOR, com a exceção que será usado somente com a sintaxe [contents](url "title").
|
setTemplate(Markdown::FIGURE, '<figure><img src="{url}" alt="{alternative}"></figure>') |
|
setTemplate(Markdown::FIGURE_CAPTION, '<figure><img src="{url}" alt="{alternative}"><figcaption>{title}</figcaption></figure>') |
Similar ao Markdown::FIGURE, com a exceção que será usado somente com a sintaxe .
|
setTemplate(Markdown::OL, '<ol>{contents}</ol>') |
|
setTemplate(Markdown::UL, '<ul>{contents}</ul>') |
|
setTemplate(Markdown::BOLD, '<strong>{contents}</strong>') |
|
setTemplate(Markdown::CODE, '<code>{contents}</code>') |
|
setTemplate(Markdown::ITALIC, '<em>{contents}</em>') |
|
setTemplate(Markdown::STRIKETHROUGH, '<s>{contents}</s>') |
|
setTemplate(Markdown::TABLE, '<table><thead><tr>{headers}</tr></thead><tbody>{contents}</tbody></table>') |
|
setTemplate(Markdown::SUBSCRIPT, '<sub>{contents}</sub>') |
|
setTemplate(Markdown::SUPERSCRIPT, '<sup>{contents}</sup>') |