[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

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

   1  // CodeMirror, copyright (c) by Marijn Haverbeke and others
   2  // Distributed under an MIT license: https://codemirror.net/5/LICENSE
   3  
   4  (function(mod) {
   5    if (typeof exports == "object" && typeof module == "object") // CommonJS
   6      mod(require("../../lib/codemirror"), require("../javascript/javascript"));
   7    else if (typeof define == "function" && define.amd) // AMD
   8      define(["../../lib/codemirror", "../javascript/javascript"], mod);
   9    else // Plain browser env
  10      mod(CodeMirror);
  11  })(function(CodeMirror) {
  12  "use strict";
  13  
  14  CodeMirror.defineMode("pegjs", function (config) {
  15    var jsMode = CodeMirror.getMode(config, "javascript");
  16  
  17    function identifier(stream) {
  18      return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/);
  19    }
  20  
  21    return {
  22      startState: function () {
  23        return {
  24          inString: false,
  25          stringType: null,
  26          inComment: false,
  27          inCharacterClass: false,
  28          braced: 0,
  29          lhs: true,
  30          localState: null
  31        };
  32      },
  33      token: function (stream, state) {
  34        if (stream)
  35  
  36        //check for state changes
  37        if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) {
  38          state.stringType = stream.peek();
  39          stream.next(); // Skip quote
  40          state.inString = true; // Update state
  41        }
  42        if (!state.inString && !state.inComment && stream.match('/*')) {
  43          state.inComment = true;
  44        }
  45  
  46        //return state
  47        if (state.inString) {
  48          while (state.inString && !stream.eol()) {
  49            if (stream.peek() === state.stringType) {
  50              stream.next(); // Skip quote
  51              state.inString = false; // Clear flag
  52            } else if (stream.peek() === '\\') {
  53              stream.next();
  54              stream.next();
  55            } else {
  56              stream.match(/^.[^\\\"\']*/);
  57            }
  58          }
  59          return state.lhs ? "property string" : "string"; // Token style
  60        } else if (state.inComment) {
  61          while (state.inComment && !stream.eol()) {
  62            if (stream.match('*/')) {
  63              state.inComment = false; // Clear flag
  64            } else {
  65              stream.match(/^.[^\*]*/);
  66            }
  67          }
  68          return "comment";
  69        } else if (state.inCharacterClass) {
  70            while (state.inCharacterClass && !stream.eol()) {
  71              if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) {
  72                state.inCharacterClass = false;
  73              }
  74            }
  75        } else if (stream.peek() === '[') {
  76          stream.next();
  77          state.inCharacterClass = true;
  78          return 'bracket';
  79        } else if (stream.match('//')) {
  80          stream.skipToEnd();
  81          return "comment";
  82        } else if (state.braced || stream.peek() === '{') {
  83          if (state.localState === null) {
  84            state.localState = CodeMirror.startState(jsMode);
  85          }
  86          var token = jsMode.token(stream, state.localState);
  87          var text = stream.current();
  88          if (!token) {
  89            for (var i = 0; i < text.length; i++) {
  90              if (text[i] === '{') {
  91                state.braced++;
  92              } else if (text[i] === '}') {
  93                state.braced--;
  94              }
  95            };
  96          }
  97          return token;
  98        } else if (identifier(stream)) {
  99          if (stream.peek() === ':') {
 100            return 'variable';
 101          }
 102          return 'variable-2';
 103        } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) {
 104          stream.next();
 105          return 'bracket';
 106        } else if (!stream.eatSpace()) {
 107          stream.next();
 108        }
 109        return null;
 110      }
 111    };
 112  }, "javascript");
 113  
 114  });


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