Fixes more weird character combinations

This commit is contained in:
Simon Fairbairn 2020-04-11 15:04:33 +12:00
parent 898a1ca2ed
commit 4e2f5c234e
3 changed files with 34 additions and 19 deletions

View File

@ -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
}
}

View File

@ -59,7 +59,7 @@
<EnvironmentVariable
key = "SwiftyScannerScanner"
value = ""
isEnabled = "NO">
isEnabled = "YES">
</EnvironmentVariable>
<EnvironmentVariable
key = "SwiftyScannerScannerPerformanceLogging"

View File

@ -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)