Handle break tags at the beginning of paragraphs
This commit is contained in:
parent
35ed55edf2
commit
5fbf806e73
|
@ -35,7 +35,8 @@ digraph blockstate {
|
|||
nonEmptyBlock -> beginListItem [label = "<li>"];
|
||||
nonEmptyBlock -> endListItem [label = "</li>"];
|
||||
emptyBlock -> nonEmptyBlock [label = "non-whitespace (block break)"];
|
||||
emptyBlock -> emptyBlock [label = "whitespace (skip)\n<br>\n</pre>\nstart/end block"];
|
||||
emptyBlock -> emptyBlock [label = "whitespace (skip)\n</pre>\nstart/end block"];
|
||||
emptyBlock -> lineBreakTag [label = "<br> (append to tmp, block break)"];
|
||||
emptyBlock -> afterPreStartTag [label = "<pre> (depth = 1)"];
|
||||
emptyBlock -> beginListItem [label = "<li>"];
|
||||
emptyBlock -> endListItem [label = "</li>"];
|
||||
|
|
|
@ -19,7 +19,11 @@ import Foundation
|
|||
*/
|
||||
|
||||
struct BlockStateMachine {
|
||||
var blockState: BlockState = .start
|
||||
var blockState: BlockState = .start {
|
||||
didSet {
|
||||
print("new state: \(blockState)")
|
||||
}
|
||||
}
|
||||
let blockBreak: String
|
||||
let lineBreak: String
|
||||
let listIndentForContentOutsideItem: String
|
||||
|
@ -30,6 +34,7 @@ struct BlockStateMachine {
|
|||
|
||||
extension BlockStateMachine {
|
||||
mutating func startOrEndBlock() {
|
||||
print("start/end block")
|
||||
switch blockState {
|
||||
case .start:
|
||||
break
|
||||
|
@ -78,6 +83,7 @@ extension BlockStateMachine {
|
|||
}
|
||||
|
||||
mutating func continueBlock(char: UnicodeScalar) -> Bool {
|
||||
print("continue block: \(char.debugDescription)")
|
||||
let isNewline = char == "\n"
|
||||
let isWhitespace = isNewline || isWhitespace(char)
|
||||
switch blockState {
|
||||
|
@ -292,11 +298,14 @@ extension BlockStateMachine {
|
|||
}
|
||||
|
||||
mutating func breakTag() {
|
||||
print("break tag")
|
||||
switch blockState {
|
||||
case .start:
|
||||
break
|
||||
case .emptyBlock:
|
||||
append(lineBreak)
|
||||
blockState = .lineBreakTag
|
||||
append(blockBreak)
|
||||
temporaryBuffer.append(lineBreak)
|
||||
case .nonEmptyBlock:
|
||||
blockState = .lineBreakTag
|
||||
temporaryBuffer.append(lineBreak)
|
||||
|
|
|
@ -662,4 +662,21 @@ final class AttributedStringConverterTests: XCTestCase {
|
|||
XCTAssertEqual(convert(html, callbacks: Replace.self), result)
|
||||
}
|
||||
|
||||
func testLineBreakAtBeginningOfBlockElement() {
|
||||
let result = NSAttributedString(string: "a\n\n\n\nb", attributes: [
|
||||
.font: font,
|
||||
.paragraphStyle: NSParagraphStyle.default,
|
||||
.foregroundColor: color,
|
||||
])
|
||||
XCTAssertEqual(convert("<p>a</p><p><br></p><p>b</p>"), result)
|
||||
|
||||
let result2 = NSAttributedString(string: "a\n\n\nb\n\nc", attributes: [
|
||||
.font: font,
|
||||
.paragraphStyle: NSParagraphStyle.default,
|
||||
.foregroundColor: color,
|
||||
])
|
||||
XCTAssertEqual(convert("<p>a</p><p><br>b</p><p>c</p>"), result2)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue