fix: align numbered list markers with the text baseline
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import AppKit
|
||||
import Testing
|
||||
@testable import Conjure
|
||||
|
||||
@Test @MainActor func numberedMarkersShareTheBodyTextBaseline() throws {
|
||||
_ = NSApplication.shared
|
||||
let editor = NotesTextView(frame: NSRect(x: 0, y: 0, width: 400, height: 200))
|
||||
for source in ["1. 1", "123) 123", " 12. 12"] {
|
||||
editor.setMarkdownContents(NSAttributedString(string: source))
|
||||
MarkdownHighlighting.apply(to: editor)
|
||||
editor.refreshTasks()
|
||||
let layout = try #require(editor.layoutManager)
|
||||
let container = try #require(editor.textContainer)
|
||||
layout.ensureLayout(for: container)
|
||||
let text = editor.string as NSString
|
||||
let marker = text.range(of: "\u{fffc}")
|
||||
let body = NSRange(location: NSMaxRange(marker) + 1, length: text.length - NSMaxRange(marker) - 1)
|
||||
var bottoms: [Int] = []
|
||||
for range in [marker, body] {
|
||||
let bitmap = try #require(NSBitmapImageRep(bitmapDataPlanes: nil, pixelsWide: 400, pixelsHigh: 80,
|
||||
bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false,
|
||||
colorSpaceName: .deviceRGB, bytesPerRow: 0, bitsPerPixel: 0))
|
||||
let bitmapContext = try #require(NSGraphicsContext(bitmapImageRep: bitmap))
|
||||
bitmapContext.cgContext.translateBy(x: 0, y: 80)
|
||||
bitmapContext.cgContext.scaleBy(x: 1, y: -1)
|
||||
let context = NSGraphicsContext(cgContext: bitmapContext.cgContext, flipped: true)
|
||||
NSGraphicsContext.saveGraphicsState()
|
||||
NSGraphicsContext.current = context
|
||||
context.cgContext.clear(CGRect(x: 0, y: 0, width: 400, height: 80))
|
||||
layout.drawGlyphs(forGlyphRange: layout.glyphRange(forCharacterRange: range, actualCharacterRange: nil), at: .zero)
|
||||
NSGraphicsContext.restoreGraphicsState()
|
||||
var bottom = -1
|
||||
for y in 0..<80 {
|
||||
for x in 0..<400 where (bitmap.colorAt(x: x, y: y)?.alphaComponent ?? 0) > 0.2 { bottom = y }
|
||||
}
|
||||
try #require(bottom >= 0)
|
||||
bottoms.append(bottom)
|
||||
}
|
||||
#expect(abs(bottoms[0] - bottoms[1]) <= 1, "Marker/body ink baseline for \(source)")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user