| Index: template_binding/lib/src/mustache_tokens.dart
|
| diff --git a/template_binding/lib/src/mustache_tokens.dart b/template_binding/lib/src/mustache_tokens.dart
|
| deleted file mode 100644
|
| index c05dac1b83688f747bd41cfa8c9f9fb9dcaf21b2..0000000000000000000000000000000000000000
|
| --- a/template_binding/lib/src/mustache_tokens.dart
|
| +++ /dev/null
|
| @@ -1,153 +0,0 @@
|
| -// Copyright (c) 2013, 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.
|
| -
|
| -library template_binding.src.mustache_tokens;
|
| -
|
| -import 'package:observe/observe.dart';
|
| -
|
| -// Dart note: this was added to decouple the parse function below from the rest
|
| -// of template_binding. This allows using this code in command-line tools as
|
| -// well.
|
| -typedef Function DelegateFunctionFactory(String pathString);
|
| -
|
| -/**
|
| - * Represents a set of parsed tokens from a {{ mustache binding expression }}.
|
| - * This can be created by calling [parse].
|
| - *
|
| - * For performance reasons the data is stored in one linear array in [_tokens].
|
| - * This class wraps that array and provides accessors in an attempt to make the
|
| - * pattern easier to understand. See [length] and [getText] for example.
|
| - */
|
| -class MustacheTokens {
|
| - // Constants for indexing into the exploded structs in [_tokens] .
|
| - static const _TOKEN_TEXT = 0;
|
| - static const _TOKEN_ONETIME = 1;
|
| - static const _TOKEN_PATH = 2;
|
| - static const _TOKEN_PREPAREFN = 3;
|
| - static const _TOKEN_SIZE = 4;
|
| -
|
| - // There is 1 extra entry for the end text.
|
| - static const _TOKEN_ENDTEXT = 1;
|
| -
|
| - bool get hasOnePath => _tokens.length == _TOKEN_SIZE + _TOKEN_ENDTEXT;
|
| - bool get isSimplePath => hasOnePath &&
|
| - _tokens[_TOKEN_TEXT] == '' && _tokens[_TOKEN_SIZE + _TOKEN_TEXT] == '';
|
| -
|
| - /**
|
| - * [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, TEXT)+] if there is at least one
|
| - * mustache.
|
| - */
|
| - final List _tokens;
|
| -
|
| - final bool onlyOneTime;
|
| -
|
| - // Dart note: I think this is cached in JavaScript to avoid an extra
|
| - // allocation per template instance. Seems reasonable, so we do the same.
|
| - Function _combinator;
|
| - Function get combinator => _combinator;
|
| -
|
| - MustacheTokens._(this._tokens, this.onlyOneTime) {
|
| - // Should be: [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, TEXT)+].
|
| - assert((_tokens.length - _TOKEN_ENDTEXT) % _TOKEN_SIZE == 0);
|
| -
|
| - _combinator = hasOnePath ? _singleCombinator : _listCombinator;
|
| - }
|
| -
|
| - int get length => _tokens.length ~/ _TOKEN_SIZE;
|
| -
|
| - /**
|
| - * Gets the [i]th text entry. Note that [length] can be passed to get the
|
| - * final text entry.
|
| - */
|
| - String getText(int i) => _tokens[i * _TOKEN_SIZE + _TOKEN_TEXT];
|
| -
|
| - /** Gets the oneTime flag for the [i]th token. */
|
| - bool getOneTime(int i) => _tokens[i * _TOKEN_SIZE + _TOKEN_ONETIME];
|
| -
|
| - /** Gets the path for the [i]th token. */
|
| - PropertyPath getPath(int i) => _tokens[i * _TOKEN_SIZE + _TOKEN_PATH];
|
| -
|
| - /** Gets the prepareBinding function for the [i]th token. */
|
| - Function getPrepareBinding(int i) =>
|
| - _tokens[i * _TOKEN_SIZE + _TOKEN_PREPAREFN];
|
| -
|
| -
|
| - /**
|
| - * Parses {{ mustache }} bindings.
|
| - *
|
| - * Returns null if there are no matches. Otherwise returns the parsed tokens.
|
| - */
|
| - static MustacheTokens parse(String s, [DelegateFunctionFactory fnFactory]) {
|
| - if (s == null || s.isEmpty) return null;
|
| -
|
| - var tokens = null;
|
| - var length = s.length;
|
| - var lastIndex = 0;
|
| - var onlyOneTime = true;
|
| - while (lastIndex < length) {
|
| - var startIndex = s.indexOf('{{', lastIndex);
|
| - var oneTimeStart = s.indexOf('[[', lastIndex);
|
| - var oneTime = false;
|
| - var terminator = '}}';
|
| -
|
| - if (oneTimeStart >= 0 &&
|
| - (startIndex < 0 || oneTimeStart < startIndex)) {
|
| - startIndex = oneTimeStart;
|
| - oneTime = true;
|
| - terminator = ']]';
|
| - }
|
| -
|
| - var endIndex = -1;
|
| - if (startIndex >= 0) {
|
| - endIndex = s.indexOf(terminator, startIndex + 2);
|
| - }
|
| -
|
| - if (endIndex < 0) {
|
| - if (tokens == null) return null;
|
| -
|
| - tokens.add(s.substring(lastIndex)); // TEXT
|
| - break;
|
| - }
|
| -
|
| - if (tokens == null) tokens = [];
|
| - tokens.add(s.substring(lastIndex, startIndex)); // TEXT
|
| - var pathString = s.substring(startIndex + 2, endIndex).trim();
|
| - tokens.add(oneTime); // ONETIME?
|
| - onlyOneTime = onlyOneTime && oneTime;
|
| - var delegateFn = fnFactory == null ? null : fnFactory(pathString);
|
| - // Don't try to parse the expression if there's a prepareBinding function
|
| - if (delegateFn == null) {
|
| - tokens.add(new PropertyPath(pathString)); // PATH
|
| - } else {
|
| - tokens.add(null);
|
| - }
|
| - tokens.add(delegateFn); // DELEGATE_FN
|
| -
|
| - lastIndex = endIndex + 2;
|
| - }
|
| -
|
| - if (lastIndex == length) tokens.add(''); // TEXT
|
| -
|
| - return new MustacheTokens._(tokens, onlyOneTime);
|
| - }
|
| -
|
| -
|
| - // Dart note: split "combinator" into the single/list variants, so the
|
| - // argument can be typed.
|
| - String _singleCombinator(Object value) {
|
| - if (value == null) value = '';
|
| - return '${getText(0)}$value${getText(length)}';
|
| - }
|
| -
|
| - String _listCombinator(List<Object> values) {
|
| - var newValue = new StringBuffer(getText(0));
|
| - int len = this.length;
|
| - for (var i = 0; i < len; i++) {
|
| - var value = values[i];
|
| - if (value != null) newValue.write(value);
|
| - newValue.write(getText(i + 1));
|
| - }
|
| - return newValue.toString();
|
| - }
|
| -}
|
|
|