|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
/*
|
|
|
- * Pig Latin Mode for CodeMirror 2
|
|
|
|
|
|
|
+ * Pig Latin Mode for CodeMirror 2
|
|
|
* @author Prasanth Jayachandran
|
|
* @author Prasanth Jayachandran
|
|
|
* @link https://github.com/prasanthj/pig-codemirror-2
|
|
* @link https://github.com/prasanthj/pig-codemirror-2
|
|
|
* This implementation is adapted from PL/SQL mode in CodeMirror 2.
|
|
* This implementation is adapted from PL/SQL mode in CodeMirror 2.
|
|
@@ -9,20 +9,20 @@ CodeMirror.defineMode("pig", function(_config, parserConfig) {
|
|
|
builtins = parserConfig.builtins,
|
|
builtins = parserConfig.builtins,
|
|
|
types = parserConfig.types,
|
|
types = parserConfig.types,
|
|
|
multiLineStrings = parserConfig.multiLineStrings;
|
|
multiLineStrings = parserConfig.multiLineStrings;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
var isOperatorChar = /[*+\-%<>=&?:\/!|]/;
|
|
var isOperatorChar = /[*+\-%<>=&?:\/!|]/;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
function chain(stream, state, f) {
|
|
function chain(stream, state, f) {
|
|
|
state.tokenize = f;
|
|
state.tokenize = f;
|
|
|
return f(stream, state);
|
|
return f(stream, state);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
var type;
|
|
var type;
|
|
|
function ret(tp, style) {
|
|
function ret(tp, style) {
|
|
|
type = tp;
|
|
type = tp;
|
|
|
return style;
|
|
return style;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
function tokenComment(stream, state) {
|
|
function tokenComment(stream, state) {
|
|
|
var isEnd = false;
|
|
var isEnd = false;
|
|
|
var ch;
|
|
var ch;
|
|
@@ -35,7 +35,7 @@ CodeMirror.defineMode("pig", function(_config, parserConfig) {
|
|
|
}
|
|
}
|
|
|
return ret("comment", "comment");
|
|
return ret("comment", "comment");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
function tokenString(quote) {
|
|
function tokenString(quote) {
|
|
|
return function(stream, state) {
|
|
return function(stream, state) {
|
|
|
var escaped = false, next, end = false;
|
|
var escaped = false, next, end = false;
|
|
@@ -50,10 +50,10 @@ CodeMirror.defineMode("pig", function(_config, parserConfig) {
|
|
|
return ret("string", "error");
|
|
return ret("string", "error");
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
function tokenBase(stream, state) {
|
|
function tokenBase(stream, state) {
|
|
|
var ch = stream.next();
|
|
var ch = stream.next();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// is a start of string?
|
|
// is a start of string?
|
|
|
if (ch == '"' || ch == "'")
|
|
if (ch == '"' || ch == "'")
|
|
|
return chain(stream, state, tokenString(ch));
|
|
return chain(stream, state, tokenString(ch));
|
|
@@ -115,7 +115,7 @@ CodeMirror.defineMode("pig", function(_config, parserConfig) {
|
|
|
return ret("variable", "pig-word");
|
|
return ret("variable", "pig-word");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// Interface
|
|
// Interface
|
|
|
return {
|
|
return {
|
|
|
startState: function() {
|
|
startState: function() {
|
|
@@ -124,7 +124,7 @@ CodeMirror.defineMode("pig", function(_config, parserConfig) {
|
|
|
startOfLine: true
|
|
startOfLine: true
|
|
|
};
|
|
};
|
|
|
},
|
|
},
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
token: function(stream, state) {
|
|
token: function(stream, state) {
|
|
|
if(stream.eatSpace()) return null;
|
|
if(stream.eatSpace()) return null;
|
|
|
var style = state.tokenize(stream, state);
|
|
var style = state.tokenize(stream, state);
|
|
@@ -140,9 +140,10 @@ CodeMirror.defineMode("pig", function(_config, parserConfig) {
|
|
|
return obj;
|
|
return obj;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
// builtin funcs taken from trunk revision 1303237
|
|
// builtin funcs taken from trunk revision 1303237
|
|
|
- var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL "
|
|
|
|
|
- + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS "
|
|
|
|
|
|
|
+ var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL "
|
|
|
|
|
+ + "CONCAT COPYFROMLOCAL COPYTOLOCAL CAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS "
|
|
|
+ "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG "
|
|
+ "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG "
|
|
|
+ "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN "
|
|
+ "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN "
|
|
|
+ "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER "
|
|
+ "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER "
|
|
@@ -150,18 +151,18 @@ CodeMirror.defineMode("pig", function(_config, parserConfig) {
|
|
|
+ "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA "
|
|
+ "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA "
|
|
|
+ "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE "
|
|
+ "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE "
|
|
|
+ "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG "
|
|
+ "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG "
|
|
|
- + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER ";
|
|
|
|
|
-
|
|
|
|
|
|
|
+ + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER EVAL PIGDUMP PIGSTORAGE";
|
|
|
|
|
+
|
|
|
// taken from QueryLexer.g
|
|
// taken from QueryLexer.g
|
|
|
- var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP "
|
|
|
|
|
|
|
+ var pKeywords = "%DECLARE %DEFAULT VOID IMPORT RETURNS ARRANGE DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP CP CD DU "
|
|
|
+ "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL "
|
|
+ "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL "
|
|
|
- + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE "
|
|
|
|
|
- + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE "
|
|
|
|
|
- + "NEQ MATCHES TRUE FALSE REGISTER DUMP";
|
|
|
|
|
-
|
|
|
|
|
|
|
+ + "PARTITION GROUP AND ANY OR NOT GENERATE FLATTEN ASC DESC DESCRIBE EXPLAIN IS STREAM THROUGH STORE MAPREDUCE "
|
|
|
|
|
+ + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE "
|
|
|
|
|
+ + "NEQ MATCHES TRUE FALSE REGISTER DUMP EXEC HELP ILLUSTRATE KILL LS MKDIR MV PIG PWD QUIT RM RMF RUN SET ";
|
|
|
|
|
+
|
|
|
// data types
|
|
// data types
|
|
|
- var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP ";
|
|
|
|
|
-
|
|
|
|
|
|
|
+ var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP DATETIME ";
|
|
|
|
|
+
|
|
|
CodeMirror.defineMIME("text/x-pig", {
|
|
CodeMirror.defineMIME("text/x-pig", {
|
|
|
name: "pig",
|
|
name: "pig",
|
|
|
builtins: keywords(pBuiltins),
|
|
builtins: keywords(pBuiltins),
|