[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/media/vendor/codemirror/mode/sieve/ -> sieve.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"));
   7    else if (typeof define == "function" && define.amd) // AMD
   8      define(["../../lib/codemirror"], mod);
   9    else // Plain browser env
  10      mod(CodeMirror);
  11  })(function(CodeMirror) {
  12  "use strict";
  13  
  14  CodeMirror.defineMode("sieve", function(config) {
  15    function words(str) {
  16      var obj = {}, words = str.split(" ");
  17      for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
  18      return obj;
  19    }
  20  
  21    var keywords = words("if elsif else stop require");
  22    var atoms = words("true false not");
  23    var indentUnit = config.indentUnit;
  24  
  25    function tokenBase(stream, state) {
  26  
  27      var ch = stream.next();
  28      if (ch == "/" && stream.eat("*")) {
  29        state.tokenize = tokenCComment;
  30        return tokenCComment(stream, state);
  31      }
  32  
  33      if (ch === '#') {
  34        stream.skipToEnd();
  35        return "comment";
  36      }
  37  
  38      if (ch == "\"") {
  39        state.tokenize = tokenString(ch);
  40        return state.tokenize(stream, state);
  41      }
  42  
  43      if (ch == "(") {
  44        state._indent.push("(");
  45        // add virtual angel wings so that editor behaves...
  46        // ...more sane in case of broken brackets
  47        state._indent.push("{");
  48        return null;
  49      }
  50  
  51      if (ch === "{") {
  52        state._indent.push("{");
  53        return null;
  54      }
  55  
  56      if (ch == ")")  {
  57        state._indent.pop();
  58        state._indent.pop();
  59      }
  60  
  61      if (ch === "}") {
  62        state._indent.pop();
  63        return null;
  64      }
  65  
  66      if (ch == ",")
  67        return null;
  68  
  69      if (ch == ";")
  70        return null;
  71  
  72  
  73      if (/[{}\(\),;]/.test(ch))
  74        return null;
  75  
  76      // 1*DIGIT "K" / "M" / "G"
  77      if (/\d/.test(ch)) {
  78        stream.eatWhile(/[\d]/);
  79        stream.eat(/[KkMmGg]/);
  80        return "number";
  81      }
  82  
  83      // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_")
  84      if (ch == ":") {
  85        stream.eatWhile(/[a-zA-Z_]/);
  86        stream.eatWhile(/[a-zA-Z0-9_]/);
  87  
  88        return "operator";
  89      }
  90  
  91      stream.eatWhile(/\w/);
  92      var cur = stream.current();
  93  
  94      // "text:" *(SP / HTAB) (hash-comment / CRLF)
  95      // *(multiline-literal / multiline-dotstart)
  96      // "." CRLF
  97      if ((cur == "text") && stream.eat(":"))
  98      {
  99        state.tokenize = tokenMultiLineString;
 100        return "string";
 101      }
 102  
 103      if (keywords.propertyIsEnumerable(cur))
 104        return "keyword";
 105  
 106      if (atoms.propertyIsEnumerable(cur))
 107        return "atom";
 108  
 109      return null;
 110    }
 111  
 112    function tokenMultiLineString(stream, state)
 113    {
 114      state._multiLineString = true;
 115      // the first line is special it may contain a comment
 116      if (!stream.sol()) {
 117        stream.eatSpace();
 118  
 119        if (stream.peek() == "#") {
 120          stream.skipToEnd();
 121          return "comment";
 122        }
 123  
 124        stream.skipToEnd();
 125        return "string";
 126      }
 127  
 128      if ((stream.next() == ".")  && (stream.eol()))
 129      {
 130        state._multiLineString = false;
 131        state.tokenize = tokenBase;
 132      }
 133  
 134      return "string";
 135    }
 136  
 137    function tokenCComment(stream, state) {
 138      var maybeEnd = false, ch;
 139      while ((ch = stream.next()) != null) {
 140        if (maybeEnd && ch == "/") {
 141          state.tokenize = tokenBase;
 142          break;
 143        }
 144        maybeEnd = (ch == "*");
 145      }
 146      return "comment";
 147    }
 148  
 149    function tokenString(quote) {
 150      return function(stream, state) {
 151        var escaped = false, ch;
 152        while ((ch = stream.next()) != null) {
 153          if (ch == quote && !escaped)
 154            break;
 155          escaped = !escaped && ch == "\\";
 156        }
 157        if (!escaped) state.tokenize = tokenBase;
 158        return "string";
 159      };
 160    }
 161  
 162    return {
 163      startState: function(base) {
 164        return {tokenize: tokenBase,
 165                baseIndent: base || 0,
 166                _indent: []};
 167      },
 168  
 169      token: function(stream, state) {
 170        if (stream.eatSpace())
 171          return null;
 172  
 173        return (state.tokenize || tokenBase)(stream, state);
 174      },
 175  
 176      indent: function(state, _textAfter) {
 177        var length = state._indent.length;
 178        if (_textAfter && (_textAfter[0] == "}"))
 179          length--;
 180  
 181        if (length <0)
 182          length = 0;
 183  
 184        return length * indentUnit;
 185      },
 186  
 187      electricChars: "}"
 188    };
 189  });
 190  
 191  CodeMirror.defineMIME("application/sieve", "sieve");
 192  
 193  });


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