Go — github.com/minjun0219/mdwire/go

Go reference

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{Limit: 4096})
out.Parts                  // []string
out.Repairs.ClosedEmphasis // 아래 Repairs 참고

Options

제로 값이 곧 기본값입니다.

type Options struct {
	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 지금까지 센 정규화 보고를 반환합니다.

계약은 Concepts에 있습니다.

Channel

const ( TelegramHTML Channel = iota; SlackMarkdown; Plain; GithubMarkdown; HTML; NotionMarkdown )

상수의 숫자 값은 Channels() 의 순서와 다릅니다. 채널을 저장하거나 주고받을 때는 이름을 쓰세요.

Channels() []Channel 모든 채널을 반환합니다.
(Channel) Name() string · ParseChannel(string) (Channel, bool) 문자열 이름과 채널을 서로 바꿉니다.
(Channel) Limit() int 조각 길이 제한을 반환합니다.

Repairs

type Repairs struct {
	ClosedEmphasis, ClosedFence, RevertedCodeSpan, DroppedMarker, GuessedPair int
	// 채널에 맞춰 바꾼 것
	EscapedChar, TagEmphasis, StrippedHTML, RewrittenBullet, RewrittenTable, ConvertedMarker int
}

Repaired() 는 하나라도 고쳤는지(앞의 네 필드), Changed() 는 고쳤든 바꿨든 하나라도 했는지 알려 줍니다. 각 필드가 세는 것은 Concepts에 있습니다.

표시 폭

CharWidth(rune) int, StrWidth(string) int 는 고정폭 표에 쓰는 표시 폭 함수입니다.

CLI

go install github.com/minjun0219/mdwire/go/cmd/mdwire@latest 로 Rust 와 같은 CLI 를 설치할 수 있습니다. 플래그도 같고, -V/--version 만 없습니다. 자세한 내용은 CLI를 참고하세요.