| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | /*Language: PrologDescription: Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics.Author: Raivo Laanemets <raivo@infdot.com>Website: https://en.wikipedia.org/wiki/Prolog*/function prolog(hljs) {  const ATOM = {    begin: /[a-z][A-Za-z0-9_]*/,    relevance: 0  };  const VAR = {    className: 'symbol',    variants: [      {        begin: /[A-Z][a-zA-Z0-9_]*/      },      {        begin: /_[A-Za-z0-9_]*/      }    ],    relevance: 0  };  const PARENTED = {    begin: /\(/,    end: /\)/,    relevance: 0  };  const LIST = {    begin: /\[/,    end: /\]/  };  const LINE_COMMENT = {    className: 'comment',    begin: /%/,    end: /$/,    contains: [ hljs.PHRASAL_WORDS_MODE ]  };  const BACKTICK_STRING = {    className: 'string',    begin: /`/,    end: /`/,    contains: [ hljs.BACKSLASH_ESCAPE ]  };  const CHAR_CODE = {    className: 'string', // 0'a etc.    begin: /0'(\\'|.)/  };  const SPACE_CODE = {    className: 'string',    begin: /0'\\s/ // 0'\s  };  const PRED_OP = { // relevance booster    begin: /:-/  };  const inner = [    ATOM,    VAR,    PARENTED,    PRED_OP,    LIST,    LINE_COMMENT,    hljs.C_BLOCK_COMMENT_MODE,    hljs.QUOTE_STRING_MODE,    hljs.APOS_STRING_MODE,    BACKTICK_STRING,    CHAR_CODE,    SPACE_CODE,    hljs.C_NUMBER_MODE  ];  PARENTED.contains = inner;  LIST.contains = inner;  return {    name: 'Prolog',    contains: inner.concat([      { // relevance booster        begin: /\.$/      }    ])  };}module.exports = prolog;
 |