/*
Language: Erlang
Author: Yuri Zhloba <yzh44yzh@gmail.com>
*/

hljs.LANGUAGES.erlang  = {
    defaultMode: {
	lexems: [hljs.UNDERSCORE_IDENT_RE],
	contains: ['comment', 'var', 'string', 'binary', 'tuple', 'record', 'directive', 'macros'],
	keywords: {
	    'keyword': { 'div': 1, 'rem': 1, 'and': 1, 'andalso': 1, 'or': 1, 'orelse': 1, 'xor': 1, 'not': 1,
			 'case': 1, 'of': 1, 'end': 5, 'when': 1, 'if': 1},
	    'bif': {'is_boolean': 5, 'atom_to_list': 10, 'list_to_atom': 10, 'list_to_tuple': 10,
		    'tuple_to_list': 10, 'list_to_float': 10, 'float_to_list': 10,
		    'list_to_integer': 10, 'integer_to_list': 10},
	    'otp': {'gen_server': 10, 'start_link': 8, 'init': 1, 'handle_call': 10, 'handle_cast': 10,
		    'handle_info': 10, 'terminate': 1, 'code_change': 5, 'cast': 5, 'call': 1}
	}
    },
    modes: [
	{
	    className: 'comment',
	    begin: '%', end: '$'
	},
	{
	    className: 'var',
	    begin: '\\b(_|[A-Z])[a-zA-Z_]+', end: '^'
	},
	{
	    className: 'string',
	    begin: '"', end: '"'
	},
	{
	    className: 'string',
	    begin: "'", end: "'"
	},
	{
	    className: 'binary',
	    begin: '<<', end: '>>'
	},
	{
	    className: 'tuple',
	    begin: '\\{', end: '\\}',
	    contains: ['atom', 'var', 'string', 'binary', 'tuple', 'record', 'macros']
	},
	{
	    className: 'directive',
	    begin: '-[A-Za-z_]+', end: '^'
	},
	{
	    className: 'record',
	    begin: '#[A-Za-z_]+', end: '^'
	},
	{
	    className: 'macros',
	    begin: '\\?[A-Z_]+', end: '^'
	}
    ]
};

