Простой редактор Common Mark
Исходный код для этой главы находится здесь.
В данной главе мы создадим полезную программу для редактирования текста с синтаксисом 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
Мы будем использовать его для обработки некоторых нажатий клавиш.