Skip to content

Commit

Permalink
Merge pull request #51 from onevcat/fix/plist-image-files
Browse files Browse the repository at this point in the history
Ignore all strings in plist files
  • Loading branch information
onevcat authored Nov 24, 2019
2 parents 7bd4720 + 78bbab2 commit 9214348
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 44 deletions.
2 changes: 1 addition & 1 deletion Sources/FengNiaoKit/FengNiao.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ enum FileType {
case .swift: return [SwiftImageSearchRule(extensions: extensions)]
case .objc: return [ObjCImageSearchRule(extensions: extensions)]
case .xib: return [XibImageSearchRule()]
case .plist: return [PlistImageSearchRule(extensions: extensions), PlistAppIconSearchRule(extensions: extensions)]
case .plist: return [PlistImageSearchRule(extensions: extensions)]
case .pbxproj: return [PbxprojImageSearchRule(extensions: extensions)]
}
}
Expand Down
43 changes: 2 additions & 41 deletions Sources/FengNiaoKit/FileSearchRule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import Foundation

protocol FileSearchRule {
func search(in cotnent: String) -> Set<String>
func search(in content: String) -> Set<String>
}

protocol RegPatternSearchRule: FileSearchRule {
Expand Down Expand Up @@ -82,46 +82,7 @@ struct XibImageSearchRule: RegPatternSearchRule {

struct PlistImageSearchRule: RegPatternSearchRule {
let extensions: [String]
let patterns = ["<key>UIApplicationShortcutItemIconFile</key>[^<]*<string>(.*?)</string>"]
}

struct PlistAppIconSearchRule: FileSearchRule {
let extensions: [String]

func search(in content: String) -> Set<String> {
var result = Set<String>()

let groupRegexStr = "<key>CFBundleIconFiles</key>[^<]*<array>([\\w\\W]*?)</array>"
let groupRegex = try! NSRegularExpression(pattern: groupRegexStr, options: .caseInsensitive)

let groupMatches = groupRegex.matches(in: content, options: [], range: content.fullRange)
var groupContents = [String]()
for checkingResult in groupMatches {
if let range = Range(checkingResult.range(at: 1), in: content) {
let extracted = String(content[range])
groupContents.append(extracted)
}
}

guard groupContents.count > 0 else {
return []
}

let itemRegexStr = "<string>(.*?)</string>"
let itemRegex = try! NSRegularExpression(pattern: itemRegexStr, options: .caseInsensitive)
for itemContent in groupContents {
let itemMatches = itemRegex.matches(in: itemContent, options: [], range: itemContent.fullRange)

for checkingResult in itemMatches {
if let range = Range(checkingResult.range(at: 1), in: itemContent) {
let extracted = String(itemContent[range])
result.insert(extracted.plainFileName(extensions: extensions))
}
}
}

return result
}
let patterns = ["<string>(.*?)</string>"]
}

struct PbxprojImageSearchRule: RegPatternSearchRule {
Expand Down
4 changes: 2 additions & 2 deletions Tests/FengNiaoKitTests/FengNiaoKitSpec.swift
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ describe("FengNiaoKit") {
}

$0.it("plist alternate icon search rule applies") {
let searcher = PlistAppIconSearchRule(extensions: ["png"])
let searcher = PlistImageSearchRule(extensions: ["png"])
let content = "<key>CFBundleIcons</key>\n<dict>\n<key>CFBundleAlternateIcons</key>\n<dict>\n<key>ChristmasIcon</key>\n<dict>\n<key>CFBundleIconFiles</key>\n<array>\n<string>ChristmasIcon_20pt</string>\n<string>ChristmasIcon_29pt</string>\n<string>ChristmasIcon_40pt</string>\n<string>ChristmasIcon_60pt</string>\n<string>ChristmasIcon_76pt</string>\n<string>ChristmasIcon_83.5pt</string>\n<string>ChristmasIcon_1024pt</string>\n</array>\n<key>UIPrerenderedIcon</key>\n<false/>\n</dict>\n<key>NewYearIcon</key>\n<dict>\n<key>CFBundleIconFiles</key>\n<array>\n<string>NewYearIcon_20pt</string>\n<string>NewYearIcon_29pt</string>\n<string>NewYearIcon_40pt</string>\n<string>NewYearIcon_60pt</string>\n<string>NewYearIcon_76pt</string>\n<string>NewYearIcon_83.5pt</string>\n<string>NewYearIcon_1024pt</string>\n</array>\n<key>UIPrerenderedIcon</key>\n<false/>\n</dict>\n</dict>\n</dict>"

let result = searcher.search(in: content)
Expand Down Expand Up @@ -242,7 +242,7 @@ describe("FengNiaoKit") {
resourceExtensions: [],
searchInFileExtensions: ["plist"])
let result = fengniao.allUsedStringNames()
let expected: Set<String> = ["some_image"]
let expected: Set<String> = ["some_image", "some_type", "Some Image"]

try expect(result) == expected
}
Expand Down

0 comments on commit 9214348

Please sign in to comment.