Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
* dev:
  update testflight invitation link
  update Touch Bar lyrics for macOS 10.14
  trim furigana
  • Loading branch information
ddddxxx committed Sep 26, 2018
2 parents e064fd0 + 4c16ce3 commit da65419
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 20 deletions.
22 changes: 16 additions & 6 deletions LyricsX/CBridge/TouchBarPrivateAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,25 @@

@interface NSTouchBar (PrivateMethods)

// presentSystemModalFunctionBar:placement:systemTrayItemIdentifier:
// v40@0:8@16q24@32
+ (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar placement:(long long)placement systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier;
// MARK: macOS 10.14 and above

+ (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier;
+ (void)presentSystemModalTouchBar:(NSTouchBar *)touchBar placement:(long long)placement systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier NS_AVAILABLE_MAC(10.14);

+ (void)dismissSystemModalFunctionBar:(NSTouchBar *)touchBar;
+ (void)presentSystemModalTouchBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier NS_AVAILABLE_MAC(10.14);

+ (void)minimizeSystemModalFunctionBar:(NSTouchBar *)touchBar;
+ (void)dismissSystemModalTouchBar:(NSTouchBar *)touchBar NS_AVAILABLE_MAC(10.14);

+ (void)minimizeSystemModalTouchBar:(NSTouchBar *)touchBar NS_AVAILABLE_MAC(10.14);

// MARK: macOS 10.13 and below

+ (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar placement:(long long)placement systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier NS_DEPRECATED_MAC(10.12.2, 10.14);

+ (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier NS_DEPRECATED_MAC(10.12.2, 10.14);

+ (void)dismissSystemModalFunctionBar:(NSTouchBar *)touchBar NS_DEPRECATED_MAC(10.12.2, 10.14);

+ (void)minimizeSystemModalFunctionBar:(NSTouchBar *)touchBar NS_DEPRECATED_MAC(10.12.2, 10.14);

@end

Expand Down
6 changes: 5 additions & 1 deletion LyricsX/Controller/TouchBarLyrics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ class TouchBarLyrics: NSObject, NSTouchBarDelegate {
}

@objc private func presentTouchBar() {
NSTouchBar.presentSystemModalFunctionBar(touchBar, systemTrayItemIdentifier: .systemTrayItem)
if #available(OSX 10.14, *) {
NSTouchBar.presentSystemModalTouchBar(touchBar, systemTrayItemIdentifier: .systemTrayItem)
} else {
NSTouchBar.presentSystemModalFunctionBar(touchBar, systemTrayItemIdentifier: .systemTrayItem)
}
}

@objc private func handleLyricsDisplay() {
Expand Down
2 changes: 1 addition & 1 deletion LyricsX/Supporting Files/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>1.4.1</string>
<key>CFBundleVersion</key>
<string>1918</string>
<string>1920</string>
<key>Fabric</key>
<dict>
<key>APIKey</key>
Expand Down
40 changes: 40 additions & 0 deletions LyricsX/Utility/CFExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,46 @@ extension CFStringTokenizer {
// swiftlint:disable:next force_cast
return arr as! [CFStringTokenizerTokenType]
}

func currentFuriganaAnnotation(in string: NSString) -> (NSString, NSRange)? {
let range = currentTokenRange()
let tokenStr = string.substring(with: range) as NSString
guard let latin = currentTokenAttribute(.latinTranscription),
let katakana = latin.applyingTransform(.latinToKatakana, reverse: false) as NSString?,
let hiragana = latin.applyingTransform(.latinToHiragana, reverse: false) as NSString?,
katakana.length > 0,
katakana != tokenStr,
hiragana != tokenStr else {
return nil
}
let prefixLength = tokenStr.commonPrefixLength(with: hiragana)
let suffixLength = tokenStr.commonSuffixLength(with: hiragana)
let trimmedRange = NSRange(location: prefixLength,
length: hiragana.length - prefixLength - suffixLength)
let trimmedString = hiragana.substring(with: trimmedRange) as NSString
let rangeToAnnotate = NSRange(location: range.location + prefixLength,
length: range.length - prefixLength - suffixLength)
return (trimmedString, rangeToAnnotate)
}
}

private extension NSString {

func commonPrefixLength(with string: NSString) -> Int {
var i = 0
while i < length, i < string.length, character(at: i) == string.character(at: i) {
i += 1
}
return i
}

func commonSuffixLength(with string: NSString) -> Int {
var i = 0
while i < length, i < string.length, character(at: length - 1 - i) == string.character(at: string.length - 1 - i) {
i += 1
}
return i
}
}

extension CFStringTokenizer: IteratorProtocol, Sequence {
Expand Down
15 changes: 4 additions & 11 deletions LyricsX/View/KaraokeLabel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -78,26 +78,19 @@ class KaraokeLabel: NSTextField {
let shouldDrawFurigana = drawFurigana && string.dominantLanguage == "ja"
let tokenizer = CFStringTokenizer.create(string)
for tokenType in tokenizer where tokenType.contains(.isCJWordMask) {
let range = tokenizer.currentTokenRange()
if isVertical {
let tokenRange = tokenizer.currentTokenRange()
let attr: [NSAttributedStringKey: Any] = [
.verticalGlyphForm: true,
.baselineOffset: (font?.pointSize ?? 24) * 0.25,
]
attrString.addAttributes(attr, range: range)
attrString.addAttributes(attr, range: tokenRange)
}

guard shouldDrawFurigana else { continue }
let tokenStr = string.substring(with: range) as NSString
if let latin = tokenizer.currentTokenAttribute(.latinTranscription),
let katakana = latin.applyingTransform(.latinToKatakana, reverse: false) as NSString?,
let hiragana = latin.applyingTransform(.latinToHiragana, reverse: false) as NSString?,
katakana.length > 0,
katakana != tokenStr,
hiragana != tokenStr {
if let (furigana, range) = tokenizer.currentFuriganaAnnotation(in: string) {
var attr: [NSAttributedStringKey: Any] = [.rubyAnnotationSizeFactor: 0.5]
attr[.foregroundColor] = textColor // Set ruby text color but it seems doesn't work.
let annotation = CTRubyAnnotation.create(hiragana, attributes: attr)
let annotation = CTRubyAnnotation.create(furigana, attributes: attr)
attrString.addAttribute(.rubyAnnotation, value: annotation, range: range)
}
}
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ LyricsX is a plugin for iTunes, Spotify and Vox, which auto search and download

LyricsX for iOS is in beta stage.

Fill in [this form](https://goo.gl/forms/yblfWFbsDZDkYqU53) for TestFlight invitation, and join the [Telegram group](https://telegram.me/LyricsXTestFlight).
[Install via TestFlight](https://testflight.apple.com/join/pjjhQLZJ), and join the [Telegram group](https://telegram.me/LyricsXTestFlight).

## Installation

Expand Down

0 comments on commit da65419

Please sign in to comment.