Geshi com Markdown
-
26-09-2019 - |
Pergunta
Estou tentando fazer Geshi trabalhar com o Markdown.
Um uso simples para Geshi é o seguinte:
$geshi = new GeSHi($message, 'c');
print $geshi->parse_code();
O código acima pega a mensagem inteira e o transforma em código destacado
Eu também tenho minha função de remarca
print Markdown($message);
Eu estava tentando usar a função de volta para preg_match
a <pre>
Tags retornaram de Markdown e executam o geshi->parse_code();
função nos valores retornados
Aqui está o meu código
print preg_replace_callback(
'/<pre.*?>(.*?[<pre.*?>.*<\/pre>]*)<\/pre>/gism',
create_function(
// single quotes are essential here,
// or alternative escape all $ as \$
'$matches',
'$geshi = new GeSHi($matches[0], \'php\'); return $geshi->parse_code()'
),
Markdown($blog_res['message']));
Estou no caminho certo?
Meu regex está certo? Funciona http://gskinner.com/regexr/
Obrigado pela ajuda
Solução 2
Foi o regex :(
ao invés de
/<pre.*?>(.*?[<pre.*?>.*<\/pre>]*)<\/pre>/gism
Use (remova a bandeira global)
/<pre.*?>(.*?[<pre.*?>.*<\/pre>]*)<\/pre>/ism
Mas se você estiver usando o Markdown, deve se lembrar de compensar o code
blocos que estão por conta própria, portanto, você precisa substituir apenas os que estão no formato de <pre><code>...MyCode</code></pre>
e deixe de fora Hello <code>MyCode</code>
Portanto, você precisa do seguinte
'/<pre.*?><code.*?>(.*?[<pre.*?><code.*?>.*<\/code><\/pre>]*)<\/code><\/pre>/ism',
Outras dicas
Para referência futura, convém conferir meu plugin para isso:
https://github.com/drm/markdown_geshi
Ele é baseado no plug -in regular de remarkdown, adicionando um bloco marcado com um shebang para destacar o código, como este:
#!php
<?php print('This is PHP code'); ?>
Funciona muito bem e eu o uso regularmente no meu próprio blog.
Entendo que você estava procurando estender o Markdown, adicionando suporte ao destaque da sintaxe da GESHI. Embelezar faz isso e muito mais. Por exemplo, ele pode renderizar gráficos em PONTO.
A abordagem de embelezamento para os blocos de código GESHI difere de drm/markdown_geshi Nessas "cercas" são usadas. Por exemplo:
~~~ php
<?php print('This is PHP code'); ?>
~~~
Não tenho certeza se o embelezamento estava por aí quando essa pergunta estava ativa, mas parecia digno de menção em uma resposta.