[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/media/vendor/codemirror/mode/pig/ -> pig.js (source)

   1  // CodeMirror, copyright (c) by Marijn Haverbeke and others
   2  // Distributed under an MIT license: https://codemirror.net/5/LICENSE
   3  
   4  /*
   5   *      Pig Latin Mode for CodeMirror 2
   6   *      @author Prasanth Jayachandran
   7   *      @link   https://github.com/prasanthj/pig-codemirror-2
   8   *  This implementation is adapted from PL/SQL mode in CodeMirror 2.
   9   */
  10  (function(mod) {
  11    if (typeof exports == "object" && typeof module == "object") // CommonJS
  12      mod(require("../../lib/codemirror"));
  13    else if (typeof define == "function" && define.amd) // AMD
  14      define(["../../lib/codemirror"], mod);
  15    else // Plain browser env
  16      mod(CodeMirror);
  17  })(function(CodeMirror) {
  18  "use strict";
  19  
  20  CodeMirror.defineMode("pig", function(_config, parserConfig) {
  21    var keywords = parserConfig.keywords,
  22    builtins = parserConfig.builtins,
  23    types = parserConfig.types,
  24    multiLineStrings = parserConfig.multiLineStrings;
  25  
  26    var isOperatorChar = /[*+\-%<>=&?:\/!|]/;
  27  
  28    function chain(stream, state, f) {
  29      state.tokenize = f;
  30      return f(stream, state);
  31    }
  32  
  33    function tokenComment(stream, state) {
  34      var isEnd = false;
  35      var ch;
  36      while(ch = stream.next()) {
  37        if(ch == "/" && isEnd) {
  38          state.tokenize = tokenBase;
  39          break;
  40        }
  41        isEnd = (ch == "*");
  42      }
  43      return "comment";
  44    }
  45  
  46    function tokenString(quote) {
  47      return function(stream, state) {
  48        var escaped = false, next, end = false;
  49        while((next = stream.next()) != null) {
  50          if (next == quote && !escaped) {
  51            end = true; break;
  52          }
  53          escaped = !escaped && next == "\\";
  54        }
  55        if (end || !(escaped || multiLineStrings))
  56          state.tokenize = tokenBase;
  57        return "error";
  58      };
  59    }
  60  
  61  
  62    function tokenBase(stream, state) {
  63      var ch = stream.next();
  64  
  65      // is a start of string?
  66      if (ch == '"' || ch == "'")
  67        return chain(stream, state, tokenString(ch));
  68      // is it one of the special chars
  69      else if(/[\[\]{}\(\),;\.]/.test(ch))
  70        return null;
  71      // is it a number?
  72      else if(/\d/.test(ch)) {
  73        stream.eatWhile(/[\w\.]/);
  74        return "number";
  75      }
  76      // multi line comment or operator
  77      else if (ch == "/") {
  78        if (stream.eat("*")) {
  79          return chain(stream, state, tokenComment);
  80        }
  81        else {
  82          stream.eatWhile(isOperatorChar);
  83          return "operator";
  84        }
  85      }
  86      // single line comment or operator
  87      else if (ch=="-") {
  88        if(stream.eat("-")){
  89          stream.skipToEnd();
  90          return "comment";
  91        }
  92        else {
  93          stream.eatWhile(isOperatorChar);
  94          return "operator";
  95        }
  96      }
  97      // is it an operator
  98      else if (isOperatorChar.test(ch)) {
  99        stream.eatWhile(isOperatorChar);
 100        return "operator";
 101      }
 102      else {
 103        // get the while word
 104        stream.eatWhile(/[\w\$_]/);
 105        // is it one of the listed keywords?
 106        if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) {
 107          //keywords can be used as variables like flatten(group), group.$0 etc..
 108          if (!stream.eat(")") && !stream.eat("."))
 109            return "keyword";
 110        }
 111        // is it one of the builtin functions?
 112        if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase()))
 113          return "variable-2";
 114        // is it one of the listed types?
 115        if (types && types.propertyIsEnumerable(stream.current().toUpperCase()))
 116          return "variable-3";
 117        // default is a 'variable'
 118        return "variable";
 119      }
 120    }
 121  
 122    // Interface
 123    return {
 124      startState: function() {
 125        return {
 126          tokenize: tokenBase,
 127          startOfLine: true
 128        };
 129      },
 130  
 131      token: function(stream, state) {
 132        if(stream.eatSpace()) return null;
 133        var style = state.tokenize(stream, state);
 134        return style;
 135      }
 136    };
 137  });
 138  
 139  (function() {
 140    function keywords(str) {
 141      var obj = {}, words = str.split(" ");
 142      for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
 143      return obj;
 144    }
 145  
 146    // builtin funcs taken from trunk revision 1303237
 147    var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL "
 148      + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS "
 149      + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG "
 150      + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN "
 151      + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER "
 152      + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS "
 153      + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA  "
 154      + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE "
 155      + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG "
 156      + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER ";
 157  
 158    // taken from QueryLexer.g
 159    var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP "
 160      + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL "
 161      + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE "
 162      + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE "
 163      + "NEQ MATCHES TRUE FALSE DUMP";
 164  
 165    // data types
 166    var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP ";
 167  
 168    CodeMirror.defineMIME("text/x-pig", {
 169      name: "pig",
 170      builtins: keywords(pBuiltins),
 171      keywords: keywords(pKeywords),
 172      types: keywords(pTypes)
 173    });
 174  
 175    CodeMirror.registerHelper("hintWords", "pig", (pBuiltins + pTypes + pKeywords).split(" "));
 176  }());
 177  
 178  });


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer