mirror of
https://github.com/yuin/goldmark
synced 2025-03-04 23:04:52 +00:00
Fixes #141
This commit is contained in:
parent
feff0bb82b
commit
3c3d4481ef
4 changed files with 25 additions and 6 deletions
|
|
@ -133,3 +133,12 @@ bbb
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
//= = = = = = = = = = = = = = = = = = = = = = = =//
|
//= = = = = = = = = = = = = = = = = = = = = = = =//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
11: delimiters between ascii punctuations should be parsed
|
||||||
|
//- - - - - - - - -//
|
||||||
|
`{%`_name_`%}`
|
||||||
|
//- - - - - - - - -//
|
||||||
|
<p><code>{%</code><em>name</em><code>%}</code></p>
|
||||||
|
//= = = = = = = = = = = = = = = = = = = = = = = =//
|
||||||
|
|
|
||||||
|
|
@ -223,7 +223,7 @@ func (s *typographerParser) Parse(parent gast.Node, block text.Reader, pc parser
|
||||||
if len(line) > 4 {
|
if len(line) > 4 {
|
||||||
after = util.ToRune(line, 4)
|
after = util.ToRune(line, 4)
|
||||||
}
|
}
|
||||||
if len(line) == 3 || unicode.IsSpace(after) || unicode.IsPunct(after) {
|
if len(line) == 3 || util.IsSpaceRune(after) || util.IsPunctRune(after) {
|
||||||
node := gast.NewString(s.Substitutions[Apostrophe])
|
node := gast.NewString(s.Substitutions[Apostrophe])
|
||||||
node.SetCode(true)
|
node.SetCode(true)
|
||||||
block.Advance(1)
|
block.Advance(1)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package parser
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode"
|
|
||||||
|
|
||||||
"github.com/yuin/goldmark/ast"
|
"github.com/yuin/goldmark/ast"
|
||||||
"github.com/yuin/goldmark/text"
|
"github.com/yuin/goldmark/text"
|
||||||
|
|
@ -128,10 +127,10 @@ func ScanDelimiter(line []byte, before rune, min int, processor DelimiterProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
canOpen, canClose := false, false
|
canOpen, canClose := false, false
|
||||||
beforeIsPunctuation := unicode.IsPunct(before)
|
beforeIsPunctuation := util.IsPunctRune(before)
|
||||||
beforeIsWhitespace := unicode.IsSpace(before)
|
beforeIsWhitespace := util.IsSpaceRune(before)
|
||||||
afterIsPunctuation := unicode.IsPunct(after)
|
afterIsPunctuation := util.IsPunctRune(after)
|
||||||
afterIsWhitespace := unicode.IsSpace(after)
|
afterIsWhitespace := util.IsSpaceRune(after)
|
||||||
|
|
||||||
isLeft := !afterIsWhitespace &&
|
isLeft := !afterIsWhitespace &&
|
||||||
(!afterIsPunctuation || beforeIsWhitespace || beforeIsPunctuation)
|
(!afterIsPunctuation || beforeIsWhitespace || beforeIsPunctuation)
|
||||||
|
|
|
||||||
11
util/util.go
11
util/util.go
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"unicode"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -777,11 +778,21 @@ func IsPunct(c byte) bool {
|
||||||
return punctTable[c] == 1
|
return punctTable[c] == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsPunct returns true if the given rune is a punctuation, otherwise false.
|
||||||
|
func IsPunctRune(r rune) bool {
|
||||||
|
return int32(r) <= 256 && IsPunct(byte(r)) || unicode.IsPunct(r)
|
||||||
|
}
|
||||||
|
|
||||||
// IsSpace returns true if the given character is a space, otherwise false.
|
// IsSpace returns true if the given character is a space, otherwise false.
|
||||||
func IsSpace(c byte) bool {
|
func IsSpace(c byte) bool {
|
||||||
return spaceTable[c] == 1
|
return spaceTable[c] == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsSpace returns true if the given rune is a space, otherwise false.
|
||||||
|
func IsSpaceRune(r rune) bool {
|
||||||
|
return int32(r) <= 256 && IsSpace(byte(r)) || unicode.IsSpace(r)
|
||||||
|
}
|
||||||
|
|
||||||
// IsNumeric returns true if the given character is a numeric, otherwise false.
|
// IsNumeric returns true if the given character is a numeric, otherwise false.
|
||||||
func IsNumeric(c byte) bool {
|
func IsNumeric(c byte) bool {
|
||||||
return c >= '0' && c <= '9'
|
return c >= '0' && c <= '9'
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue