/* Language: Django Requires: xml.js Author: Ivan Sagalaev Contributors: Ilya Baryshev */ hljs.LANGUAGES['django'] = function(hljs) { function allowsDjangoSyntax(mode, parent) { return ( parent == undefined || // defaultMode (!mode.className && parent.className == 'tag') || // tag_internal mode.className == 'value' // value ); } function copy(mode, parent) { var result = {}; for (var key in mode) { if (key != 'contains') { result[key] = mode[key]; } var contains = []; for (var i = 0; mode.contains && i < mode.contains.length; i++) { contains.push(copy(mode.contains[i], mode)); } if (allowsDjangoSyntax(mode, parent)) { contains = DJANGO_CONTAINS.concat(contains); } if (contains.length) { result.contains = contains; } } return result; } var FILTER = { className: 'filter', begin: '\\|[A-Za-z]+\\:?', excludeEnd: true, keywords: 'truncatewords removetags linebreaksbr yesno get_digit timesince random striptags ' + 'filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands ' + 'title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode ' + 'timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort ' + 'dictsortreversed default_if_none pluralize lower join center default ' + 'truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first ' + 'escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize ' + 'localtime utc timezone', contains: [ {className: 'argument', begin: '"', end: '"'} ] }; var DJANGO_CONTAINS = [ { className: 'template_comment', begin: '{%\\s*comment\\s*%}', end: '{%\\s*endcomment\\s*%}' }, { className: 'template_comment', begin: '{#', end: '#}' }, { className: 'template_tag', begin: '{%', end: '%}', keywords: 'comment endcomment load templatetag ifchanged endifchanged if endif firstof for ' + 'endfor in ifnotequal endifnotequal widthratio extends include spaceless ' + 'endspaceless regroup by as ifequal endifequal ssi now with cycle url filter ' + 'endfilter debug block endblock else autoescape endautoescape csrf_token empty elif ' + 'endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix ' + 'plural get_current_language language get_available_languages ' + 'get_current_language_bidi get_language_info get_language_info_list localize ' + 'endlocalize localtime endlocaltime timezone endtimezone get_current_timezone', contains: [FILTER] }, { className: 'variable', begin: '{{', end: '}}', contains: [FILTER] } ]; return { case_insensitive: true, defaultMode: copy(hljs.LANGUAGES.xml.defaultMode) }; }(hljs);