From a0bff9ca5d260c33d4054935ecdb03c5dd67da4d Mon Sep 17 00:00:00 2001 From: 1024jp <1024jp@wolfrosch.com> Date: Sat, 6 May 2017 09:52:47 +0900 Subject: [PATCH] Improve encoding declaration detecion (close #698) --- CHANGELOG.md | 1 + CotEditor/Sources/String+Encoding.swift | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe681de99..920a7b2b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ develop - Improve auto-brackets/quotes insertion behavior with multiple selections. - Improve the setting file naming rule for when the name overwraps with an existing setting. - Improve condition to insert a closing quote automatically. +- Improve the encoding declaration detection. - Update “Ruby” syntax style to fix commands highlight. - Update “MATLAB” syntax style to fix strings highlight. - Remove less useful “Inline script menu items into contextual menu” option. diff --git a/CotEditor/Sources/String+Encoding.swift b/CotEditor/Sources/String+Encoding.swift index ba20ecd67..69e0cbbda 100644 --- a/CotEditor/Sources/String+Encoding.swift +++ b/CotEditor/Sources/String+Encoding.swift @@ -223,6 +223,7 @@ extension String { let stringToScan = self.substring(to: scanIndex) let scanner = Scanner(string: stringToScan) // scan only the beginning of string let stopSet = CharacterSet(charactersIn: "\"\' \n\r") + let invalidDelimiterSet = CharacterSet.alphanumerics.subtracting(CharacterSet(charactersIn: "\"\' ")).inverted var scannedString: NSString? scanner.charactersToBeSkipped = CharacterSet(charactersIn: "\"\' ") @@ -234,15 +235,18 @@ extension String { while !scanner.isAtEnd { scanner.scanUpTo(tag, into: nil) if scanner.scanString(tag, into: nil), + !scanner.scanCharacters(from: invalidDelimiterSet, into: nil), scanner.scanUpToCharacters(from: stopSet, into: &scannedString) { break } } + if scannedString != nil { break } } guard let ianaCharSetName = scannedString else { return nil } + // convert IANA CharSet name to CFStringEncoding guard let cfEncoding: CFStringEncoding = { // simply convert expect for "Shift_JIS"