Initial project with Context and Variable.

This commit is contained in:
Kyle Fuller
2014-10-23 14:59:57 +01:00
parent c415bfe84b
commit e34084f3f0
10 changed files with 795 additions and 0 deletions

54
Stencil/Context.swift Normal file
View File

@@ -0,0 +1,54 @@
//
// Context.swift
// Stencil
//
// Created by Kyle Fuller on 23/10/2014.
// Copyright (c) 2014 Cocode. All rights reserved.
//
import Foundation
/// A container for template variables.
public class Context : Equatable {
var dictionaries:[Dictionary<String, AnyObject>]
public init(dictionary:Dictionary<String, AnyObject>) {
dictionaries = [dictionary]
}
public subscript(key: String) -> AnyObject? {
get {
for dictionary in reverse(dictionaries) {
if let value:AnyObject = dictionary[key] {
return value
}
}
return nil
}
set(value) {
if dictionaries.count > 0 {
var dictionary = dictionaries.removeLast()
dictionary[key] = value
dictionaries.append(dictionary)
}
}
}
public func push() {
push(Dictionary<String, String>())
}
public func push(dictionary:Dictionary<String, String>) {
dictionaries.append(dictionary)
}
public func pop() {
dictionaries.removeLast()
}
}
public func ==(lhs:Context, rhs:Context) -> Bool {
return lhs.dictionaries == rhs.dictionaries
}