mirror of
https://github.com/rclone/rclone.git
synced 2024-12-23 07:29:35 +01:00
lib/encoder: add CrLf encoding
This commit is contained in:
parent
6e053ecbd0
commit
f55a99218c
@ -39,6 +39,7 @@ const (
|
|||||||
EncodeSlash uint = 1 << iota // /
|
EncodeSlash uint = 1 << iota // /
|
||||||
EncodeWin // :?"*<>|
|
EncodeWin // :?"*<>|
|
||||||
EncodeBackSlash // \
|
EncodeBackSlash // \
|
||||||
|
EncodeCrLf // CR(0x0D), LF(0x0A)
|
||||||
EncodeHashPercent // #%
|
EncodeHashPercent // #%
|
||||||
EncodeDel // DEL(0x7F)
|
EncodeDel // DEL(0x7F)
|
||||||
EncodeCtl // CTRL(0x01-0x1F)
|
EncodeCtl // CTRL(0x01-0x1F)
|
||||||
@ -86,6 +87,7 @@ func (mask MultiEncoder) Encode(in string) string {
|
|||||||
encodeWin = uint(mask)&EncodeWin != 0
|
encodeWin = uint(mask)&EncodeWin != 0
|
||||||
encodeSlash = uint(mask)&EncodeSlash != 0
|
encodeSlash = uint(mask)&EncodeSlash != 0
|
||||||
encodeBackSlash = uint(mask)&EncodeBackSlash != 0
|
encodeBackSlash = uint(mask)&EncodeBackSlash != 0
|
||||||
|
encodeCrLf = uint(mask)&EncodeCrLf != 0
|
||||||
encodeHashPercent = uint(mask)&EncodeHashPercent != 0
|
encodeHashPercent = uint(mask)&EncodeHashPercent != 0
|
||||||
encodeDel = uint(mask)&EncodeDel != 0
|
encodeDel = uint(mask)&EncodeDel != 0
|
||||||
encodeCtl = uint(mask)&EncodeCtl != 0
|
encodeCtl = uint(mask)&EncodeCtl != 0
|
||||||
@ -202,6 +204,13 @@ func (mask MultiEncoder) Encode(in string) string {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if encodeCrLf { // CR LF
|
||||||
|
switch r {
|
||||||
|
case rune(0x0D), rune(0x0A),
|
||||||
|
'␍', '␊':
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
if encodeHashPercent { // #%
|
if encodeHashPercent { // #%
|
||||||
switch r {
|
switch r {
|
||||||
case '#', '%',
|
case '#', '%',
|
||||||
@ -294,6 +303,17 @@ func (mask MultiEncoder) Encode(in string) string {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if encodeCrLf { // CR LF
|
||||||
|
switch r {
|
||||||
|
case rune(0x0D), rune(0x0A):
|
||||||
|
out.WriteRune(r + symbolOffset)
|
||||||
|
continue
|
||||||
|
case '␍', '␊':
|
||||||
|
out.WriteRune(QuoteRune)
|
||||||
|
out.WriteRune(r)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
if encodeHashPercent { // #%
|
if encodeHashPercent { // #%
|
||||||
switch r {
|
switch r {
|
||||||
case '#', '%':
|
case '#', '%':
|
||||||
@ -338,6 +358,7 @@ func (mask MultiEncoder) Decode(in string) string {
|
|||||||
encodeWin = uint(mask)&EncodeWin != 0
|
encodeWin = uint(mask)&EncodeWin != 0
|
||||||
encodeSlash = uint(mask)&EncodeSlash != 0
|
encodeSlash = uint(mask)&EncodeSlash != 0
|
||||||
encodeBackSlash = uint(mask)&EncodeBackSlash != 0
|
encodeBackSlash = uint(mask)&EncodeBackSlash != 0
|
||||||
|
encodeCrLf = uint(mask)&EncodeCrLf != 0
|
||||||
encodeHashPercent = uint(mask)&EncodeHashPercent != 0
|
encodeHashPercent = uint(mask)&EncodeHashPercent != 0
|
||||||
encodeDel = uint(mask)&EncodeDel != 0
|
encodeDel = uint(mask)&EncodeDel != 0
|
||||||
encodeCtl = uint(mask)&EncodeCtl != 0
|
encodeCtl = uint(mask)&EncodeCtl != 0
|
||||||
@ -432,6 +453,12 @@ func (mask MultiEncoder) Decode(in string) string {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if encodeCrLf { // CR LF
|
||||||
|
switch r {
|
||||||
|
case '␍', '␊':
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
if encodeHashPercent { // #%
|
if encodeHashPercent { // #%
|
||||||
switch r {
|
switch r {
|
||||||
case '#', '%':
|
case '#', '%':
|
||||||
@ -521,6 +548,17 @@ func (mask MultiEncoder) Decode(in string) string {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if encodeCrLf { // CR LF
|
||||||
|
switch r {
|
||||||
|
case '␍', '␊':
|
||||||
|
if unquote {
|
||||||
|
out.WriteRune(r)
|
||||||
|
} else {
|
||||||
|
out.WriteRune(r - symbolOffset)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
if encodeHashPercent { // #%
|
if encodeHashPercent { // #%
|
||||||
switch r {
|
switch r {
|
||||||
case '#', '%':
|
case '#', '%':
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -43,6 +43,7 @@ var maskBits = []struct {
|
|||||||
{encoder.EncodeWin, "EncodeWin"},
|
{encoder.EncodeWin, "EncodeWin"},
|
||||||
{encoder.EncodeSlash, "EncodeSlash"},
|
{encoder.EncodeSlash, "EncodeSlash"},
|
||||||
{encoder.EncodeBackSlash, "EncodeBackSlash"},
|
{encoder.EncodeBackSlash, "EncodeBackSlash"},
|
||||||
|
{encoder.EncodeCrLf, "EncodeCrLf"},
|
||||||
{encoder.EncodeHashPercent, "EncodeHashPercent"},
|
{encoder.EncodeHashPercent, "EncodeHashPercent"},
|
||||||
{encoder.EncodeDel, "EncodeDel"},
|
{encoder.EncodeDel, "EncodeDel"},
|
||||||
{encoder.EncodeCtl, "EncodeCtl"},
|
{encoder.EncodeCtl, "EncodeCtl"},
|
||||||
@ -99,6 +100,11 @@ var allMappings = []mapping{{
|
|||||||
}, []rune{
|
}, []rune{
|
||||||
'\',
|
'\',
|
||||||
}}, {
|
}}, {
|
||||||
|
encoder.EncodeCrLf, []rune{
|
||||||
|
rune(0x0D), rune(0x0A),
|
||||||
|
}, []rune{
|
||||||
|
'␍', '␊',
|
||||||
|
}}, {
|
||||||
encoder.EncodeHashPercent, []rune{
|
encoder.EncodeHashPercent, []rune{
|
||||||
'#', '%',
|
'#', '%',
|
||||||
}, []rune{
|
}, []rune{
|
||||||
@ -354,7 +360,7 @@ func fatalW(_ int, err error) func(...interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func invalidMask(mask uint) bool {
|
func invalidMask(mask uint) bool {
|
||||||
return mask&encoder.EncodeCtl != 0 && mask&(encoder.EncodeLeftCrLfHtVt|encoder.EncodeRightCrLfHtVt) != 0
|
return mask&(encoder.EncodeCtl|encoder.EncodeCrLf) != 0 && mask&(encoder.EncodeLeftCrLfHtVt|encoder.EncodeRightCrLfHtVt) != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// construct a slice containing the runes between (l)ow (inclusive) and (h)igh (inclusive)
|
// construct a slice containing the runes between (l)ow (inclusive) and (h)igh (inclusive)
|
||||||
|
Loading…
Reference in New Issue
Block a user