mirror of
https://github.com/coteditor/CotEditor.git
synced 2024-09-20 15:47:57 +03:00
Fix Syntax code
This commit is contained in:
parent
b002f62714
commit
f67c53020d
@ -161,7 +161,7 @@ final class EditorViewController: NSSplitViewController {
|
||||
|
||||
textView.syntaxKind = syntax.kind
|
||||
textView.inlineCommentDelimiter = syntax.commentDelimiters.inline
|
||||
textView.blockCommentDelimiters = syntax.commentDelimiters.blockPair
|
||||
textView.blockCommentDelimiters = syntax.commentDelimiters.block
|
||||
textView.syntaxCompletionWords = syntax.completionWords
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ extension Syntax: Codable {
|
||||
case comments
|
||||
|
||||
case commentDelimiters
|
||||
case outlines
|
||||
case outlines = "outlineMenu"
|
||||
case completions
|
||||
|
||||
case filenames
|
||||
@ -139,7 +139,9 @@ extension Syntax.Highlight: Codable {
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
|
||||
try container.encode(self.begin, forKey: .begin)
|
||||
try container.encode(self.end, forKey: .end)
|
||||
if self.end?.isEmpty == false {
|
||||
try container.encode(self.end, forKey: .end)
|
||||
}
|
||||
if self.isRegularExpression {
|
||||
try container.encode(true, forKey: .isRegularExpression)
|
||||
}
|
||||
@ -172,7 +174,7 @@ extension Syntax.Outline: Codable {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
|
||||
self.pattern = try container.decode(String.self, forKey: .pattern)
|
||||
self.template = try container.decode(String.self, forKey: .template)
|
||||
self.template = try container.decodeIfPresent(String.self, forKey: .template) ?? ""
|
||||
self.ignoreCase = try container.decodeIfPresent(Bool.self, forKey: .ignoreCase) ?? false
|
||||
self.bold = try container.decodeIfPresent(Bool.self, forKey: .bold) ?? false
|
||||
self.italic = try container.decodeIfPresent(Bool.self, forKey: .italic) ?? false
|
||||
|
@ -80,12 +80,19 @@ struct Syntax: Equatable {
|
||||
|
||||
struct Comment: Equatable, Codable {
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
|
||||
case inline = "inlineDelimiter"
|
||||
case blockBegin = "beginDelimiter"
|
||||
case blockEnd = "endDelimiter"
|
||||
}
|
||||
|
||||
|
||||
var inline: String?
|
||||
var blockBegin: String?
|
||||
var blockEnd: String?
|
||||
|
||||
|
||||
var blockPair: Pair<String>? {
|
||||
var block: Pair<String>? {
|
||||
|
||||
if let begin = self.blockBegin, let end = self.blockEnd { Pair(begin, end) } else { nil }
|
||||
}
|
||||
@ -206,7 +213,7 @@ struct Syntax: Equatable {
|
||||
.mapValues { $0.compactMap { try? $0.extractor } }
|
||||
.filter { !$0.value.isEmpty }
|
||||
|
||||
if let blockCommentDelimiters = self.commentDelimiters.blockPair {
|
||||
if let blockCommentDelimiters = self.commentDelimiters.block {
|
||||
nestables[.pair(blockCommentDelimiters)] = .comments
|
||||
}
|
||||
if let inlineCommentDelimiter = self.commentDelimiters.inline {
|
||||
|
@ -24,8 +24,8 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import Combine
|
||||
import Foundation
|
||||
import Combine
|
||||
import AppKit.NSMenuItem
|
||||
import UniformTypeIdentifiers
|
||||
import Yams
|
||||
@ -92,9 +92,8 @@ final class SyntaxManager: SettingFileManaging, ObservableObject {
|
||||
// load bundled syntax list
|
||||
let url = Bundle.main.url(forResource: "SyntaxMap", withExtension: "json")!
|
||||
let data = try! Data(contentsOf: url)
|
||||
let maps = try! JSONDecoder().decode([SettingName: SyntaxMap].self, from: data)
|
||||
self.bundledMaps = maps
|
||||
self.bundledSettingNames = maps.keys.sorted(options: [.localized, .caseInsensitive])
|
||||
self.bundledMaps = try! JSONDecoder().decode([SettingName: SyntaxMap].self, from: data)
|
||||
self.bundledSettingNames = self.bundledMaps.keys.sorted(options: [.localized, .caseInsensitive])
|
||||
|
||||
// sanitize user setting file extensions
|
||||
try? self.sanitizeUserSettings()
|
||||
|
@ -46,10 +46,9 @@ final class SyntaxTests: XCTestCase {
|
||||
try super.setUpWithError()
|
||||
|
||||
let bundle = Bundle(for: type(of: self))
|
||||
let urls = try XCTUnwrap(bundle.urls(forResourcesWithExtension: "yml", subdirectory: syntaxDirectoryName))
|
||||
let urls = try XCTUnwrap(bundle.urls(forResourcesWithExtension: "yml", subdirectory: self.syntaxDirectoryName))
|
||||
|
||||
// load syntaxes
|
||||
|
||||
let decoder = YAMLDecoder()
|
||||
self.syntaxes = try urls.reduce(into: [:]) { (dict, url) in
|
||||
let data = try Data(contentsOf: url)
|
||||
@ -57,12 +56,7 @@ final class SyntaxTests: XCTestCase {
|
||||
|
||||
dict[name] = try decoder.decode(Syntax.self, from: data)
|
||||
}
|
||||
|
||||
// create HTML syntax
|
||||
let htmlURL = try XCTUnwrap(urls.first { $0.lastPathComponent.contains("HTML") })
|
||||
let string = try String(contentsOf: htmlURL)
|
||||
let htmlDict = try XCTUnwrap(Yams.load(yaml: string) as? [String: Any])
|
||||
self.htmlSyntax = Syntax(dictionary: htmlDict, name: "HTML")
|
||||
self.htmlSyntax = try XCTUnwrap(self.syntaxes["HTML"])
|
||||
|
||||
XCTAssertNotNil(self.htmlSyntax)
|
||||
|
||||
@ -98,11 +92,10 @@ final class SyntaxTests: XCTestCase {
|
||||
|
||||
let syntax = Syntax.none
|
||||
|
||||
XCTAssertEqual(syntax.name, "None")
|
||||
XCTAssertEqual(syntax.kind, .code)
|
||||
XCTAssert(syntax.highlightParser.isEmpty)
|
||||
XCTAssertNil(syntax.commentDelimiters.inline)
|
||||
XCTAssertNil(syntax.commentDelimiters.blockPair)
|
||||
XCTAssertNil(syntax.commentDelimiters.block)
|
||||
}
|
||||
|
||||
|
||||
@ -110,10 +103,9 @@ final class SyntaxTests: XCTestCase {
|
||||
|
||||
let syntax = try XCTUnwrap(self.htmlSyntax)
|
||||
|
||||
XCTAssertEqual(syntax.name, "HTML")
|
||||
XCTAssertFalse(syntax.highlightParser.isEmpty)
|
||||
XCTAssertNil(syntax.commentDelimiters.inline)
|
||||
XCTAssertEqual(syntax.commentDelimiters.blockPair, Pair("<!--", "-->"))
|
||||
XCTAssertEqual(syntax.commentDelimiters.block, Pair("<!--", "-->"))
|
||||
}
|
||||
|
||||
|
||||
@ -123,7 +115,7 @@ final class SyntaxTests: XCTestCase {
|
||||
let source = try XCTUnwrap(self.htmlSource)
|
||||
|
||||
let textStorage = NSTextStorage(string: source)
|
||||
let parser = SyntaxParser(textStorage: textStorage, syntax: syntax)
|
||||
let parser = SyntaxParser(textStorage: textStorage, syntax: syntax, name: "HTML")
|
||||
|
||||
// test outline parsing with publisher
|
||||
let outlineParseExpectation = self.expectation(description: "didParseOutline")
|
||||
|
Loading…
Reference in New Issue
Block a user