Содержание- Метод рекурсивного спуска
- Источники данных
- Основные примитивы парсера
- Рекурсивый парсер
- Обработка ошибок
- Тестирование
- Автоматические тесты
- JUnit
Домашнее задание 2. Markdown to HTMLMarkdown to HTML-
Разработайте конвертер из
Markdown-разметки
в HTML.
-
Конвертер должен поддерживать следующие возможности:
-
Абзацы текста разделяются пустыми строками.
-
Элементы строчной разметки:
выделение (* или _),
сильное выделение (** или __),
зачеркивание (--),
код (`)
-
Заголовки (# * уровень заголовка)
-
Конвертер должен называться Md2Html и
принимать два аргумента: название входного файла
с Markdown-разметкой и название выходного файла
c HTML-разметкой. Оба файла должны иметь кодировку UTF-8.
-
Пример
-
Входной файл
# Заголовок первого уровня
## Второго
### Третьего ## уровня
#### Четвертого
# Все еще четвертого
Этот абзац текста,
содержит две строки.
# Может показаться, что это заголовок.
Но нет, это абзац начинающийся с `#`.
#И это не заголовок.
###### Заголовки могут быть многострочными
(и с пропуском заголовков предыдущих уровней)
Мы все любим *выделять* текст _разными_ способами.
**Сильное выделение**, используется гораздо реже,
но __почему бы и нет__?
Немного --зачеркивания-- еще ни кому не вредило.
Код представляется элементом `code`.
Обратите внимание, как экранируются специальные
HTML-символы, такие как `<`, `>` и `&`.
Знаете ли вы, что в Markdown, одиночные * и _
не означают выделение?
Они так же могут быть заэкранированы
при помощи обратного слэша: \*.
Лишние пустые строки должны игнорироваться.
Любите ли вы *вложеные __выделения__* так,
как __--люблю--__ их я?
-
Выходной файл
<h1>Заголовок первого уровня</h1>
<h2>Второго</h2>
<h3>Третьего ## уровня</h3>
<h4>Четвертого
# Все еще четвертого</h4>
<p>Этот абзац текста,
содержит две строки.</p>
<p> # Может показаться, что это заголовок.
Но нет, это абзац начинающийся с <code>#</code>.</p>
<p>#И это не заголовок.</p>
<h6>Заголовки могут быть многострочными
(и с пропуском заголовков предыдущих уровней)</h6>
<p>Мы все любим <em>выделять</em> текст <em>разными</em> способами.
<strong>Сильное выделение</strong>, используется гораздо реже,
но <strong>почему бы и нет</strong>?
Немного <s>зачеркивания</s> еще ни кому не вредило.
Код представляется элементом <code>code</code>.</p>
<p>Обратите внимание, как экранируются специальные
HTML-символы, такие как <code><</code>, <code>></code> и <code>&</code>.</p>
<p>Знаете ли вы, что в Markdown, одиночные * и _
не означают выделение?
Они так же могут быть заэкранированы
при помощи обратного слэша: *.</p>
<p>Лишние пустые строки должны игнорироваться.</p>
<p>Любите ли вы <em>вложеные <strong>выделения</strong></em> так,
как <strong><s>люблю</s></strong> их я?</p>
-
Реальная разметка
Заголовок первого уровняВторогоТретьего ## уровняЧетвертого
# Все еще четвертогоЭтот абзац текста,
содержит две строки. # Может показаться, что это заголовок.
Но нет, это абзац начинающийся с # . #И это не заголовок. Заголовки могут быть многострочными
(и с пропуском заголовков предыдущих уровней)Мы все любим выделять текст разными способами.
Сильное выделение, используется гораздо реже,
но почему бы и нет?
Немного зачеркивания еще ни кому не вредило.
Код представляется элементом code . Обратите внимание, как экранируются специальные
HTML-символы, такие как < , > и & . Знаете ли вы, что в Markdown, одиночные * и _
не означают выделение?
Они так же могут быть заэкранированы
при помощи обратного слэша: *. Лишние пустые строки должны игнорироваться. Любите ли вы вложеные выделения так,
как люблю их я?
|