emphasis: Fix reading of prev/next rune for multibyte characters
This commit is contained in:
parent
0f145082ad
commit
a520664dc7
4 changed files with 18 additions and 4 deletions
|
@ -371,19 +371,30 @@ func (d *Document) parseEmphasis(input string, start int, isRaw bool) (int, Node
|
|||
// see org-emphasis-regexp-components (emacs elisp variable)
|
||||
|
||||
func hasValidPreAndBorderChars(input string, i int) bool {
|
||||
return (i+1 >= len(input) || isValidBorderChar(rune(input[i+1]))) && (i == 0 || isValidPreChar(rune(input[i-1])))
|
||||
return isValidBorderChar(nextRune(input, i)) && isValidPreChar(prevRune(input, i))
|
||||
}
|
||||
|
||||
func hasValidPostAndBorderChars(input string, i int) bool {
|
||||
return (i == 0 || isValidBorderChar(rune(input[i-1]))) && (i+1 >= len(input) || isValidPostChar(rune(input[i+1])))
|
||||
return (isValidPostChar(nextRune(input, i))) && isValidBorderChar(prevRune(input, i))
|
||||
}
|
||||
|
||||
func prevRune(input string, i int) rune {
|
||||
r, _ := utf8.DecodeLastRuneInString(input[:i])
|
||||
return r
|
||||
}
|
||||
|
||||
func nextRune(input string, i int) rune {
|
||||
_, c := utf8.DecodeRuneInString(input[i:])
|
||||
r, _ := utf8.DecodeRuneInString(input[i+c:])
|
||||
return r
|
||||
}
|
||||
|
||||
func isValidPreChar(r rune) bool {
|
||||
return unicode.IsSpace(r) || strings.ContainsRune(`-({'"`, r)
|
||||
return r == utf8.RuneError || unicode.IsSpace(r) || strings.ContainsRune(`-({'"`, r)
|
||||
}
|
||||
|
||||
func isValidPostChar(r rune) bool {
|
||||
return unicode.IsSpace(r) || strings.ContainsRune(`-.,:!?;'")}[`, r)
|
||||
return r == utf8.RuneError || unicode.IsSpace(r) || strings.ContainsRune(`-.,:!?;'")}[`, r)
|
||||
}
|
||||
|
||||
func isValidBorderChar(r rune) bool { return !unicode.IsSpace(r) }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue