EastAsianWidth 1.0.1

EastAsianWidth 1.0.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2017年9月
SwiftSwift 版本4.0.0
SPM支持 SPM

ukitaka 维护。



  • ukitaka

Swift String API的扩展,用于处理东亚宽度。最常见的用例是将Unicode标量值分类为全角(全角)或半角(半角)。

// Halfwidth Katakana (半角カナ)
"アイウエオ".unicodeScalars.forEach { (u: UnicodeScalar) in
    u.isHalfwidth // true
}

// Fullwidth Katakana (全角カナ)
"アイウエオ".unicodeScalars.forEach { (u: UnicodeScalar) in
    u.isFullwidth // true
}

东亚宽度由Unicode®标准附录#11指定。

用法

UnicodeScalar 扩展

对于东亚宽度,此库提供了以下方法

/// East Asian Wide (W)
/// See: http://unicode.org/reports/tr11/#ED4
unicodeScalar.isEastAsianWide

/// East Asian Narrow (Na)
/// See: http://unicode.org/reports/tr11/#ED5
unicodeScalar.isEastAsianNarrow

/// Neutral (Not East Asian):
/// See: http://unicode.org/reports/tr11/#ED7
unicodeScalar.isEastAsianNeutral
        
/// East Asian Halfwidth (H)
/// See: http://unicode.org/reports/tr11/#ED3
unicodeScalar.isEastAsianHalfwidth

/// East Asian Fullwidth (F)
/// See: http://unicode.org/reports/tr11/#ED2
unicodeScalar.isEastAsianFullwidth
        
/// East Asian Ambiguous (A)
/// See: http://unicode.org/reports/tr11/#ED6
unicodeScalar.isEastAsianAmbiguous

如果只想知道它是全角还是半角,可以使用isFullwidth等。

// Fullwidth
unicodeScalar.isFullwidth

// Halfwidth
unicodeScalar.isHalfwidth

// NOTE:
// `isFullwidth` and `isHalfwidth` does not include East Asian Ambiguous.
// If you want to include it, you can use `isFullwidthOrAmbiguous` / `isHalfwidthOrAmbiguous` instead.
unicodeScalar.isFullwidthOrAmbiguous
unicodeScalar.isHalfwidthOrAmbiguous

String 扩展

String 扩展提供了用于检查是否存在特定东亚宽度字符的containsXXX方法。

// East Asian Width
string.containsEastAsianWideCharacters
string.containsEastAsianNarrowCharacters
string.containsEastAsianNeutralCharacters
string.containsEastAsianHalfwidthCharacters
string.containsEastAsianFullwidthCharacters
string.containsEastAsianAmbiguousCharacters

// Fullwidth or Halfwidth
string.containsFullwidthCharacters
string.containsFullwidthOrAmbiguousCharacters
string.containsHalfwidthCharacters
string.containsHalfwidthOrAmbiguousCharacters

UnicodeScalarView 扩展

UnicodeScalarView 扩展提供了用于按东亚宽度计数字符串长度的countByEastAsianWidth方法。

默认情况下,Ambiguous字符被标记为HalfwidthHalfwidth的长度为**1**,而Fullwidth为**2**。您可以使用参数配置它们。

// count by defualt settings
"あいうえおアイウエオ".unicodeScalars.countByEastAsianWidth() // 15

// you can configure with parameters.
string.unicodeScalars.countByEastAsianWidth(halfwidthAs: 2, fullwidthAs: 4, markEastAsianAmbiguousAsFullwidth: false)

为什么不支持CharacterSet ?

主要原因在于CharacterSet的技术问题。我们无法创建具有不同字节长度字符的CharacterSet的并集。

let c1 = CharacterSet(charactersIn: "\u{AAAA}")
let c2 = CharacterSet(charactersIn: "\u{AAAAA}")

c2.contains("\u{AAAAA}") // true
c1.union(c2).contains("\u{AAAAA}") // false 😫

但是,一些East Asian Width的定义包括具有不同字节长度的字符。因此,我不能支持CharacterSet...

需求

EastAsianWidth.swift需要/支持以下环境

  • Swift 4 / Xcode9
  • OS X 10.10或更高版本
  • iOS 9.0或更高版本
  • tvOS 9.0或更高版本
  • watchOS 2.0或更高版本