Сделайте форк на GitHub

Презентации в Markdown,
отрисованные на чистом Go.

slides читает тот Markdown, который читает Marp — директивы, --- между слайдами, фоны ![bg], заметки докладчика, встроенные темы — и добавляет две вещи, которых в Marp нет: шаблоны Go внутри презентации и kinds (типы слайдов), чтобы слайд говорил, чем он является, а не повторял, как он выглядит.

v0.20.2 — выпущенаHTML, expand, PNG/JPEG, векторный и доступный PDF, редактируемые PPTX и ODP, векторные математика и эмодзи, код с номерами строк и выносками, HCL, watch, serve, режим докладчика и обзор слайдов уже сегоднябез headless Chrome
talk.md
---
marp: true
paginate: true
footer: {{ .talk }}
data:
  talk: Pure Go slides
  topics: [Why, How, Next]
---

<!-- _kind: title -->
# {{ .talk }}

{{ range .topics }}
---

# {{ . }}
{{ end }}
Одна организация, 5 репозиториев
Совместимость

Презентация Marp — это презентация go-slides.

Синтаксис — это синтаксис Marpit и Marp Core, а не его диалект. Презентация, написанная для Marp, читается здесь точно так же, а slides expand возвращает обычный Markdown для Marp, так что ничто из написанного с двумя дополнениями ниже не привязано к инструменту.

➗

Слайды и директивы

--- разделяет слайды. Глобальные, локальные и точечные (_class) директивы, во front matter или в HTML-комментариях, с наследованием Marp от слайда к слайду.

🖼️

Изображения и фоны

![bg], его размеры и фильтры, разделённые фоны и ключевые слова изображений, которые понимает Marp.

🗒️

Вокруг слайда

Верхний и нижний колонтитулы и нумерация; заметки докладчика из комментариев; списки с постепенным появлением; <style scoped> для CSS одного слайда.

🎨

Встроенные темы

default, gaia и uncover, выбираются через theme:, как в Marp.

Первое дополнение

Шаблоны Go внутри презентации.

Презентация — это text/template, вычисляемый до разбора Markdown, поэтому шаблон может порождать слайды, а презентация — быть данными плюс макетом.

🔤

Значения

{{ .title }} читает front matter, а его отображение data: хранит всё остальное, что нужно презентации.

🔁

Слайды из данных

{{ range }}, выдающий ---, — генератор слайдов: по слайду на элемент, на докладчика, на релиз.

#️⃣

Страница и общее число

{{ page }} и {{ total }} становятся известны только после разделения презентации на слайды и подставляются тогда.

🧾

Код остаётся нетронутым

Блоки кода и встроенный код по умолчанию не вычисляются, так что слайд о шаблонах Go может показать шаблон. include подключает другой файл.

Второе дополнение

Слайд говорит, чем он является.

kind: section называет набор локальных директив — колонтитулы, нумерацию, класс, фон. kind: действует на слайд и следующие за ним, _kind: — на один слайд. Директивы, записанные на самом слайде, по-прежнему главнее.

🏷️

Встроенные

title, section, content и blank, каждый можно переопределить.

📁

Определены один раз, общие

В kinds: во front matter или в YAML-файле kinds, который называют все презентации команды.

🧹

Ничто не просачивается

Смена kind сбрасывает то, что задал предыдущий, так что класс или колонтитул не переходит в следующий раздел.

Попробуйте

Презентация в вашем браузере.

Playground — это сам go-slides, скомпилированный в WebAssembly: пишите слева, слайды появляются справа. Ничего не устанавливается и ничего не отправляется на сервер. Интерфейс самого Playground следует языку страницы.

⚡

Вживую

Слайды отрисовываются в worker по мере набора, превью прокручивается вместе с редактором, за ним следуют миникарта и колонка миниатюр слайдов, а показ воспроизводит переходы. «Показ» открывает режим докладчика с заметками и таймером во втором окне.

💡

Справка внутри

Автодополнение и пояснения для директив, kinds и функций шаблонов; проблемы отмечаются на своей строке; примеры презентаций, среди них математика, изображения и фоны (перетащите файл изображения в редактор); ссылки на документацию. Панель файлов хранит проект: ваши темы, kinds и файлы данных, а также перетащенные медиафайлы — в той же структуре, что строит команда slides. Вкладка «Формат» пишет Markdown за вас, с отменой: жирный, курсив, подчёркивание, списки, таблица из сетки, выравнивание текста слайда и ссылки. Размер каждой панели можно менять.

🔗

Поделиться, сохранить, оставить

Ссылка несёт саму презентацию, сжатую в её #. Сохраните её как HTML, векторный PDF или редактируемую презентацию PowerPoint или OpenDocument — всё это делается в вашем браузере, — или скачайте весь проект в виде .zip. Черновик переживает перезагрузку, только в вашем браузере.

Что он умеет

Сначала HTML. Остальное — без управляемого браузера.

