aboutsummaryrefslogtreecommitdiff
path: root/Map/Views/MapTextEditor.swift
diff options
context:
space:
mode:
authorRuben Beltran del Rio <ruben@unlimited.pizza>2023-05-07 15:22:54 +0200
committerRuben Beltran del Rio <ruben@unlimited.pizza>2023-05-07 15:22:54 +0200
commitfdb4633d3e9158e457d57e820df6e1efb4df39c2 (patch)
tree176cad99cb9befc0a65a7af02561019e811814de /Map/Views/MapTextEditor.swift
parent75a0e4509a70055851b085f3f7293ae1cf48164c (diff)
Update to support notes + new style2.0.0
Diffstat (limited to 'Map/Views/MapTextEditor.swift')
-rw-r--r--Map/Views/MapTextEditor.swift148
1 files changed, 0 insertions, 148 deletions
diff --git a/Map/Views/MapTextEditor.swift b/Map/Views/MapTextEditor.swift
deleted file mode 100644
index 4fbff82..0000000
--- a/Map/Views/MapTextEditor.swift
+++ /dev/null
@@ -1,148 +0,0 @@
-import Cocoa
-import SwiftUI
-
-class MapTextEditorController: NSViewController {
-
- @Binding var text: String
- var colorScheme: ColorScheme
-
- private let vertexRegex = MapParsingPatterns.vertex
- private let edgeRegex = MapParsingPatterns.edge
- private let blockerRegex = MapParsingPatterns.blocker
- private let opportunityRegex = MapParsingPatterns.opportunity
- private let stageRegex = MapParsingPatterns.stage
-
- private let debouncer: Debouncer = Debouncer(seconds: 0.2)
-
- init(text: Binding<String>, colorScheme: ColorScheme) {
- self._text = text
- self.colorScheme = colorScheme
- super.init(nibName: nil, bundle: nil)
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- override func loadView() {
- let scrollView = NSTextView.scrollableTextView()
- let textView = scrollView.documentView as! NSTextView
-
- scrollView.translatesAutoresizingMaskIntoConstraints = false
-
- textView.allowsUndo = true
- textView.delegate = self
- textView.textStorage?.delegate = self
- textView.string = self.text
- textView.isEditable = true
- textView.font = .monospacedSystemFont(ofSize: 16.0, weight: .regular)
- self.view = scrollView
- }
-
- override func viewDidAppear() {
- self.view.window?.makeFirstResponder(self.view)
- }
-
- func updateColorScheme(_ colorScheme: ColorScheme) {
- self.colorScheme = colorScheme
- }
-}
-
-extension MapTextEditorController: NSTextViewDelegate {
-
- func textDidChange(_ obj: Notification) {
- if let textField = obj.object as? NSTextView {
- self.text = textField.string
- }
- }
-
- func textView(_ view: NSTextView, shouldChangeTextIn: NSRange, replacementString: String?) -> Bool
- {
- let range = Range(shouldChangeTextIn, in: view.string)
- let target = view.string[range!]
-
- if target == "--" {
- return false
- }
-
- return true
- }
-}
-
-extension MapTextEditorController: NSTextStorageDelegate {
- override func textStorageDidProcessEditing(_ obj: Notification) {
- if let textStorage = obj.object as? NSTextStorage {
- debouncer.debounce {
- DispatchQueue.main.async {
- self.colorizeText(textStorage: textStorage)
- }
- }
- }
- }
-
- private func colorizeText(textStorage: NSTextStorage) {
- let range = NSMakeRange(0, textStorage.length)
- var matches = vertexRegex.matches(in: textStorage.string, options: [], range: range)
- let colors = MapColor.colorForScheme(colorScheme)
-
- for match in matches {
- textStorage.addAttributes([.foregroundColor: colors.syntax.vertex], range: match.range(at: 1))
- textStorage.addAttributes([.foregroundColor: colors.syntax.number], range: match.range(at: 2))
- textStorage.addAttributes([.foregroundColor: colors.syntax.number], range: match.range(at: 3))
- textStorage.addAttributes([.foregroundColor: colors.syntax.option], range: match.range(at: 4))
- }
-
- matches = edgeRegex.matches(in: textStorage.string, options: [], range: range)
-
- for match in matches {
- textStorage.addAttributes([.foregroundColor: colors.syntax.vertex], range: match.range(at: 1))
- let arrowRange = match.range(at: 2)
- textStorage.addAttributes(
- [.foregroundColor: colors.syntax.symbol],
- range: NSMakeRange(arrowRange.lowerBound - 1, arrowRange.length + 1))
- textStorage.addAttributes([.foregroundColor: colors.syntax.vertex], range: match.range(at: 3))
- }
-
- matches = opportunityRegex.matches(in: textStorage.string, options: [], range: range)
-
- for match in matches {
- textStorage.addAttributes([.foregroundColor: colors.syntax.option], range: match.range(at: 1))
- textStorage.addAttributes([.foregroundColor: colors.syntax.vertex], range: match.range(at: 2))
- textStorage.addAttributes([.foregroundColor: colors.syntax.symbol], range: match.range(at: 3))
- textStorage.addAttributes([.foregroundColor: colors.syntax.number], range: match.range(at: 4))
- }
-
- matches = blockerRegex.matches(in: textStorage.string, options: [], range: range)
-
- for match in matches {
- textStorage.addAttributes([.foregroundColor: colors.syntax.option], range: match.range(at: 1))
- textStorage.addAttributes([.foregroundColor: colors.syntax.vertex], range: match.range(at: 2))
- }
-
- matches = stageRegex.matches(in: textStorage.string, options: [], range: range)
-
- for match in matches {
- textStorage.addAttributes([.foregroundColor: colors.syntax.option], range: match.range(at: 1))
- textStorage.addAttributes([.foregroundColor: colors.syntax.number], range: match.range(at: 2))
- }
- }
-}
-
-struct MapTextEditor: NSViewControllerRepresentable {
-
- @Binding var text: String
- let colorScheme: ColorScheme
-
- func makeNSViewController(
- context: NSViewControllerRepresentableContext<MapTextEditor>
- ) -> MapTextEditorController {
- return MapTextEditorController(text: $text, colorScheme: colorScheme)
- }
-
- func updateNSViewController(
- _ nsViewController: MapTextEditorController,
- context: NSViewControllerRepresentableContext<MapTextEditor>
- ) {
- nsViewController.updateColorScheme(context.environment.colorScheme)
- }
-}