LMConsolidator // Add consolidate(text:).
This commit is contained in:
parent
d2046968cf
commit
2913c22d40
|
@ -77,24 +77,20 @@ extension vChewingLM {
|
|||
return false
|
||||
}
|
||||
|
||||
/// 統整給定的檔案的格式。
|
||||
/// 統整給定的字串。
|
||||
/// - Parameters:
|
||||
/// - path: 給定檔案路徑。
|
||||
/// - text: 操作對象。
|
||||
/// - shouldCheckPragma: 是否在檔案標頭完好無損的情況下略過對格式的整理。
|
||||
/// - Returns: 若整理順利或無須整理,則為真;反之為假。
|
||||
@discardableResult public static func consolidate(path: String, pragma shouldCheckPragma: Bool) -> Bool {
|
||||
let pragmaResult = checkPragma(path: path)
|
||||
if shouldCheckPragma {
|
||||
if pragmaResult {
|
||||
return true
|
||||
}
|
||||
public static func consolidate(text strProcessed: inout String, pragma shouldCheckPragma: Bool) {
|
||||
var pragmaResult: Bool {
|
||||
let realPragmaHeader = kPragmaHeader + "\n"
|
||||
if strProcessed.count <= kPragmaHeader.count { return false }
|
||||
let range = 0..<(realPragmaHeader.count)
|
||||
let fetchedPragma = ContiguousArray(strProcessed.utf8CString[range])
|
||||
return fetchedPragma == realPragmaHeader.utf8CString
|
||||
}
|
||||
|
||||
let urlPath = URL(fileURLWithPath: path)
|
||||
if FileManager.default.fileExists(atPath: path) {
|
||||
var strProcessed = ""
|
||||
do {
|
||||
strProcessed += try String(contentsOf: urlPath, encoding: .utf8)
|
||||
if shouldCheckPragma, pragmaResult { return }
|
||||
|
||||
// Step 1: Consolidating formats per line.
|
||||
// -------
|
||||
|
@ -115,10 +111,7 @@ extension vChewingLM {
|
|||
strProcessed.removeLast()
|
||||
}
|
||||
|
||||
// Step 2: Add Formatted Pragma, the Sorted Header:
|
||||
if !pragmaResult {
|
||||
strProcessed = kPragmaHeader + "\n" + strProcessed // Add Sorted Header
|
||||
}
|
||||
strProcessed = kPragmaHeader + "\n" + strProcessed // Add Pragma Header
|
||||
|
||||
// Step 3: Deduplication.
|
||||
let arrData = strProcessed.split(separator: "\n")
|
||||
|
@ -128,13 +121,30 @@ extension vChewingLM {
|
|||
|
||||
// Step 4: Remove duplicated newlines at the end of the file.
|
||||
strProcessed.regReplace(pattern: #"\n+"#, replaceWith: "\n")
|
||||
}
|
||||
|
||||
// Step 5: Write consolidated file contents.
|
||||
/// 統整給定的檔案的格式。
|
||||
/// - Parameters:
|
||||
/// - path: 給定檔案路徑。
|
||||
/// - shouldCheckPragma: 是否在檔案標頭完好無損的情況下略過對格式的整理。
|
||||
/// - Returns: 若整理順利或無須整理,則為真;反之為假。
|
||||
@discardableResult public static func consolidate(path: String, pragma shouldCheckPragma: Bool) -> Bool {
|
||||
let pragmaResult = checkPragma(path: path)
|
||||
if shouldCheckPragma {
|
||||
if pragmaResult {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
let urlPath = URL(fileURLWithPath: path)
|
||||
if FileManager.default.fileExists(atPath: path) {
|
||||
do {
|
||||
var strProcessed = try String(contentsOf: urlPath, encoding: .utf8)
|
||||
consolidate(text: &strProcessed, pragma: shouldCheckPragma)
|
||||
// Write consolidated file contents.
|
||||
try strProcessed.write(to: urlPath, atomically: false, encoding: .utf8)
|
||||
|
||||
} catch {
|
||||
vCLog("Consolidation Failed w/ File: \(path)")
|
||||
vCLog("Consolidation Failed w/ Error: \(error).")
|
||||
vCLog("Consolidation Failed w/ File: \(path), error: \(error)")
|
||||
return false
|
||||
}
|
||||
vCLog("Either Consolidation Successful Or No-Need-To-Consolidate.")
|
||||
|
|
Loading…
Reference in New Issue