marp-cli рисует изображения и PDF, управляя headless Chrome. Здесь это делают собственные библиотеки Go нашей организации. Изображения и PDF появились в v0.1.0, PPTX, математика и подсветка — в v0.2.0, ODP, заголовки по ширине и HCL — в v0.3.0, векторный PDF (с выделяемым текстом) и эмодзи — в v0.4.0; в v0.5.0 PPTX и ODP стали редактируемыми, тогда как PPTX у marp-cli состоит из картинок; v0.6.0 добавляет watch, serve, переходы и параметры marp-cli, v0.7.0 — режим докладчика; см. документацию.

HTML v0.1.0

Одна страница на презентацию, как её отрисовывает Marp: каждый слайд — это <section> в SVG-рамке, масштабируемой под окно, с CSS темы и просмотрщиком с управлением с клавиатуры.

slides expand v0.1.0

Презентация с вычисленными шаблонами и kinds, превращёнными в точечные директивы, переписанная как обычный Markdown для Marp — дальше её может подхватить любой инструмент Marp.

заметки, kinds, темы v0.1.0

slides notes выводит заметки докладчика; slides kinds и slides themes перечисляют то, что презентация может назвать по имени.

slides.yaml v0.1.0

Файл конфигурации для папки с презентациями: общие kinds и темы, данные шаблонов, параметры HTML и язык.

PNG / JPEG v0.1.0

--images png|jpeg записывает по изображению на слайд (deck.001.png, …), --image — только первый слайд. Отрисовка выполняется go-webengine, браузерным движком на Go, а не headless Chrome. --image-scale 2 рисует с удвоенной плотностью.

PDF v0.1.0

--pdf или -o deck.pdf: одна страница на слайд в размере слайда, с оглавлением из слайдов и заголовков; файл пишет go-pdfkit. Шрифты встраиваются; сеть не используется. Начиная с v0.4.0 страницы векторные: текст можно выделять, формы чёткие, 758 КиБ на 100 слайдов против 837 КиБ у marp-cli (--pdf-raster оставляет по изображению на страницу).

PPTX v0.2.0

--pptx или -o deck.pptx: с заметками докладчика и метаданными презентации; файл пишет go-ooxml. Начиная с v0.5.0 слайды редактируемые — текстовые блоки собственными шрифтами презентации (встроенными), фигуры, градиенты, картинки, хранящиеся один раз, — тогда как у marp-cli это картинки (--pptx-raster их сохраняет). 100 слайдов: 348 мс и 760 КиБ против 7,8 с и 7,2 МиБ у marp-cli.

Математика и подсветка v0.2.0

$…$ и $$…$$ набирает go-tex, блоки кода подсвечивает go-rouge — в HTML-странице, изображениях и PDF.

ODP v0.3.0

--odp или -o deck.odp: презентация OpenDocument с заметками докладчика — редактируемая начиная с v0.5.0, как и PPTX (--odp-raster даёт по картинке на слайд).

Заголовки по ширине v0.3.0

# <!-- fit --> Title растягивает заголовок на всю ширину слайда в одну строку — на странице и в каждом экспорте.

Эмодзи v0.4.0

Коды :smile: и эмодзи Unicode (😄 👩‍💻 🇫🇷) превращаются в изображения Twemoji ровно так, как их пишет Marp Core, но встроенные из go-icons/twemoji, а не загружаемые с CDN: сеть не нужна, и они отображаются на странице, в изображениях, PDF, PPTX и ODP. Эмодзи →

HCL v0.3.0

HCL2 везде, где презентация принимает YAML — заголовок ---hcl, slides.hcl, файлы kinds и данных — для выражений и функций: footer = "${upper(data.company)} · ${page()}/${total()}". slides expand переписывает заголовок обратно в YAML. HCL →

Watch, serve, предпросмотр v0.6.0

--watch пересобирает изменившееся и перезагружает открытые страницы; --server dir раздаёт папку с презентациями — deck.md как страницу, deck.md?pdf, ?pptx, ?png, ?notes конвертируются по запросу — на 127.0.0.1, проверяя Host и Origin и никогда не выходя за пределы папки; --preview открывает браузер. Маршруты и живая перезагрузка marp-cli, но без его открытого порта. Командная строка →

Много презентаций v0.6.0

slides -I decks/ -o site/ конвертирует каждую презентацию в папке и воспроизводит структуру каталогов; сразу несколько файлов, папка или шаблон, -P — параллельно.

Переходы v0.6.0

<!-- transition: fade 1s --> из marp-cli с его 33 встроенными переходами, которые проигрываются через API View Transition браузера; экранный пульт; --template bare. Экспорты в PDF, PPTX и ODP тоже несут их, на следующем слайде, а списки с фрагментами становятся в PPTX и ODP построениями по щелчку (--pdf-fragments записывает одну страницу PDF на шаг). Начиная с v0.18.0; проверено только в LibreOffice, не в PowerPoint.

Заметки в PDF, метаданные, параметры marp-cli v0.6.0

