87 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * @param {string} value
 | 
						|
 * @returns {RegExp}
 | 
						|
 * */
 | 
						|
 | 
						|
/**
 | 
						|
 * @param {RegExp | string } re
 | 
						|
 * @returns {string}
 | 
						|
 */
 | 
						|
function source(re) {
 | 
						|
  if (!re) return null;
 | 
						|
  if (typeof re === "string") return re;
 | 
						|
 | 
						|
  return re.source;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @param {...(RegExp | string) } args
 | 
						|
 * @returns {string}
 | 
						|
 */
 | 
						|
function concat(...args) {
 | 
						|
  const joined = args.map((x) => source(x)).join("");
 | 
						|
  return joined;
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
Language: Erlang REPL
 | 
						|
Author: Sergey Ignatov <sergey@ignatov.spb.su>
 | 
						|
Website: https://www.erlang.org
 | 
						|
Category: functional
 | 
						|
*/
 | 
						|
 | 
						|
/** @type LanguageFn */
 | 
						|
function erlangRepl(hljs) {
 | 
						|
  return {
 | 
						|
    name: 'Erlang REPL',
 | 
						|
    keywords: {
 | 
						|
      built_in:
 | 
						|
        'spawn spawn_link self',
 | 
						|
      keyword:
 | 
						|
        'after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if ' +
 | 
						|
        'let not of or orelse|10 query receive rem try when xor'
 | 
						|
    },
 | 
						|
    contains: [
 | 
						|
      {
 | 
						|
        className: 'meta',
 | 
						|
        begin: '^[0-9]+> ',
 | 
						|
        relevance: 10
 | 
						|
      },
 | 
						|
      hljs.COMMENT('%', '$'),
 | 
						|
      {
 | 
						|
        className: 'number',
 | 
						|
        begin: '\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)',
 | 
						|
        relevance: 0
 | 
						|
      },
 | 
						|
      hljs.APOS_STRING_MODE,
 | 
						|
      hljs.QUOTE_STRING_MODE,
 | 
						|
      {
 | 
						|
        begin: concat(
 | 
						|
          /\?(::)?/,
 | 
						|
          /([A-Z]\w*)/, // at least one identifier
 | 
						|
          /((::)[A-Z]\w*)*/ // perhaps more
 | 
						|
        )
 | 
						|
      },
 | 
						|
      {
 | 
						|
        begin: '->'
 | 
						|
      },
 | 
						|
      {
 | 
						|
        begin: 'ok'
 | 
						|
      },
 | 
						|
      {
 | 
						|
        begin: '!'
 | 
						|
      },
 | 
						|
      {
 | 
						|
        begin: '(\\b[a-z\'][a-zA-Z0-9_\']*:[a-z\'][a-zA-Z0-9_\']*)|(\\b[a-z\'][a-zA-Z0-9_\']*)',
 | 
						|
        relevance: 0
 | 
						|
      },
 | 
						|
      {
 | 
						|
        begin: '[A-Z][a-zA-Z0-9_\']*',
 | 
						|
        relevance: 0
 | 
						|
      }
 | 
						|
    ]
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
module.exports = erlangRepl;
 |