Go — github.com/minjun0219/mdwire/go
Rust 코어를 Go 로 옮긴 것으로, 표준 라이브러리만 쓴다. 같은 코퍼스를 통과하고, 무작위 입력과 실제 문서로 Rust 코어와 같은 답을 내는지 대조한다. 전체 참고: pkg.go.dev.
go get github.com/minjun0219/mdwire/go@latest
Render
import "github.com/minjun0219/mdwire/go"
parts := mdwire.Render(input, mdwire.TelegramHTML) // []string
완성된 문서를 옮긴다. 한도를 넘으면 열린 마크업이 없는 자리에서 나눈다.
RenderWith
out := mdwire.RenderWith(input, mdwire.SlackMarkdown, mdwire.Options{From: mdwire.SlackMrkdwn})
out.Parts // []string
out.Repairs.ClosedEmphasis // 아래 Repairs
Options
영값이 기본값이다.
type Options struct {
From Dialect // Markdown(영값) | SlackMrkdwn
Limit int // 0 = 채널의 Limit(). MinLimit(256) 보다 작으면 올린다
HTML HTMLOptions // HTML 채널에만
}
type HTMLOptions struct {
LineBreaks LineBreaks // LineBreaksBR(영값) | LineBreaksSpace
Images Images // ImagesLink(영값) | ImagesLoad
Schemes []string // nil = http, https, mailto. 목록은 기본값을 바꾼다. 빈 슬라이스(nil 아님)는 아무 스킴도 받지 않는다
}
Streamer
s := mdwire.NewStreamer(mdwire.SlackMarkdown)
var out []byte
for _, chunk := range chunks {
s.PushTo(chunk, &out) // 조각당 할당 없음
}
s.FinishTo(&out)
NewStreamer(ch) · NewStreamerWith(ch, opts) |
문서 하나에 스트리머 하나. |
PushTo(chunk, *[]byte) · Push(chunk) string |
지금 보내도 안전한 것. PushTo 가 할당 없는 쪽이다. |
FinishTo(*[]byte) · Finish() string |
남은 것, 열린 마크업은 닫아서. |
PreviewTo(*[]byte) · Preview() string |
메시지를 통째로 다시 그릴 때 붙일 꼬리. |
CloseOpenTo(*[]byte) · CloseOpen() string |
이미 나간 블록 마크업만 닫는 꼬리. |
Revised() bool |
Finish 뒤에: 완성본이 마지막 미리보기와 다른가. |
Repairs() Repairs |
지금까지 고친 것. |
계약은 개념에 있다.
Channel 과 Dialect
const ( TelegramHTML Channel = iota; SlackMarkdown; Plain; GithubMarkdown; HTML; NotionMarkdown )
const ( Markdown Dialect = iota; SlackMrkdwn )
NotionMarkdown 다음 릴리스. 숫자 값은 Channels() 의 순서와 다르다 — 채널을 저장하거나 주고받을 땐
이름을 쓴다.
Channels() []Channel |
모든 채널. |
(Channel) Name() string · ParseChannel(string) (Channel, bool) |
문자열 이름. |
(Channel) Limit() int |
조각 한도. |
(Dialect) Name() string · ParseDialect(string) (Dialect, bool) |
"markdown", "slack-mrkdwn". |
Repairs
type Repairs struct {
ClosedEmphasis, ClosedFence, RevertedCodeSpan, DroppedMarker int
// 채널에 맞춰 바꾼 것 — 다음 릴리스
EscapedChar, TagEmphasis, StrippedHTML, RewrittenBullet, RewrittenTable, ConvertedMarker int
}
Repaired() 다음 릴리스 — 하나라도 고쳤는가(앞 넷). Changed() 다음 릴리스 — 고쳤든 바꿨든 하나라도 했는가.
각 필드가 세는 것: 개념.
표시 폭
CharWidth(rune) int, StrWidth(string) int — 고정폭 표에 쓰는 표시 폭.
CLI
go install github.com/minjun0219/mdwire/go/cmd/mdwire@latest 는 Rust 와 같은 CLI 를 깐다 — 플래그도 같고,
-V/--version 만 없다. CLI 참고.