public static IEnumerable<Template> Load(string path)
{
IEnumerable<Template> t;
if (templates.TryGetValue(path.ToLower(), out t))
return t;
t = Block.Parse(Path.GetFileName(path), File.ReadAllText(path)).OfType<Template>().Reverse().ToArray();
templates[path.ToLower()] = t;
string directory = Path.GetDirectoryName(path).ToLower();
if (!watchers.ContainsKey(directory))
{
var watcher = new FileSystemWatcher(directory);
watcher.Changed += (s, e) => templates.Remove(e.FullPath.ToLower());
watcher.EnableRaisingEvents = true;
watchers[directory] = watcher;
}
return t;
}