Index: polymer_1.0.4/bower_components/prism/components/prism-core.js |
diff --git a/polymer_1.0.4/bower_components/prism/components/prism-core.js b/polymer_1.0.4/bower_components/prism/components/prism-core.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..750ebb19f0f072c1dd566b481df3a8ce62d0ee87 |
--- /dev/null |
+++ b/polymer_1.0.4/bower_components/prism/components/prism-core.js |
@@ -0,0 +1,426 @@ |
+self = (typeof window !== 'undefined') |
+ ? window // if in browser |
+ : ( |
+ (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) |
+ ? self // if in worker |
+ : {} // if in node js |
+ ); |
+ |
+/** |
+ * Prism: Lightweight, robust, elegant syntax highlighting |
+ * MIT license http://www.opensource.org/licenses/mit-license.php/ |
+ * @author Lea Verou http://lea.verou.me |
+ */ |
+ |
+var Prism = (function(){ |
+ |
+// Private helper vars |
+var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i; |
+ |
+var _ = self.Prism = { |
+ util: { |
+ encode: function (tokens) { |
+ if (tokens instanceof Token) { |
+ return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); |
+ } else if (_.util.type(tokens) === 'Array') { |
+ return tokens.map(_.util.encode); |
+ } else { |
+ return tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\u00a0/g, ' '); |
+ } |
+ }, |
+ |
+ type: function (o) { |
+ return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1]; |
+ }, |
+ |
+ // Deep clone a language definition (e.g. to extend it) |
+ clone: function (o) { |
+ var type = _.util.type(o); |
+ |
+ switch (type) { |
+ case 'Object': |
+ var clone = {}; |
+ |
+ for (var key in o) { |
+ if (o.hasOwnProperty(key)) { |
+ clone[key] = _.util.clone(o[key]); |
+ } |
+ } |
+ |
+ return clone; |
+ |
+ case 'Array': |
+ return o.map(function(v) { return _.util.clone(v); }); |
+ } |
+ |
+ return o; |
+ } |
+ }, |
+ |
+ languages: { |
+ extend: function (id, redef) { |
+ var lang = _.util.clone(_.languages[id]); |
+ |
+ for (var key in redef) { |
+ lang[key] = redef[key]; |
+ } |
+ |
+ return lang; |
+ }, |
+ |
+ /** |
+ * Insert a token before another token in a language literal |
+ * As this needs to recreate the object (we cannot actually insert before keys in object literals), |
+ * we cannot just provide an object, we need anobject and a key. |
+ * @param inside The key (or language id) of the parent |
+ * @param before The key to insert before. If not provided, the function appends instead. |
+ * @param insert Object with the key/value pairs to insert |
+ * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted. |
+ */ |
+ insertBefore: function (inside, before, insert, root) { |
+ root = root || _.languages; |
+ var grammar = root[inside]; |
+ |
+ if (arguments.length == 2) { |
+ insert = arguments[1]; |
+ |
+ for (var newToken in insert) { |
+ if (insert.hasOwnProperty(newToken)) { |
+ grammar[newToken] = insert[newToken]; |
+ } |
+ } |
+ |
+ return grammar; |
+ } |
+ |
+ var ret = {}; |
+ |
+ for (var token in grammar) { |
+ |
+ if (grammar.hasOwnProperty(token)) { |
+ |
+ if (token == before) { |
+ |
+ for (var newToken in insert) { |
+ |
+ if (insert.hasOwnProperty(newToken)) { |
+ ret[newToken] = insert[newToken]; |
+ } |
+ } |
+ } |
+ |
+ ret[token] = grammar[token]; |
+ } |
+ } |
+ |
+ // Update references in other language definitions |
+ _.languages.DFS(_.languages, function(key, value) { |
+ if (value === root[inside] && key != inside) { |
+ this[key] = ret; |
+ } |
+ }); |
+ |
+ return root[inside] = ret; |
+ }, |
+ |
+ // Traverse a language definition with Depth First Search |
+ DFS: function(o, callback, type) { |
+ for (var i in o) { |
+ if (o.hasOwnProperty(i)) { |
+ callback.call(o, i, o[i], type || i); |
+ |
+ if (_.util.type(o[i]) === 'Object') { |
+ _.languages.DFS(o[i], callback); |
+ } |
+ else if (_.util.type(o[i]) === 'Array') { |
+ _.languages.DFS(o[i], callback, i); |
+ } |
+ } |
+ } |
+ } |
+ }, |
+ |
+ highlightAll: function(async, callback) { |
+ var elements = document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'); |
+ |
+ for (var i=0, element; element = elements[i++];) { |
+ _.highlightElement(element, async === true, callback); |
+ } |
+ }, |
+ |
+ highlightElement: function(element, async, callback) { |
+ // Find language |
+ var language, grammar, parent = element; |
+ |
+ while (parent && !lang.test(parent.className)) { |
+ parent = parent.parentNode; |
+ } |
+ |
+ if (parent) { |
+ language = (parent.className.match(lang) || [,''])[1]; |
+ grammar = _.languages[language]; |
+ } |
+ |
+ if (!grammar) { |
+ return; |
+ } |
+ |
+ // Set language on the element, if not present |
+ element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; |
+ |
+ // Set language on the parent, for styling |
+ parent = element.parentNode; |
+ |
+ if (/pre/i.test(parent.nodeName)) { |
+ parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; |
+ } |
+ |
+ var code = element.textContent; |
+ |
+ if(!code) { |
+ return; |
+ } |
+ |
+ code = code.replace(/^(?:\r?\n|\r)/,''); |
+ |
+ var env = { |
+ element: element, |
+ language: language, |
+ grammar: grammar, |
+ code: code |
+ }; |
+ |
+ _.hooks.run('before-highlight', env); |
+ |
+ if (async && self.Worker) { |
+ var worker = new Worker(_.filename); |
+ |
+ worker.onmessage = function(evt) { |
+ env.highlightedCode = Token.stringify(JSON.parse(evt.data), language); |
+ |
+ _.hooks.run('before-insert', env); |
+ |
+ env.element.innerHTML = env.highlightedCode; |
+ |
+ callback && callback.call(env.element); |
+ _.hooks.run('after-highlight', env); |
+ }; |
+ |
+ worker.postMessage(JSON.stringify({ |
+ language: env.language, |
+ code: env.code |
+ })); |
+ } |
+ else { |
+ env.highlightedCode = _.highlight(env.code, env.grammar, env.language); |
+ |
+ _.hooks.run('before-insert', env); |
+ |
+ env.element.innerHTML = env.highlightedCode; |
+ |
+ callback && callback.call(element); |
+ |
+ _.hooks.run('after-highlight', env); |
+ } |
+ }, |
+ |
+ highlight: function (text, grammar, language) { |
+ var tokens = _.tokenize(text, grammar); |
+ return Token.stringify(_.util.encode(tokens), language); |
+ }, |
+ |
+ tokenize: function(text, grammar, language) { |
+ var Token = _.Token; |
+ |
+ var strarr = [text]; |
+ |
+ var rest = grammar.rest; |
+ |
+ if (rest) { |
+ for (var token in rest) { |
+ grammar[token] = rest[token]; |
+ } |
+ |
+ delete grammar.rest; |
+ } |
+ |
+ tokenloop: for (var token in grammar) { |
+ if(!grammar.hasOwnProperty(token) || !grammar[token]) { |
+ continue; |
+ } |
+ |
+ var patterns = grammar[token]; |
+ patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns]; |
+ |
+ for (var j = 0; j < patterns.length; ++j) { |
+ var pattern = patterns[j], |
+ inside = pattern.inside, |
+ lookbehind = !!pattern.lookbehind, |
+ lookbehindLength = 0, |
+ alias = pattern.alias; |
+ |
+ pattern = pattern.pattern || pattern; |
+ |
+ for (var i=0; i<strarr.length; i++) { // Don’t cache length as it changes during the loop |
+ |
+ var str = strarr[i]; |
+ |
+ if (strarr.length > text.length) { |
+ // Something went terribly wrong, ABORT, ABORT! |
+ break tokenloop; |
+ } |
+ |
+ if (str instanceof Token) { |
+ continue; |
+ } |
+ |
+ pattern.lastIndex = 0; |
+ |
+ var match = pattern.exec(str); |
+ |
+ if (match) { |
+ if(lookbehind) { |
+ lookbehindLength = match[1].length; |
+ } |
+ |
+ var from = match.index - 1 + lookbehindLength, |
+ match = match[0].slice(lookbehindLength), |
+ len = match.length, |
+ to = from + len, |
+ before = str.slice(0, from + 1), |
+ after = str.slice(to + 1); |
+ |
+ var args = [i, 1]; |
+ |
+ if (before) { |
+ args.push(before); |
+ } |
+ |
+ var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias); |
+ |
+ args.push(wrapped); |
+ |
+ if (after) { |
+ args.push(after); |
+ } |
+ |
+ Array.prototype.splice.apply(strarr, args); |
+ } |
+ } |
+ } |
+ } |
+ |
+ return strarr; |
+ }, |
+ |
+ hooks: { |
+ all: {}, |
+ |
+ add: function (name, callback) { |
+ var hooks = _.hooks.all; |
+ |
+ hooks[name] = hooks[name] || []; |
+ |
+ hooks[name].push(callback); |
+ }, |
+ |
+ run: function (name, env) { |
+ var callbacks = _.hooks.all[name]; |
+ |
+ if (!callbacks || !callbacks.length) { |
+ return; |
+ } |
+ |
+ for (var i=0, callback; callback = callbacks[i++];) { |
+ callback(env); |
+ } |
+ } |
+ } |
+}; |
+ |
+var Token = _.Token = function(type, content, alias) { |
+ this.type = type; |
+ this.content = content; |
+ this.alias = alias; |
+}; |
+ |
+Token.stringify = function(o, language, parent) { |
+ if (typeof o == 'string') { |
+ return o; |
+ } |
+ |
+ if (_.util.type(o) === 'Array') { |
+ return o.map(function(element) { |
+ return Token.stringify(element, language, o); |
+ }).join(''); |
+ } |
+ |
+ var env = { |
+ type: o.type, |
+ content: Token.stringify(o.content, language, parent), |
+ tag: 'span', |
+ classes: ['token', o.type], |
+ attributes: {}, |
+ language: language, |
+ parent: parent |
+ }; |
+ |
+ if (env.type == 'comment') { |
+ env.attributes['spellcheck'] = 'true'; |
+ } |
+ |
+ if (o.alias) { |
+ var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; |
+ Array.prototype.push.apply(env.classes, aliases); |
+ } |
+ |
+ _.hooks.run('wrap', env); |
+ |
+ var attributes = ''; |
+ |
+ for (var name in env.attributes) { |
+ attributes += name + '="' + (env.attributes[name] || '') + '"'; |
+ } |
+ |
+ return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attributes + '>' + env.content + '</' + env.tag + '>'; |
+ |
+}; |
+ |
+if (!self.document) { |
+ if (!self.addEventListener) { |
+ // in Node.js |
+ return self.Prism; |
+ } |
+ // In worker |
+ self.addEventListener('message', function(evt) { |
+ var message = JSON.parse(evt.data), |
+ lang = message.language, |
+ code = message.code; |
+ |
+ self.postMessage(JSON.stringify(_.util.encode(_.tokenize(code, _.languages[lang])))); |
+ self.close(); |
+ }, false); |
+ |
+ return self.Prism; |
+} |
+ |
+// Get current script and highlight |
+var script = document.getElementsByTagName('script'); |
+ |
+script = script[script.length - 1]; |
+ |
+if (script) { |
+ _.filename = script.src; |
+ |
+ if (document.addEventListener && !script.hasAttribute('data-manual')) { |
+ document.addEventListener('DOMContentLoaded', _.highlightAll); |
+ } |
+} |
+ |
+return self.Prism; |
+ |
+})(); |
+ |
+if (typeof module !== 'undefined' && module.exports) { |
+ module.exports = Prism; |
+} |