Интегрировать графвиз в пандок - PullRequest
1 голос
/ 25 марта 2020

Я пытаюсь интегрировать graphviz с помощью команды точки в уценку pando c, и мне интересно, как проще всего это сделать. В настоящее время я создаю отдельные .dot файлы, создаю из них изображения с помощью команды dot вручную в командной строке в отдельный файл и, наконец, добавляю этот файл, используя синтаксис изображений markdown:

![](./path/to/image.png)

Но так как синтаксис точки проще для чтения, чем для уценки, я бы предпочел, чтобы точка была интегрирована в уценку. Такое ощущение, что это должно быть возможно, потому что на странице фильтров pando c это приведено в качестве примера. Просто я не хочу кодировать это самостоятельно, но хотел бы использовать какой-то готовый пакет. Существует ли что-то подобное?

1 Ответ

1 голос
/ 29 марта 2020

tarleb опубликовал ссылку на https://github.com/pandoc/lua-filters/tree/master/diagram-generator#graphviz в комментариях, что очень помогло. Использование lua -фильтра действительно. Немного адаптировал связанный скрипт для соответствия моим потребностям.

Сценарий теперь выглядит следующим образом:

-- insprired from https://github.com/pandoc/lua-filters/blob/5686d96/diagram-generator/diagram-generator.lua

local dotPath = os.getenv("DOT") or "dot"

local filetype = "svg"
local mimetype = "image/svg+xml"

local function graphviz(code, filetype)
    return pandoc.pipe(dotPath, {"-T" .. filetype}, code)
end

function CodeBlock(block)
    local converters = {
        graphviz = graphviz,
    }

    local img_converter = converters[block.classes[1]]
    if not img_converter then
      return nil
    end

    local success, img = pcall(img_converter, block.text, filetype)

    if not success then
        io.stderr:write(tostring(img))
        io.stderr:write('\n')
        error 'Image conversion failed. Aborting.'
    end

    return pandoc.RawBlock('html', img)
end

return {
    {CodeBlock = CodeBlock},
}

Параметр pando c --lua-filter может быть использован для добавления этого фильтр для преобразования:

pandoc\
    slides.md\
    -o slides.html\
    --lua-filter=codeblock-filter.lua

Также добавлены дополнительные пояснения в мой блог .

...