[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/media/vendor/codemirror/mode/twig/ -> twig.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("../../addon/mode/multiplex"));
   7    else if (typeof define == "function" && define.amd) // AMD
   8      define(["../../lib/codemirror", "../../addon/mode/multiplex"], mod);
   9    else // Plain browser env
  10      mod(CodeMirror);
  11  })(function(CodeMirror) {
  12    "use strict";
  13  
  14    CodeMirror.defineMode("twig:inner", function() {
  15      var keywords = ["and", "as", "autoescape", "endautoescape", "block", "do", "endblock", "else", "elseif", "extends", "for", "endfor", "embed", "endembed", "filter", "endfilter", "flush", "from", "if", "endif", "in", "is", "include", "import", "not", "or", "set", "spaceless", "endspaceless", "with", "endwith", "trans", "endtrans", "blocktrans", "endblocktrans", "macro", "endmacro", "use", "verbatim", "endverbatim"],
  16          operator = /^[+\-*&%=<>!?|~^]/,
  17          sign = /^[:\[\(\{]/,
  18          atom = ["true", "false", "null", "empty", "defined", "divisibleby", "divisible by", "even", "odd", "iterable", "sameas", "same as"],
  19          number = /^(\d[+\-\*\/])?\d+(\.\d+)?/;
  20  
  21      keywords = new RegExp("((" + keywords.join(")|(") + "))\\b");
  22      atom = new RegExp("((" + atom.join(")|(") + "))\\b");
  23  
  24      function tokenBase (stream, state) {
  25        var ch = stream.peek();
  26  
  27        //Comment
  28        if (state.incomment) {
  29          if (!stream.skipTo("#}")) {
  30            stream.skipToEnd();
  31          } else {
  32            stream.eatWhile(/\#|}/);
  33            state.incomment = false;
  34          }
  35          return "comment";
  36        //Tag
  37        } else if (state.intag) {
  38          //After operator
  39          if (state.operator) {
  40            state.operator = false;
  41            if (stream.match(atom)) {
  42              return "atom";
  43            }
  44            if (stream.match(number)) {
  45              return "number";
  46            }
  47          }
  48          //After sign
  49          if (state.sign) {
  50            state.sign = false;
  51            if (stream.match(atom)) {
  52              return "atom";
  53            }
  54            if (stream.match(number)) {
  55              return "number";
  56            }
  57          }
  58  
  59          if (state.instring) {
  60            if (ch == state.instring) {
  61              state.instring = false;
  62            }
  63            stream.next();
  64            return "string";
  65          } else if (ch == "'" || ch == '"') {
  66            state.instring = ch;
  67            stream.next();
  68            return "string";
  69          } else if (stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) {
  70            state.intag = false;
  71            return "tag";
  72          } else if (stream.match(operator)) {
  73            state.operator = true;
  74            return "operator";
  75          } else if (stream.match(sign)) {
  76            state.sign = true;
  77          } else {
  78            if (stream.eat(" ") || stream.sol()) {
  79              if (stream.match(keywords)) {
  80                return "keyword";
  81              }
  82              if (stream.match(atom)) {
  83                return "atom";
  84              }
  85              if (stream.match(number)) {
  86                return "number";
  87              }
  88              if (stream.sol()) {
  89                stream.next();
  90              }
  91            } else {
  92              stream.next();
  93            }
  94  
  95          }
  96          return "variable";
  97        } else if (stream.eat("{")) {
  98          if (stream.eat("#")) {
  99            state.incomment = true;
 100            if (!stream.skipTo("#}")) {
 101              stream.skipToEnd();
 102            } else {
 103              stream.eatWhile(/\#|}/);
 104              state.incomment = false;
 105            }
 106            return "comment";
 107          //Open tag
 108          } else if (ch = stream.eat(/\{|%/)) {
 109            //Cache close tag
 110            state.intag = ch;
 111            if (ch == "{") {
 112              state.intag = "}";
 113            }
 114            stream.eat("-");
 115            return "tag";
 116          }
 117        }
 118        stream.next();
 119      };
 120  
 121      return {
 122        startState: function () {
 123          return {};
 124        },
 125        token: function (stream, state) {
 126          return tokenBase(stream, state);
 127        }
 128      };
 129    });
 130  
 131    CodeMirror.defineMode("twig", function(config, parserConfig) {
 132      var twigInner = CodeMirror.getMode(config, "twig:inner");
 133      if (!parserConfig || !parserConfig.base) return twigInner;
 134      return CodeMirror.multiplexingMode(
 135        CodeMirror.getMode(config, parserConfig.base), {
 136          open: /\{[{#%]/, close: /[}#%]\}/, mode: twigInner, parseDelimiters: true
 137        }
 138      );
 139    });
 140    CodeMirror.defineMIME("text/x-twig", "twig");
 141  });


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