--notes записывает заметки докладчика как текст, --pdf-notes помещает их на страницы PDF, --pdf-outlines — его закладки; --title, --author, --keywords, --url, --og-image, --theme; читаются .marprc и --config-file (JSON, YAML) от marp-cli.

Обзор v0.8.0

Нажмите o: все слайды сеткой, стрелки выбирают слайд, Enter или щелчок переходит к нему — поверх страницы или режима докладчика, с URL и синхронизацией marp-cli, без сети. Слайды подписаны и доступны для фокуса; закрытый обзор неактивен. Командная строка →

Режим докладчика v0.7.0

Нажмите p на странице: текущий слайд, следующий шаг, ваши заметки (экранированные, их никогда не читает скринридер аудитории), часы и таймер — во втором окне, которое следует за первым, а первое — за ним; URL и синхронизация marp-cli через localStorage, без сервера и сети. Около 10 КБ на страницу. Командная строка →

Номера строк и выноски в коде v0.8.0

```go {lineNumbers} нумерует строки блока кода ({lineNumbers=10} начинает с 10); маркер в комментарии в конце строки (// <1>) и следующий за ним нумерованный список дают пронумерованный кружок на строке и у её примечания — на странице, в изображениях, PDF, PPTX и ODP. Номера и кружки не копируются вместе с кодом. Математика и код →

Пакеты тем v0.18.0

Тема в одном файле .gsta.xz: tar-архив, сжатый xz, с файлом theme.hcl, который называет тему и перечисляет её CSS, шрифты, ресурсы и kinds. Пакетами управляют slides theme pack|verify|install|list|remove, а --theme принимает пакет. Архивы считаются недоверенным вводом: ссылки, небезопасные пути, архивные бомбы и неверные контрольные суммы отклоняются с кодированными ошибками. Пакеты тем →

Записи терминала v0.18.0

![cast](demo.cast) встраивает запись asciinema: в HTML-странице она воспроизводится во встроенном плеере, без сторонних скриптов и на паузе при включённом уменьшении анимации; в PDF, PPTX и ODP экран в выбранный момент (#t=12.5) рисуется векторным текстом. Записи терминала →

Анимации в экспорте v0.18.0

Переходы Marp становятся переходами слайдов в PPTX и ODP, а списки с постепенным появлением — появлением по щелчку; каждая страница PDF получает переход /Trans, а --pdf-fragments записывает по странице на каждый шаг фрагмента. Командная строка →

Видео v0.19.0

![video](clip.mp4#t=12.5) встраивает видео: браузер воспроизводит его в HTML-странице, никогда не включая звук сам и ставя на паузу при уменьшении анимации; PDF показывает кадр-превью в выбранный момент со ссылкой на файл, а PPTX и ODP встраивают видео. Видео →

Анимированный SVG v0.20.0

Изображение SVG, которое анимируется само, воспроизводится на странице HTML. В PPTX и ODP каждый анимированный элемент — фигура со своей анимацией (движение, вращение, масштаб, прозрачность, цвет), которая стартует вместе со слайдом, или анимированный GIF там, где они не могут этого выразить; PDF и изображения показывают начальное состояние. Локальное изображение, заблокированное без --allow-local-files, теперь сообщается, а не отбрасывается молча. Анимированный SVG →

Организация

Репозитории

slides v0.20.2

Команда slides и её библиотека: Markdown Marp разбирается и отрисовывается на Go, а сверху добавлены шаблоны Go и kinds (типы слайдов). Выпущена как v0.20.2: go install github.com/go-slides/slides/cmd/slides@latest.

docs v0.20

Документация (Hugo + Hextra), описывающая v0.20.2: первые шаги, совместимость с Marp, шаблоны, kinds и командная строка. Исходники →

vscode v0.5.0

Расширение VS Code — то же для go-slides, чем Marp for VS Code является для Marp: презентации показываются в Markdown-превью VS Code силами go-slides, скомпилированного в WebAssembly (без бинарного файла, работает на vscode.dev), прокрутка синхронна с редактором даже сквозь шаблоны, ошибки в панели «Проблемы», автодополнение директив, kinds и функций шаблонов, обзор и режим докладчика рядом с редактором, экспорт через slides с доступным PDF, размеченным тегами. Установите .vsix, приложенный к релизу на GitHub; публикация в Marketplace и Open VSX подготовлена, но пока не выполнена. VS Code →

brand готово

Знак — слайд на подставке в индиго семейства документов — и все его форматы: SVG, PNG, JPG, ICO, ICNS, аватар и изображение для соцсетей.

gitd v0.1.1

slides-gitd — самостоятельно размещаемый git-бэкенд для плейграунда go-slides: учётные данные форджа остаются на сервере, каждый пользователь изолирован, а работает всё за oauth2-proxy. Чистый Go.

Часть семейства документов.

Вместе с go-richdoc, go-ooxml, go-tex и go-docutils: документы читаются, верстаются и записываются на Go, без единой строки на C.

Организация на GitHub →