1
1
mirror of https://github.com/go-gitea/gitea synced 2024-11-17 23:54:25 +00:00
gitea/public/vendor/plugins/codemirror/mode/pegjs/pegjs.js
Michael Lustfield a915a09e4f Moved vendored js/css into public/vendor and documented sources (#1484) (#2241)
* Cleaning up public/ and documenting js/css libs.

This commit mostly addresses #1484 by moving vendor'ed plugins into a
vendor/ directory and documenting their upstream source and license in
vendor/librejs.html.

This also proves gitea is using only open source js/css libraries which
helps toward reaching #1524.

* Removing unused css file.

The version of this file in use is located at:
  vendor/plugins/highlight/github.css

* Cleaned up librejs.html and added javascript header

A SafeJS function was added to templates/helper.go to allow keeping
comments inside of javascript.

A javascript comment was added in the header of templates/base/head.tmpl
to mark all non-inline source as free.

The librejs.html file was updated to meet the current librejs spec. I
have now verified that the librejs plugin detects most of the scripts
included in gitea and suspect the non-free detections are the result of
a bug in the plugin. I believe this commit is enough to meet the C0.0
requirement of #1534.

* Updating SafeJS function per lint suggestion

* Added VERSIONS file, per request
2017-08-23 16:58:05 +02:00

115 lines
3.5 KiB
JavaScript

// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"), require("../javascript/javascript"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror", "../javascript/javascript"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineMode("pegjs", function (config) {
var jsMode = CodeMirror.getMode(config, "javascript");
function identifier(stream) {
return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);
}
return {
startState: function () {
return {
inString: false,
stringType: null,
inComment: false,
inCharacterClass: false,
braced: 0,
lhs: true,
localState: null
};
},
token: function (stream, state) {
if (stream)
//check for state changes
if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) {
state.stringType = stream.peek();
stream.next(); // Skip quote
state.inString = true; // Update state
}
if (!state.inString && !state.inComment && stream.match(/^\/\*/)) {
state.inComment = true;
}
//return state
if (state.inString) {
while (state.inString && !stream.eol()) {
if (stream.peek() === state.stringType) {
stream.next(); // Skip quote
state.inString = false; // Clear flag
} else if (stream.peek() === '\\') {
stream.next();
stream.next();
} else {
stream.match(/^.[^\\\"\']*/);
}
}
return state.lhs ? "property string" : "string"; // Token style
} else if (state.inComment) {
while (state.inComment && !stream.eol()) {
if (stream.match(/\*\//)) {
state.inComment = false; // Clear flag
} else {
stream.match(/^.[^\*]*/);
}
}
return "comment";
} else if (state.inCharacterClass) {
while (state.inCharacterClass && !stream.eol()) {
if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) {
state.inCharacterClass = false;
}
}
} else if (stream.peek() === '[') {
stream.next();
state.inCharacterClass = true;
return 'bracket';
} else if (stream.match(/^\/\//)) {
stream.skipToEnd();
return "comment";
} else if (state.braced || stream.peek() === '{') {
if (state.localState === null) {
state.localState = CodeMirror.startState(jsMode);
}
var token = jsMode.token(stream, state.localState);
var text = stream.current();
if (!token) {
for (var i = 0; i < text.length; i++) {
if (text[i] === '{') {
state.braced++;
} else if (text[i] === '}') {
state.braced--;
}
};
}
return token;
} else if (identifier(stream)) {
if (stream.peek() === ':') {
return 'variable';
}
return 'variable-2';
} else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) {
stream.next();
return 'bracket';
} else if (!stream.eatSpace()) {
stream.next();
}
return null;
}
};
}, "javascript");
});