SwiftMarkdownObjCBridge.swift 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //
  2. // SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
  3. // SPDX-License-Identifier: GPL-3.0-or-later
  4. //
  5. import Foundation
  6. import CDMarkdownKit
  7. import UIKit
  8. @objcMembers class SwiftMarkdownObjCBridge: NSObject {
  9. static let markdownParser: CDMarkdownParser = {
  10. let markdownParser = CDMarkdownParser(font: .preferredFont(forTextStyle: .body), fontColor: NCAppBranding.chatForegroundColor())
  11. markdownParser.code.backgroundColor = .secondarySystemBackground
  12. markdownParser.code.font = .monospacedPreferredFont(forTextStyle: .body)
  13. markdownParser.syntax.backgroundColor = .secondarySystemBackground
  14. markdownParser.syntax.font = .monospacedPreferredFont(forTextStyle: .body)
  15. markdownParser.squashNewlines = false
  16. markdownParser.overwriteExistingStyle = false
  17. markdownParser.trimLeadingWhitespaces = false
  18. markdownParser.automaticLinkDetectionEnabled = false
  19. markdownParser.image.enabled = false
  20. // Don't update the font when we have a listing/quote (to not override any mentions), just the paragraph style
  21. markdownParser.list.font = nil
  22. markdownParser.list.color = nil
  23. // To correctly position list elements, we need to tell CDMarkdownKit the font to use for sizing
  24. markdownParser.list.indicatorFont = .preferredFont(forTextStyle: .body)
  25. markdownParser.quote.font = nil
  26. markdownParser.quote.color = nil
  27. return markdownParser
  28. }()
  29. static func parseMarkdown(markdownString: NSAttributedString) -> NSMutableAttributedString {
  30. return NSMutableAttributedString(attributedString: markdownParser.parse(markdownString))
  31. }
  32. static func getLayoutManager() -> CDMarkdownLayoutManager {
  33. let manager = CDMarkdownLayoutManager()
  34. manager.roundAllCorners = true
  35. return manager
  36. }
  37. }