Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Unified Diff: client/dom/scripts/templateloader.py

Issue 9845043: Rename client/{dom,html} to lib/{dom,html} . (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « client/dom/scripts/systemwrapping.py ('k') | client/dom/scripts/templateloader_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/dom/scripts/templateloader.py
===================================================================
--- client/dom/scripts/templateloader.py (revision 5796)
+++ client/dom/scripts/templateloader.py (working copy)
@@ -1,113 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Template loader and preprocessor.
-#
-# Preprocessor language:
-#
-# $if VAR
-# $else
-# $endif
-#
-# VAR must be defined in the conditions dictionary.
-
-import os
-
-class TemplateLoader(object):
- """Loads template files from a path."""
-
- def __init__(self, root, subpaths, conditions = {}):
- """Initializes loader.
-
- Args:
- root - a string, the directory under which the templates are stored.
- subpaths - a list of strings, subpaths of root in search order.
- conditions - a dictionay from strings to booleans. Any conditional
- expression must be a key in the map.
- """
- self._root = root
- self._subpaths = subpaths
- self._conditions = conditions
- self._cache = {}
-
- def TryLoad(self, name):
- """Returns content of template file as a string, or None of not found."""
- if name in self._cache:
- return self._cache[name]
-
- for subpath in self._subpaths:
- template_file = os.path.join(self._root, subpath, name)
- if os.path.exists(template_file):
- template = ''.join(open(template_file).readlines())
- template = self._Preprocess(template, template_file)
- self._cache[name] = template
- return template
-
- return None
-
- def Load(self, name):
- """Returns contents of template file as a string, or raises an exception."""
- template = self.TryLoad(name)
- if template is not None: # Can be empty string
- return template
- raise Exception("Could not find template '%s' on %s / %s" % (
- name, self._root, self._subpaths))
-
- def _Preprocess(self, template, filename):
- def error(lineno, message):
- raise Exception('%s:%s: %s' % (filename, lineno, message))
-
- lines = template.splitlines(True)
- out = []
-
- condition_stack = []
- active = True
- seen_else = False
-
- for (lineno, full_line) in enumerate(lines):
- line = full_line.strip()
-
- if line.startswith('$'):
- words = line.split()
- directive = words[0]
-
- if directive == '$if':
- if len(words) != 2:
- error(lineno, '$if does not have single variable')
- variable = words[1]
- if variable in self._conditions:
- condition_stack.append((active, seen_else))
- active = self._conditions[variable]
- seen_else = False
- else:
- error(lineno, "Unknown $if variable '%s'" % variable)
-
- elif directive == '$else':
- if not condition_stack:
- error(lineno, '$else without $if')
- if seen_else:
- raise error(lineno, 'Double $else')
- seen_else = True
- active = not active
-
- elif directive == '$endif':
- if not condition_stack:
- error(lineno, '$endif without $if')
- (active, seen_else) = condition_stack.pop()
-
- else:
- # Something else, like '$!MEMBERS'
- if active:
- out.append(full_line)
-
- else:
- if active:
- out.append(full_line);
- continue
-
- if condition_stack:
- error(len(lines), 'Unterminated $if')
-
- return ''.join(out)
« no previous file with comments | « client/dom/scripts/systemwrapping.py ('k') | client/dom/scripts/templateloader_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698