Files @ 9dd726706178
Branch filter:

Location: kallithea/rhodecode/public/js/mode/jade/jade.js - annotation

Bradley M. Kuhn
Complete copyright notices for web interface; change footer to link to them.

The original copyright notice found in the footer was not accurate as it
included only one of the many copyright holders in this project. This change
creates an "about" page, which currently contains just the copyright and
license information. It links to repository for additional potential copyright
holders not listed on the about page.

Unlisted contributors are mentioned in template comments.

Html links for Kallithea is fixed and we link to Conservancy.

Display of version information in the footer is improved.
CodeMirror.defineMode("jade", function () {
  var symbol_regex1 = /^(?:~|!|%|\^|\*|\+|=|\\|:|;|,|\/|\?|&|<|>|\|)/;
  var open_paren_regex = /^(\(|\[)/;
  var close_paren_regex = /^(\)|\])/;
  var keyword_regex1 = /^(if|else|return|var|function|include|doctype|each)/;
  var keyword_regex2 = /^(#|{|}|\.)/;
  var keyword_regex3 = /^(in)/;
  var html_regex1 = /^(html|head|title|meta|link|script|body|br|div|input|span|a|img)/;
  var html_regex2 = /^(h1|h2|h3|h4|h5|p|strong|em)/;
  return {
    startState: function () {
      return {
        inString: false,
        stringType: "",
        beforeTag: true,
        justMatchedKeyword: false,
        afterParen: false
      };
    },
    token: function (stream, state) {
      //check for state changes
      if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) {
        state.stringType = stream.peek();
        stream.next(); // Skip quote
        state.inString = true; // Update state
      }

      //return state
      if (state.inString) {
        if (stream.skipTo(state.stringType)) { // Quote found on this line
          stream.next(); // Skip quote
          state.inString = false; // Clear flag
        } else {
          stream.skipToEnd(); // Rest of line is string
        }
        state.justMatchedKeyword = false;
        return "string"; // Token style
      } else if (stream.sol() && stream.eatSpace()) {
        if (stream.match(keyword_regex1)) {
          state.justMatchedKeyword = true;
          stream.eatSpace();
          return "keyword";
        }
        if (stream.match(html_regex1) || stream.match(html_regex2)) {
          state.justMatchedKeyword = true;
          return "variable";
        }
      } else if (stream.sol() && stream.match(keyword_regex1)) {
        state.justMatchedKeyword = true;
        stream.eatSpace();
        return "keyword";
      } else if (stream.sol() && (stream.match(html_regex1) || stream.match(html_regex2))) {
        state.justMatchedKeyword = true;
        return "variable";
      } else if (stream.eatSpace()) {
        state.justMatchedKeyword = false;
        if (stream.match(keyword_regex3) && stream.eatSpace()) {
          state.justMatchedKeyword = true;
          return "keyword";
        }
      } else if (stream.match(symbol_regex1)) {
        state.justMatchedKeyword = false;
        return "atom";
      } else if (stream.match(open_paren_regex)) {
        state.afterParen = true;
        state.justMatchedKeyword = true;
        return "def";
      } else if (stream.match(close_paren_regex)) {
        state.afterParen = false;
        state.justMatchedKeyword = true;
        return "def";
      } else if (stream.match(keyword_regex2)) {
        state.justMatchedKeyword = true;
        return "keyword";
      } else if (stream.eatSpace()) {
        state.justMatchedKeyword = false;
      } else {
        stream.next();
        if (state.justMatchedKeyword) {
          return "property";
        } else if (state.afterParen) {
          return "property";
        }
      }
      return null;
    }
  };
});

CodeMirror.defineMIME('text/x-jade', 'jade');