diff --git a/R.swift/func.swift b/R.swift/func.swift index 4bfc20b5..53511a99 100644 --- a/R.swift/func.swift +++ b/R.swift/func.swift @@ -58,8 +58,9 @@ func sanitizedSwiftName(name: String, lowercaseFirstCharacter: Bool = true) -> S var components = name.componentsSeparatedByString("-") let firstComponent = components.removeAtIndex(0) let swiftName = components.reduce(firstComponent) { $0 + $1.capitalizedString } + let capitalizedSwiftName = lowercaseFirstCharacter ? swiftName.lowercaseFirstCharacter : swiftName - return lowercaseFirstCharacter ? swiftName.lowercaseFirstCharacter : swiftName + return contains(SwiftKeywords, capitalizedSwiftName) ? "`\(capitalizedSwiftName)`" : capitalizedSwiftName } func writeResourceFile(code: String, toFolderURL folderURL: NSURL) { diff --git a/R.swift/types.swift b/R.swift/types.swift index e1b5c504..c4ea4771 100644 --- a/R.swift/types.swift +++ b/R.swift/types.swift @@ -156,8 +156,18 @@ struct AssetFolder { init(url: NSURL, fileManager: NSFileManager) { name = url.filename! - let contents = fileManager.contentsOfDirectoryAtURL(url, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles, error: nil) as! [NSURL] - imageAssets = contents.map { $0.filename! } + // Browse asset directory recursively and list only the assets folders + var assets = [NSURL]() + let enumerator = fileManager.enumeratorAtURL(url, includingPropertiesForKeys: nil, options: .SkipsHiddenFiles, errorHandler: nil) + if let enumerator = enumerator { + for file in enumerator { + if let fileURL = file as? NSURL, pathExtension = fileURL.pathExtension where find(AssetExtensions, pathExtension) != nil { + assets.append(fileURL) + } + } + } + + imageAssets = assets.map { $0.filename! } } } diff --git a/R.swift/values.swift b/R.swift/values.swift index 6a0f3cef..c037f81b 100644 --- a/R.swift/values.swift +++ b/R.swift/values.swift @@ -43,6 +43,8 @@ let Ordinals = [ (number: 20, word: "twentieth"), ] +let AssetExtensions = ["appiconset", "launchimage", "imageset"] + let ElementNameToTypeMapping = [ "viewController": Type._UIViewController, "glkViewController": Type(name: "GLKViewController"), @@ -54,3 +56,5 @@ let ElementNameToTypeMapping = [ "avPlayerViewController": Type(name: "AVPlayerViewController"), "collectionViewController": Type(name: "UICollectionViewController"), ] + +let SwiftKeywords = ["class", "deinit", "enum", "extension", "func", "import", "init", "internal", "let", "operator", "private", "protocol", "public", "static", "struct", "subscript", "typealias", "var", "break", "case", "continue", "default", "do", "else", "fallthrough", "for", "if", "in", "return", "switch", "where", "while", "as", "dynamicType", "false", "is", "nil", "self", "Self", "super", "true", "__COLUMN__", "__FILE__", "__FUNCTION__", "__LINE__"]