Files
sift/vendor/github.com/JohannesKaufmann/html-to-markdown/v2/converter/escape.go
T
kyle 9444a35322 p1: /v2/scrape, /v1/fetch, auth, CLI, contract tests
Single Fetcher.Fetch on the Guard that holds DenyPrefixes. skipTlsVerification
is ignored. No 502. keys add writes the secret only to --out. Release binary
has no -test-allow-prefix.
2026-09-22 21:54:01 -07:00

90 lines
1.9 KiB
Go

package converter
import (
"unicode/utf8"
"github.com/JohannesKaufmann/html-to-markdown/v2/marker"
)
const (
actionKeep = iota
actionEscape = iota
)
// IMPORTANT: Only internally we assume it is only byte
var placeholderByte byte = marker.BytesMarkerEscaping[0]
func (conv *Converter) escapeContent(chars []byte) []byte {
if conv.escapeMode == EscapeModeDisabled {
return chars
}
newChars := make([]byte, 0, len(chars))
for index := 0; index < len(chars); index++ {
if chars[index] == '\u0000' {
// For security reasons, the Unicode character U+0000 must be replaced with the REPLACEMENT CHARACTER (U+FFFD).
newChars = append(newChars, []byte(string('\ufffd'))...)
continue
}
r, _ := utf8.DecodeRune(chars[index:])
isMarkdownChar := conv.checkIsEscapedChar(r)
if isMarkdownChar {
newChars = append(newChars, placeholderByte, chars[index])
} else {
newChars = append(newChars, chars[index])
}
}
return newChars
}
func (conv *Converter) unEscapeContent(chars []byte) []byte {
if conv.escapeMode == EscapeModeDisabled {
return chars
}
checkElements := func(index int) int {
for _, handler := range conv.getUnEscapeHandlers() {
if skip := handler.Value(chars, index); skip != -1 {
return skip
}
}
return -1
}
changes := make([]uint8, len(chars))
for index := 0; index < len(chars); index++ {
if chars[index] != placeholderByte {
continue
}
if index+1 >= len(chars) {
break
}
skip := checkElements(index + 1)
if skip == -1 {
continue
}
changes[index] = actionEscape
index += skip - 1
}
newChars := make([]byte, 0, len(chars))
for index, char := range chars {
if char != placeholderByte {
newChars = append(newChars, char)
continue
}
// What to do with this placeholder? Should we escape or not?
if changes[index] == actionEscape {
newChars = append(newChars, '\\')
}
}
return newChars
}