Как разобрать Markdown в PHP? - PullRequest
       36

Как разобрать Markdown в PHP?

28 голосов
/ 25 февраля 2011

Во-первых, я знаю, что уже есть анализатор Markdown для PHP. Я также посмотрел на этот вопрос , но он не отвечает на мой вопрос.

Очевидно, что даже если в названии упоминается PHP, если он не зависит от языка, потому что я хотел бы знать, какой шаг я должен пройти, чтобы сделать это.

Я читал о PEG , но должен признать, что я не совсем понял пример, предоставленный с парсером PHP.

Я также читал о CFG .

Я нашел Zend_Markup_Parser_Textile , который, кажется, создает так называемое "дерево токенов" (что насчёт этого?), Но в настоящее время непригодно . (Кстати, текстиль не уценка)

Так, конкретно, как бы вы пошли к этому?

Очевидно, я думаю об использовании Regex, но, боюсь.

Поскольку Markdown поддерживает несколько синтаксисов для одного и того же элемента (Setext и atx).

Не могли бы вы дать какую-то отправную точку?

Ответы [ 4 ]

34 голосов
/ 24 июля 2013

Вы должны взглянуть на Parsedown .

Он анализирует текст уценки так, как это делают люди.Во-первых, он делит тексты на строки.Затем рассматривается, как эти строки начинаются и связаны друг с другом.Наконец, он ищет специальные символы для идентификации встроенных элементов.

11 голосов
/ 25 февраля 2011

Существует PHP Markdown Extra , который кажется популярным, вы можете начать с просмотра его источника.

5 голосов
/ 20 октября 2012

Также существует объектно-ориентированная реализация Markdown, которая работает быстрее: markdown-oo-php

2 голосов
/ 20 июня 2016

Ciconia - Я нашел новый хороший анализатор уценок для PHP.

Вам нужно сделать всего 3 вещи:

1.Установите Ciconia и выполните синтаксический анализфайл в соответствии с документом .
2. Добавьте соответствующую тему css, чтобы сделать его красивым, например стиль разметки github или здесь .
3.Добавьте подсветку синтаксиса javascript, например google Javascript code prettifier .

Тогда все будет выглядеть довольно неплохо.

Если вам нужен полный пример, вот моя рабочая демонстрационная программа для githubстиль уценки:

<?php
header("Content-Type: text/html;charset=utf-8");
require 'vendor/autoload.php';
use Ciconia\Ciconia;
use Ciconia\Extension\Gfm;

$ciconia = new Ciconia();
$ciconia->addExtension(new Gfm\FencedCodeBlockExtension());
$ciconia->addExtension(new Gfm\TaskListExtension());
$ciconia->addExtension(new Gfm\InlineStyleExtension());
$ciconia->addExtension(new Gfm\WhiteSpaceExtension());
$ciconia->addExtension(new Gfm\TableExtension());
$ciconia->addExtension(new Gfm\UrlAutoLinkExtension());
$contents = file_get_contents('Readme.md');
$html = $ciconia->render($contents);
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Excel to Lua table - Readme</title>
        <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>
        <link rel="stylesheet" href="./github-markdown.css">
        <style>
            .markdown-body {
                box-sizing: border-box;
                min-width: 200px;
                max-width: 980px;
                margin: 0 auto;
                padding: 45px;
            }
        </style>
    </head>
    <body>
        <article class="markdown-body">
        <?php
            # Put HTML content in the document
            echo $html;
        ?>
        </article>
    </body>
</html>
...