vChewing / vChewing-macOS

威注音輸入法 macOS 版,恐怕是截至目前為止在功能多樣性方面最強的第三方免費 macOS 系統專用輸入法,採純 Swift 語言寫就。威注音的著力點是盡可能在力所能及的範圍內將整個產品的功能做得更好用,搭配特製的簡體中文與繁體中文專用辭庫。是純粹的簡體中文注音輸入法(也內贈原生繁體中文輸入模式),更具諸多威注音特色功能。目前研發管理工作均在 CSDN GitCode 進行。
https://vchewing.github.io/
Other
316 stars 10 forks source link

[備忘] 改進威注音的日期時間輸入功能,新增可自訂性。 #509

Closed ShikiSuen closed 10 months ago

ShikiSuen commented 11 months ago

此前威注音就可以迅速輸入日期、時間、星期。

威注音 3.7.0 擬引入對 InputToken 的支援、方便使用者迅速輸入日期與年份。 與小麥注音的 InputMacro 日期迅速輸入的功能不同的是,威注音允許使用者在 Token 當中給出參數、以自訂曆法(比如令和曆)。 威注音對該新功能特性的實作方式也將會與小麥注音完全不同。

此次也順便解決簡體中文模式下輸入星期的時候「週」沒能換成簡化字問題。

// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
// ====================
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
// ... with NTL restriction stating that:
// No trademark license is granted to use the trade names, trademarks, service
// marks, or product names of Contributor, except as required to fulfill notice
// requirements defined in MIT License.

import Foundation

public enum InputToken {
  case date(dateDelta: Int = 0, yearDelta: Int = 0, shortened: Bool)
  case timeNow(shortened: Bool)
  case timeZone(shortened: Bool)
  case week(dateDelta: Int = 0, shortened: Bool)
  case yearLuna(yearDelta: Int = 0)
  case yearZodiac(yearDelta: Int = 0)

  public static func parse(rawToken: String) -> InputToken? {
    guard rawToken.prefix(6) == "MACRO@" else { return nil }
    var tokenComponents = rawToken.dropFirst(6).components(separatedBy: "_")
    guard !tokenComponents.isEmpty else { return nil }

    // TODO: 回頭得根據 tokenComponents 的成分分析需要採用哪個 InputToken。
    // 這裡可以共用同一個 static lazy let 初期化的共用 DateFormatter 副本。
    // 有參數的話,參數值在「:」右側記入。
    return .timeNow(shortened: true) // 回头废掉这句
  }
}
ShikiSuen commented 10 months ago

Done.