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.
90 lines
1.9 KiB
Go
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
|
|
}
|