Fixes more weird character combinations
This commit is contained in:
parent
898a1ca2ed
commit
4e2f5c234e
|
@ -206,14 +206,15 @@ class SwiftyScannerNonRepeating {
|
|||
}
|
||||
|
||||
func closeTag( _ tag : String, withGroupID id : String ) {
|
||||
guard var tagGroup = self.tagGroups.first(where: { $0.groupID == id }) else {
|
||||
|
||||
guard let tagIdx = self.tagGroups.firstIndex(where: { $0.groupID == id }) else {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
var metadataString = ""
|
||||
if self.isMetadataOpen {
|
||||
let metadataCloseRange = tagGroup.tagRanges.removeLast()
|
||||
let metadataOpenRange = tagGroup.tagRanges.removeLast()
|
||||
let metadataCloseRange = self.tagGroups[tagIdx].tagRanges.removeLast()
|
||||
let metadataOpenRange = self.tagGroups[tagIdx].tagRanges.removeLast()
|
||||
|
||||
if metadataOpenRange.upperBound + 1 == (metadataCloseRange.lowerBound) {
|
||||
if self.enableLog {
|
||||
|
@ -237,14 +238,15 @@ class SwiftyScannerNonRepeating {
|
|||
}
|
||||
}
|
||||
|
||||
let closeRange = tagGroup.tagRanges.removeLast()
|
||||
let openRange = tagGroup.tagRanges.removeLast()
|
||||
let closeRange = self.tagGroups[tagIdx].tagRanges.removeLast()
|
||||
let openRange = self.tagGroups[tagIdx].tagRanges.removeLast()
|
||||
|
||||
if self.rule.balancedTags && closeRange.count != openRange.count {
|
||||
self.tagGroups[tagIdx].tagRanges.append(openRange)
|
||||
self.tagGroups[tagIdx].tagRanges.append(closeRange)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
|
||||
var shouldRemove = true
|
||||
var styles : [CharacterStyling] = []
|
||||
if openRange.upperBound + 1 == (closeRange.lowerBound) {
|
||||
|
@ -285,11 +287,11 @@ class SwiftyScannerNonRepeating {
|
|||
let difference = ( openRange.upperBound - openRange.lowerBound ) - (closeRange.upperBound - closeRange.lowerBound)
|
||||
switch difference {
|
||||
case 1...:
|
||||
for idx in openRange.upperBound - (difference - 1)...openRange.upperBound {
|
||||
self.elements[idx].type = .string
|
||||
}
|
||||
shouldRemove = false
|
||||
self.tagGroups[tagIdx].count = difference
|
||||
self.tagGroups[tagIdx].tagRanges.append( openRange.upperBound - (abs(difference) - 1)...openRange.upperBound )
|
||||
case ...(-1):
|
||||
for idx in closeRange.upperBound - (abs(difference) - 1)...closeRange.upperBound{
|
||||
for idx in closeRange.upperBound - (abs(difference) - 1)...closeRange.upperBound {
|
||||
self.elements[idx].type = .string
|
||||
}
|
||||
default:
|
||||
|
@ -300,7 +302,6 @@ class SwiftyScannerNonRepeating {
|
|||
}
|
||||
if shouldRemove {
|
||||
self.tagGroups.removeAll(where: { $0.groupID == id })
|
||||
self.isMetadataOpen = false
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
<EnvironmentVariable
|
||||
key = "SwiftyScannerScanner"
|
||||
value = ""
|
||||
isEnabled = "NO">
|
||||
isEnabled = "YES">
|
||||
</EnvironmentVariable>
|
||||
<EnvironmentVariable
|
||||
key = "SwiftyScannerScannerPerformanceLogging"
|
||||
|
|
|
@ -13,10 +13,10 @@ class SwiftyMarkdownStylingTests: SwiftyMarkdownCharacterTests {
|
|||
|
||||
func testIsolatedCase() {
|
||||
|
||||
challenge = TokenTest(input: "```code`", output: "```code`", tokens : [
|
||||
Token(type: .string, inputString: "```code`", characterStyles: [])
|
||||
challenge = TokenTest(input: "a ```b`", output: "a ```b`", tokens : [
|
||||
Token(type: .string, inputString: "a ```b`", characterStyles: [])
|
||||
])
|
||||
results = self.attempt(challenge)
|
||||
results = self.attempt(challenge, rules: [.backticks])
|
||||
if results.stringTokens.count == challenge.tokens.count {
|
||||
for (idx, token) in results.stringTokens.enumerated() {
|
||||
XCTAssertEqual(token.inputString, challenge.tokens[idx].inputString)
|
||||
|
@ -27,7 +27,6 @@ class SwiftyMarkdownStylingTests: SwiftyMarkdownCharacterTests {
|
|||
}
|
||||
XCTAssertEqual(results.foundStyles, results.expectedStyles)
|
||||
XCTAssertEqual(results.attributedString.string, challenge.output)
|
||||
|
||||
return
|
||||
|
||||
challenge = TokenTest(input: """
|
||||
|
@ -617,7 +616,22 @@ class SwiftyMarkdownStylingTests: SwiftyMarkdownCharacterTests {
|
|||
XCTAssertEqual(results.attributedString.string, challenge.output)
|
||||
|
||||
challenge = TokenTest(input: "A string with ```code`", output: "A string with ```code`", tokens : [
|
||||
Token(type: .string, inputString: "A string with ```code`", characterStyles: []),
|
||||
Token(type: .string, inputString: "A string with ```code`", characterStyles: [])
|
||||
])
|
||||
results = self.attempt(challenge)
|
||||
if results.stringTokens.count == challenge.tokens.count {
|
||||
for (idx, token) in results.stringTokens.enumerated() {
|
||||
XCTAssertEqual(token.inputString, challenge.tokens[idx].inputString)
|
||||
XCTAssertEqual(token.characterStyles as? [CharacterStyle], challenge.tokens[idx].characterStyles as? [CharacterStyle])
|
||||
}
|
||||
} else {
|
||||
XCTAssertEqual(results.stringTokens.count, challenge.tokens.count)
|
||||
}
|
||||
XCTAssertEqual(results.foundStyles, results.expectedStyles)
|
||||
XCTAssertEqual(results.attributedString.string, challenge.output)
|
||||
|
||||
challenge = TokenTest(input: "A string with ```code```", output: "A string with code", tokens : [
|
||||
Token(type: .string, inputString: "A string with ", characterStyles: []),
|
||||
Token(type: .string, inputString: "code", characterStyles: [CharacterStyle.code])
|
||||
])
|
||||
results = self.attempt(challenge)
|
||||
|
|
Loading…
Reference in New Issue