Простой редактор Common Mark

head_pic

Исходный код для этой главы находится здесь.

В данной главе мы создадим полезную программу для редактирования текста с синтаксисом Markdown, в частности, версии Common Mark, и покажем этот текст в реальном времени, с помощью предпросмотра HTML.

Мы также будем использовать окно для открытия и сохранения файлов, будем хэшировать буфер, чтобы знать, когда кнопка Save должна быть активирована. Когда это будет завершено, вы должны будете понимать не только как использовать пакет gtk, но и gdk, pango, webkit2gtk, sourceview.

Эта глава была написана использованием готовой программы, которую мы собираемся собрать. Можно сказать, что это обучающее пособие реализует само себя.

HTML можно писать внутри данного диалекта Markdown. Это позволяет смешивать HTML и Markdown в одном редакторе, отображение будет показываться справа.

Исходные требования

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

Зависимости

Ваши зависимости должны быть следующими:

[dependencies]
gdk = "0.6"
horrorshow = "0.6.2"
pango = "0.2.0"
pulldown-cmark = "0.1.0"
tiny-keccak = "1.4.0"
webkit2gtk = "0.2"

[dependencies.sourceview]
features = ["v3_18"]
version = "0.2"

[dependencies.gtk]
features = ["v3_22"]
version = "0.2"

puldown-cmark

Кто-то может заметить, что мы добавили новые пакеты. В Google можно узнать про пакет pulldown-cmark, который предоставляет хороший парсер CommonMark и поэтому дает возможность преобразовывать Markdown в HTML.

tiny-keccak

Мы будем использовать алгоритм хеширования для того, чтобы делать кнопку Save активной или неактивной. Проще говоря, мы будем хешировать буфер при каждом нажатии клавиш и сравнивать полученный хеш с сохраненным. Если хеши совпадают, то кнопка Save должна быть активной, иначе - неактивной.

sourceview

Благодаря этому пакету у нас появится доступ к виджету GtkSourceView, который мы будем использовать для создания редактора кода, используемом для редактирования Markdown.

webkit2gtk

Благодаря этому пакету у нас появится виджет GtkWebView, который будет показывать "живое" представление нашего редактируемого Markdown.

pango

Благодаря этому пакету мы сможем изменять шрифт в GtkSourceView.

gdk

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