diff --git a/highlight-swift/Sources/highlight-swift/highlight_swift.swift b/highlight-swift/Sources/highlight-swift/highlight_swift.swift index cd12e2c..f15ef8d 100644 --- a/highlight-swift/Sources/highlight-swift/highlight_swift.swift +++ b/highlight-swift/Sources/highlight-swift/highlight_swift.swift @@ -2,10 +2,11 @@ import Foundation import Splash @_cdecl("highlight_swift") -public func highlight(codePtr: UnsafeRawPointer, codeLen: UInt64, htmlLenPtr: UnsafeMutablePointer) -> UnsafeMutableRawPointer { - // don't free, the underlying data is owned by rust - let code = String(bytesNoCopy: UnsafeMutableRawPointer(mutating: codePtr), length: Int(codeLen), encoding: .utf8, freeWhenDone: false)! - +public func highlight(codePtr: UnsafePointer, codeLen: UInt64, htmlLenPtr: UnsafeMutablePointer) -> UnsafeMutableRawPointer { + let buf = UnsafeBufferPointer(start: codePtr, count: Int(codeLen)) + let data = Data(buffer: buf) + let code = String(data: data, encoding: .utf8)! + let highligher = SyntaxHighlighter(format: MyOutputFormat()) var html = highligher.highlight(code) let outPtr = UnsafeMutableBufferPointer.allocate(capacity: html.utf8.count) diff --git a/highlight-swift/Tests/highlight-swift-tests/HighlightTests.swift b/highlight-swift/Tests/highlight-swift-tests/HighlightTests.swift index a7eb043..c5518cb 100644 --- a/highlight-swift/Tests/highlight-swift-tests/HighlightTests.swift +++ b/highlight-swift/Tests/highlight-swift-tests/HighlightTests.swift @@ -18,7 +18,7 @@ class HighlightTests: XCTestCase { var len: UInt64 = 0 let result = code.withUTF8 { codePtr in withUnsafeMutablePointer(to: &len) { lenPtr in - highlight(codePtr: UnsafeRawPointer(codePtr.baseAddress!), codeLen: UInt64(codePtr.count), htmlLenPtr: lenPtr) + highlight(codePtr: codePtr.baseAddress!, codeLen: UInt64(codePtr.count), htmlLenPtr: lenPtr) } } let start = UnsafePointer(result.assumingMemoryBound(to: UInt8.self))