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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top