code: function _manageCache(cm, line) {
          if (!cache || !cache.tokens || cache.line !== line || cache.cm !== cm) {
              // Cache is no longer matching -> Update
              var tokens = cm.getLineTokens(line, false);
              // Add empty beginning-of-line token for backwards compatibility
              tokens.unshift(cm.getTokenAt({line: line, ch: 0}, false));
              cache = {
                  cm: cm,
                  line: line,
                  timeStamp: Date.now(),
                  tokens: tokens
              };
              cm.off("changes", _clearCache);
              cm.on("changes", _clearCache);
          }
          return cache.tokens;
      }
docs: /*
  Caches the tokens for the given editor/line if needed
  @param {!CodeMirror} cm
  @param {!number} line
  @return {Array.<Object>} (Cached) array of tokens