静的サイトジェネレーターHugoではページの元になるファイルとしてOrg-mode のファイルを使用できる。内部ではどのようにOrg-modeをHTMLに変換している のか気になったので調べた。

変換にはgo-orgを使っている

変換処理はhugo/markup/org/convert.go で実装しており、 github.com/niklasfasching/go-org を利用してOrg-modeからHTMLに変換して いる。

変換処理

Org-modeからHTMLへの変換処理のみを抽出すると次のような処理となる。

main.go

org.New, org.NewHTMLWriterを用いて変換を行う。

package main

import (
	"bytes"
	"fmt"
	"github.com/niklasfasching/go-org/org"
	"os"
)

func main() {

	config := org.New()
	writer := org.NewHTMLWriter()

	content, err := os.ReadFile("./foo.org")
	reader := bytes.NewReader(content)
	parser := config.Parse(reader, "foo")
	html, err := parser.Write(writer)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(html))
}

go.mod

module github.com/TakesxiSximada/symdon/pages/posts/1626346909

go 1.16

require (
	github.com/niklasfasching/go-org v1.5.0 // indirect
	golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect
)