Skip to content

Commit

Permalink
Merge pull request #19 from mac-cain13/feature/reuse-identifiers
Browse files Browse the repository at this point in the history
Support for reuseIdentifiers in R
  • Loading branch information
mac-cain13 committed Feb 1, 2015
2 parents b8bce81 + 609cd6c commit a775d93
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
10 changes: 10 additions & 0 deletions R.swift/func.swift
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,16 @@ func nibStructForNib(nib: Nib) -> Struct {
return Struct(name: nib.name, vars: instanceVars, functions: [instantiateFunc] + viewFuncs, structs: [])
}

// Reuse identifiers

func reuseIdentifierStructFromReuseIdentifierContainers(containers: [ReuseIdentifierContainer]) -> Struct {
let reuseIdentifierVars = containers
.flatMap { $0.reuseIdentifiers }
.map { Var(name: $0, type: Type._String, getter: "return \"\($0)\"") }

return Struct(name: "reuseIdentifier", vars: reuseIdentifierVars, functions: [], structs: [])
}

// Validation

func validateAllFunctionWithStoryboards(storyboards: [Storyboard]) -> Function {
Expand Down
3 changes: 3 additions & 0 deletions R.swift/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,15 @@ inputDirectories(NSProcessInfo.processInfo())
let nibs = findAllNibURLsInDirectory(url: directory)
.map { Nib(url: $0) }

let reuseIdentifierContainers = nibs.map { $0 as ReuseIdentifierContainer } + storyboards.map { $0 as ReuseIdentifierContainer }

// Generate
let structs = [
imageStructFromAssetFolders(assetFolders),
segueStructFromStoryboards(storyboards),
storyboardStructFromStoryboards(storyboards),
nibStructFromNibs(nibs),
reuseIdentifierStructFromReuseIdentifierContainers(reuseIdentifierContainers)
]

let functions = [
Expand Down
22 changes: 20 additions & 2 deletions R.swift/types.swift
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@ struct Struct: Printable {

/// MARK: Asset types

protocol ReuseIdentifierContainer {
var reuseIdentifiers: [String] { get }
}

struct AssetFolder {
let name: String
let imageAssets: [String]
Expand All @@ -156,11 +160,12 @@ struct AssetFolder {
}
}

struct Storyboard {
struct Storyboard: ReuseIdentifierContainer {
let name: String
let segues: [String]
let viewControllers: [ViewController]
let usedImageIdentifiers: [String]
let reuseIdentifiers: [String]

init(url: NSURL) {
name = url.filename!
Expand All @@ -174,6 +179,7 @@ struct Storyboard {
segues = parserDelegate.segues
viewControllers = parserDelegate.viewControllers
usedImageIdentifiers = parserDelegate.usedImageIdentifiers
reuseIdentifiers = parserDelegate.reuseIdentifiers
}

struct ViewController {
Expand All @@ -182,9 +188,10 @@ struct Storyboard {
}
}

struct Nib {
struct Nib: ReuseIdentifierContainer {
let name: String
let rootViews: [Type]
let reuseIdentifiers: [String]

init(url: NSURL) {
name = url.filename!
Expand All @@ -196,6 +203,7 @@ struct Nib {
parser.parse()

rootViews = parserDelegate.rootViews
reuseIdentifiers = parserDelegate.reuseIdentifiers
}
}

Expand All @@ -205,6 +213,7 @@ class StoryboardParserDelegate: NSObject, NSXMLParserDelegate {
var segues: [String] = []
var viewControllers: [Storyboard.ViewController] = []
var usedImageIdentifiers: [String] = []
var reuseIdentifiers: [String] = []

func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!) {
switch elementName {
Expand All @@ -223,6 +232,10 @@ class StoryboardParserDelegate: NSObject, NSXMLParserDelegate {
viewControllers.append(viewController)
}
}

if let reuseIdentifier = attributeDict["reuseIdentifier"] as? String {
reuseIdentifiers.append(reuseIdentifier)
}
}

func viewControllerFromAttributes(attributeDict: [NSObject : AnyObject], elementName: String) -> Storyboard.ViewController? {
Expand All @@ -244,6 +257,7 @@ class StoryboardParserDelegate: NSObject, NSXMLParserDelegate {
class NibParserDelegate: NSObject, NSXMLParserDelegate {
let ignoredRootViewElements = ["placeholder"]
var rootViews: [Type] = []
var reuseIdentifiers: [String] = []

// State
var isObjectsTagOpened = false;
Expand All @@ -265,6 +279,10 @@ class NibParserDelegate: NSObject, NSXMLParserDelegate {
}
}
}

if let reuseIdentifier = attributeDict["reuseIdentifier"] as? String {
reuseIdentifiers.append(reuseIdentifier)
}
}

func parser(parser: NSXMLParser!, didEndElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!) {
Expand Down

0 comments on commit a775d93

Please sign in to comment.