mirror of
https://github.com/freeCodeCamp/devdocs
synced 2024-11-16 19:48:10 +01:00
Add bash, Django, and YAML syntax highlighting
This commit is contained in:
parent
517d7003de
commit
17094712e6
1 changed files with 170 additions and 1 deletions
171
assets/javascripts/vendor/prism.js
vendored
171
assets/javascripts/vendor/prism.js
vendored
|
@ -1,4 +1,4 @@
|
|||
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+d+elixir+erlang+go+java+json+kotlin+lua+nginx+nim+perl+php+python+jsx+crystal+rust+scss+sql+typescript */
|
||||
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+bash+cpp+coffeescript+ruby+d+django+elixir+erlang+go+java+json+kotlin+lua+nginx+nim+perl+php+python+jsx+crystal+rust+scss+sql+typescript+yaml */
|
||||
var _self = (typeof window !== 'undefined')
|
||||
? window // if in browser
|
||||
: (
|
||||
|
@ -754,6 +754,87 @@ Prism.languages.insertBefore('c', 'string', {
|
|||
delete Prism.languages.c['class-name'];
|
||||
delete Prism.languages.c['boolean'];
|
||||
|
||||
(function(Prism) {
|
||||
var insideString = {
|
||||
variable: [
|
||||
// Arithmetic Environment
|
||||
{
|
||||
pattern: /\$?\(\([\s\S]+?\)\)/,
|
||||
inside: {
|
||||
// If there is a $ sign at the beginning highlight $(( and )) as variable
|
||||
variable: [{
|
||||
pattern: /(^\$\(\([\s\S]+)\)\)/,
|
||||
lookbehind: true
|
||||
},
|
||||
/^\$\(\(/
|
||||
],
|
||||
number: /\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,
|
||||
// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic
|
||||
operator: /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,
|
||||
// If there is no $ sign at the beginning highlight (( and )) as punctuation
|
||||
punctuation: /\(\(?|\)\)?|,|;/
|
||||
}
|
||||
},
|
||||
// Command Substitution
|
||||
{
|
||||
pattern: /\$\([^)]+\)|`[^`]+`/,
|
||||
inside: {
|
||||
variable: /^\$\(|^`|\)$|`$/
|
||||
}
|
||||
},
|
||||
/\$(?:[\w#?*!@]+|\{[^}]+\})/i
|
||||
]
|
||||
};
|
||||
|
||||
Prism.languages.bash = {
|
||||
'shebang': {
|
||||
pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,
|
||||
alias: 'important'
|
||||
},
|
||||
'comment': {
|
||||
pattern: /(^|[^"{\\])#.*/,
|
||||
lookbehind: true
|
||||
},
|
||||
'string': [
|
||||
//Support for Here-Documents https://en.wikipedia.org/wiki/Here_document
|
||||
{
|
||||
pattern: /((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/,
|
||||
lookbehind: true,
|
||||
greedy: true,
|
||||
inside: insideString
|
||||
},
|
||||
{
|
||||
pattern: /(["'])(?:\\[\s\S]|(?!\1)[^\\])*\1/,
|
||||
greedy: true,
|
||||
inside: insideString
|
||||
}
|
||||
],
|
||||
'variable': insideString.variable,
|
||||
// Originally based on http://ss64.com/bash/
|
||||
'function': {
|
||||
pattern: /(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/,
|
||||
lookbehind: true
|
||||
},
|
||||
'keyword': {
|
||||
pattern: /(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/,
|
||||
lookbehind: true
|
||||
},
|
||||
'boolean': {
|
||||
pattern: /(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/,
|
||||
lookbehind: true
|
||||
},
|
||||
'operator': /&&?|\|\|?|==?|!=?|<<<?|>>|<=?|>=?|=~/,
|
||||
'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];]/
|
||||
};
|
||||
|
||||
var inside = insideString.variable[1].inside;
|
||||
inside['function'] = Prism.languages.bash['function'];
|
||||
inside.keyword = Prism.languages.bash.keyword;
|
||||
inside.boolean = Prism.languages.bash.boolean;
|
||||
inside.operator = Prism.languages.bash.operator;
|
||||
inside.punctuation = Prism.languages.bash.punctuation;
|
||||
})(Prism);
|
||||
|
||||
Prism.languages.cpp = Prism.languages.extend('c', {
|
||||
'keyword': /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,
|
||||
'boolean': /\b(?:true|false)\b/,
|
||||
|
@ -1046,6 +1127,48 @@ Prism.languages.insertBefore('d', 'function', {
|
|||
alias: 'variable'
|
||||
}
|
||||
});
|
||||
// Django/Jinja2 syntax definition for Prism.js <http://prismjs.com> syntax highlighter.
|
||||
// Mostly it works OK but can paint code incorrectly on complex html/template tag combinations.
|
||||
|
||||
var _django_template = {
|
||||
'property': {
|
||||
pattern: /(?:{{|{%)[\s\S]*?(?:%}|}})/g,
|
||||
greedy: true,
|
||||
inside: {
|
||||
'string': {
|
||||
pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
|
||||
greedy: true
|
||||
},
|
||||
'keyword': /\b(?:\||load|verbatim|widthratio|ssi|firstof|for|url|ifchanged|csrf_token|lorem|ifnotequal|autoescape|now|templatetag|debug|cycle|ifequal|regroup|comment|filter|endfilter|if|spaceless|with|extends|block|include|else|empty|endif|endfor|as|endblock|endautoescape|endverbatim|trans|endtrans|[Tt]rue|[Ff]alse|[Nn]one|in|is|static|macro|endmacro|call|endcall|set|endset|raw|endraw)\b/,
|
||||
'operator' : /[-+=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,
|
||||
'function': /\b(?:_|abs|add|addslashes|attr|batch|callable|capfirst|capitalize|center|count|cut|d|date|default|default_if_none|defined|dictsort|dictsortreversed|divisibleby|e|equalto|escape|escaped|escapejs|even|filesizeformat|first|float|floatformat|force_escape|forceescape|format|get_digit|groupby|indent|int|iriencode|iterable|join|last|length|length_is|linebreaks|linebreaksbr|linenumbers|list|ljust|lower|make_list|map|mapping|number|odd|phone2numeric|pluralize|pprint|random|reject|rejectattr|removetags|replace|reverse|rjust|round|safe|safeseq|sameas|select|selectattr|sequence|slice|slugify|sort|string|stringformat|striptags|sum|time|timesince|timeuntil|title|trim|truncate|truncatechars|truncatechars_html|truncatewords|truncatewords_html|undefined|unordered_list|upper|urlencode|urlize|urlizetrunc|wordcount|wordwrap|xmlattr|yesno)\b/,
|
||||
'important': /\b-?\d+(?:\.\d+)?\b/,
|
||||
'variable': /\b\w+?\b/,
|
||||
'punctuation' : /[[\];(),.:]/
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Prism.languages.django = Prism.languages.extend('markup', {'comment': /(?:<!--|{#)[\s\S]*?(?:#}|-->)/});
|
||||
// Updated html tag pattern to allow template tags inside html tags
|
||||
Prism.languages.django.tag.pattern = /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^>=]+))?)*\s*\/?>/i;
|
||||
Prism.languages.insertBefore('django', 'entity', _django_template);
|
||||
Prism.languages.insertBefore('inside', 'tag', _django_template, Prism.languages.django.tag);
|
||||
|
||||
if (Prism.languages.javascript) {
|
||||
// Combine js code and template tags painting inside <script> blocks
|
||||
Prism.languages.insertBefore('inside', 'string', _django_template, Prism.languages.django.script);
|
||||
Prism.languages.django.script.inside.string.inside = _django_template;
|
||||
}
|
||||
if (Prism.languages.css) {
|
||||
// Combine css code and template tags painting inside <style> blocks
|
||||
Prism.languages.insertBefore('inside', 'atrule', {'tag': _django_template.property}, Prism.languages.django.style);
|
||||
Prism.languages.django.style.inside.string.inside = _django_template;
|
||||
}
|
||||
|
||||
// Add an Jinja2 alias
|
||||
Prism.languages.jinja2 = Prism.languages.django;
|
||||
|
||||
Prism.languages.elixir = {
|
||||
// Negative look-ahead is needed for string interpolation
|
||||
// Negative look-behind is needed to avoid highlighting markdown headers in
|
||||
|
@ -1944,3 +2067,49 @@ Prism.languages.typescript = Prism.languages.extend('javascript', {
|
|||
});
|
||||
|
||||
Prism.languages.ts = Prism.languages.typescript;
|
||||
Prism.languages.yaml = {
|
||||
'scalar': {
|
||||
pattern: /([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,
|
||||
lookbehind: true,
|
||||
alias: 'string'
|
||||
},
|
||||
'comment': /#.*/,
|
||||
'key': {
|
||||
pattern: /(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,
|
||||
lookbehind: true,
|
||||
alias: 'atrule'
|
||||
},
|
||||
'directive': {
|
||||
pattern: /(^[ \t]*)%.+/m,
|
||||
lookbehind: true,
|
||||
alias: 'important'
|
||||
},
|
||||
'datetime': {
|
||||
pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,
|
||||
lookbehind: true,
|
||||
alias: 'number'
|
||||
},
|
||||
'boolean': {
|
||||
pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,
|
||||
lookbehind: true,
|
||||
alias: 'important'
|
||||
},
|
||||
'null': {
|
||||
pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,
|
||||
lookbehind: true,
|
||||
alias: 'important'
|
||||
},
|
||||
'string': {
|
||||
pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}))/m,
|
||||
lookbehind: true,
|
||||
greedy: true
|
||||
},
|
||||
'number': {
|
||||
pattern: /([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+\-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,
|
||||
lookbehind: true
|
||||
},
|
||||
'tag': /![^\s]+/,
|
||||
'important': /[&*][\w]+/,
|
||||
'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue