diff --git a/components.js b/components.js
index 6c3d55dd41..edf269e5b8 100644
--- a/components.js
+++ b/components.js
@@ -1,2 +1,2 @@
-var components = {"core":{"meta":{"path":"components/prism-core.js","option":"mandatory"},"core":"Core"},"themes":{"meta":{"path":"themes/{id}.css","link":"index.html?theme={id}","exclusive":true},"prism":{"title":"Default","option":"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{"title":"Okaidia","owner":"ocodia"},"prism-twilight":{"title":"Twilight","owner":"remybach"},"prism-coy":{"title":"Coy","owner":"tshedor"},"prism-solarizedlight":{"title":"Solarized Light","owner":"hectormatos2011 "},"prism-tomorrow":{"title":"Tomorrow Night","owner":"Rosey"}},"languages":{"meta":{"path":"components/prism-{id}","noCSS":true,"examplesPath":"examples/prism-{id}","addCheckAll":true},"markup":{"title":"Markup","alias":["html","xml","svg","mathml","ssml","atom","rss"],"aliasTitles":{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","ssml":"SSML","atom":"Atom","rss":"RSS"},"option":"default"},"css":{"title":"CSS","option":"default","modify":"markup"},"clike":{"title":"C-like","option":"default"},"javascript":{"title":"JavaScript","require":"clike","modify":"markup","optional":"regex","alias":"js","option":"default"},"abap":{"title":"ABAP","owner":"dellagustin"},"abnf":{"title":"ABNF","owner":"RunDevelopment"},"actionscript":{"title":"ActionScript","require":"javascript","modify":"markup","owner":"Golmote"},"ada":{"title":"Ada","owner":"Lucretia"},"agda":{"title":"Agda","owner":"xy-ren"},"al":{"title":"AL","owner":"RunDevelopment"},"antlr4":{"title":"ANTLR4","alias":"g4","owner":"RunDevelopment"},"apacheconf":{"title":"Apache Configuration","owner":"GuiTeK"},"apex":{"title":"Apex","require":["clike","sql"],"owner":"RunDevelopment"},"apl":{"title":"APL","owner":"ngn"},"applescript":{"title":"AppleScript","owner":"Golmote"},"aql":{"title":"AQL","owner":"RunDevelopment"},"arduino":{"title":"Arduino","require":"cpp","owner":"dkern"},"arff":{"title":"ARFF","owner":"Golmote"},"asciidoc":{"alias":"adoc","title":"AsciiDoc","owner":"Golmote"},"aspnet":{"title":"ASP.NET (C#)","require":["markup","csharp"],"owner":"nauzilus"},"asm6502":{"title":"6502 Assembly","owner":"kzurawel"},"autohotkey":{"title":"AutoHotkey","owner":"aviaryan"},"autoit":{"title":"AutoIt","owner":"Golmote"},"bash":{"title":"Bash","alias":"shell","aliasTitles":{"shell":"Shell"},"owner":"zeitgeist87"},"basic":{"title":"BASIC","owner":"Golmote"},"batch":{"title":"Batch","owner":"Golmote"},"bbcode":{"title":"BBcode","alias":"shortcode","aliasTitles":{"shortcode":"Shortcode"},"owner":"RunDevelopment"},"birb":{"title":"Birb","require":"clike","owner":"Calamity210"},"bison":{"title":"Bison","require":"c","owner":"Golmote"},"bnf":{"title":"BNF","alias":"rbnf","aliasTitles":{"rbnf":"RBNF"},"owner":"RunDevelopment"},"brainfuck":{"title":"Brainfuck","owner":"Golmote"},"brightscript":{"title":"BrightScript","owner":"RunDevelopment"},"bro":{"title":"Bro","owner":"wayward710"},"bsl":{"title":"BSL (1C:Enterprise)","alias":"oscript","aliasTitles":{"oscript":"OneScript"},"owner":"Diversus23"},"c":{"title":"C","require":"clike","owner":"zeitgeist87"},"csharp":{"title":"C#","require":"clike","alias":["cs","dotnet"],"owner":"mvalipour"},"cpp":{"title":"C++","require":"c","owner":"zeitgeist87"},"cfscript":{"title":"CFScript","require":"clike","alias":"cfc","owner":"mjclemente"},"chaiscript":{"title":"ChaiScript","require":["clike","cpp"],"owner":"RunDevelopment"},"cil":{"title":"CIL","owner":"sbrl"},"clojure":{"title":"Clojure","owner":"troglotit"},"cmake":{"title":"CMake","owner":"mjrogozinski"},"coffeescript":{"title":"CoffeeScript","require":"javascript","alias":"coffee","owner":"R-osey"},"concurnas":{"title":"Concurnas","alias":"conc","owner":"jasontatton"},"csp":{"title":"Content-Security-Policy","owner":"ScottHelme"},"crystal":{"title":"Crystal","require":"ruby","owner":"MakeNowJust"},"css-extras":{"title":"CSS Extras","require":"css","modify":"css","owner":"milesj"},"csv":{"title":"CSV","owner":"RunDevelopment"},"cypher":{"title":"Cypher","owner":"RunDevelopment"},"d":{"title":"D","require":"clike","owner":"Golmote"},"dart":{"title":"Dart","require":"clike","owner":"Golmote"},"dataweave":{"title":"DataWeave","owner":"machaval"},"dax":{"title":"DAX","owner":"peterbud"},"dhall":{"title":"Dhall","owner":"RunDevelopment"},"diff":{"title":"Diff","owner":"uranusjr"},"django":{"title":"Django/Jinja2","require":"markup-templating","alias":"jinja2","owner":"romanvm"},"dns-zone-file":{"title":"DNS zone file","owner":"RunDevelopment","alias":"dns-zone"},"docker":{"title":"Docker","alias":"dockerfile","owner":"JustinBeckwith"},"dot":{"title":"DOT (Graphviz)","alias":"gv","optional":"markup","owner":"RunDevelopment"},"ebnf":{"title":"EBNF","owner":"RunDevelopment"},"editorconfig":{"title":"EditorConfig","owner":"osipxd"},"eiffel":{"title":"Eiffel","owner":"Conaclos"},"ejs":{"title":"EJS","require":["javascript","markup-templating"],"owner":"RunDevelopment","alias":"eta","aliasTitles":{"eta":"Eta"}},"elixir":{"title":"Elixir","owner":"Golmote"},"elm":{"title":"Elm","owner":"zwilias"},"etlua":{"title":"Embedded Lua templating","require":["lua","markup-templating"],"owner":"RunDevelopment"},"erb":{"title":"ERB","require":["ruby","markup-templating"],"owner":"Golmote"},"erlang":{"title":"Erlang","owner":"Golmote"},"excel-formula":{"title":"Excel Formula","alias":["xlsx","xls"],"owner":"RunDevelopment"},"fsharp":{"title":"F#","require":"clike","owner":"simonreynolds7"},"factor":{"title":"Factor","owner":"catb0t"},"false":{"title":"False","owner":"edukisto"},"firestore-security-rules":{"title":"Firestore security rules","require":"clike","owner":"RunDevelopment"},"flow":{"title":"Flow","require":"javascript","owner":"Golmote"},"fortran":{"title":"Fortran","owner":"Golmote"},"ftl":{"title":"FreeMarker Template Language","require":"markup-templating","owner":"RunDevelopment"},"gml":{"title":"GameMaker Language","alias":"gamemakerlanguage","require":"clike","owner":"LiarOnce"},"gcode":{"title":"G-code","owner":"RunDevelopment"},"gdscript":{"title":"GDScript","owner":"RunDevelopment"},"gedcom":{"title":"GEDCOM","owner":"Golmote"},"gherkin":{"title":"Gherkin","owner":"hason"},"git":{"title":"Git","owner":"lgiraudel"},"glsl":{"title":"GLSL","require":"c","owner":"Golmote"},"go":{"title":"Go","require":"clike","owner":"arnehormann"},"graphql":{"title":"GraphQL","optional":"markdown","owner":"Golmote"},"groovy":{"title":"Groovy","require":"clike","owner":"robfletcher"},"haml":{"title":"Haml","require":"ruby","optional":["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],"owner":"Golmote"},"handlebars":{"title":"Handlebars","require":"markup-templating","owner":"Golmote"},"haskell":{"title":"Haskell","alias":"hs","owner":"bholst"},"haxe":{"title":"Haxe","require":"clike","owner":"Golmote"},"hcl":{"title":"HCL","owner":"outsideris"},"hlsl":{"title":"HLSL","require":"c","owner":"RunDevelopment"},"http":{"title":"HTTP","optional":["css","javascript","json","markup","uri"],"owner":"danielgtaylor"},"hpkp":{"title":"HTTP Public-Key-Pins","owner":"ScottHelme"},"hsts":{"title":"HTTP Strict-Transport-Security","owner":"ScottHelme"},"ichigojam":{"title":"IchigoJam","owner":"BlueCocoa"},"icon":{"title":"Icon","owner":"Golmote"},"icu-message-format":{"title":"ICU Message Format","owner":"RunDevelopment"},"idris":{"title":"Idris","alias":"idr","owner":"KeenS","require":"haskell"},"ignore":{"title":".ignore","owner":"osipxd","alias":["gitignore","hgignore","npmignore"],"aliasTitles":{"gitignore":".gitignore","hgignore":".hgignore","npmignore":".npmignore"}},"inform7":{"title":"Inform 7","owner":"Golmote"},"ini":{"title":"Ini","owner":"aviaryan"},"io":{"title":"Io","owner":"AlesTsurko"},"j":{"title":"J","owner":"Golmote"},"java":{"title":"Java","require":"clike","owner":"sherblot"},"javadoc":{"title":"JavaDoc","require":["markup","java","javadoclike"],"modify":"java","optional":"scala","owner":"RunDevelopment"},"javadoclike":{"title":"JavaDoc-like","modify":["java","javascript","php"],"owner":"RunDevelopment"},"javastacktrace":{"title":"Java stack trace","owner":"RunDevelopment"},"jolie":{"title":"Jolie","require":"clike","owner":"thesave"},"jq":{"title":"JQ","owner":"RunDevelopment"},"jsdoc":{"title":"JSDoc","require":["javascript","javadoclike","typescript"],"modify":"javascript","optional":["actionscript","coffeescript"],"owner":"RunDevelopment"},"js-extras":{"title":"JS Extras","require":"javascript","modify":"javascript","optional":["actionscript","coffeescript","flow","n4js","typescript"],"owner":"RunDevelopment"},"json":{"title":"JSON","alias":"webmanifest","aliasTitles":{"webmanifest":"Web App Manifest"},"owner":"CupOfTea696"},"json5":{"title":"JSON5","require":"json","owner":"RunDevelopment"},"jsonp":{"title":"JSONP","require":"json","owner":"RunDevelopment"},"jsstacktrace":{"title":"JS stack trace","owner":"sbrl"},"js-templates":{"title":"JS Templates","require":"javascript","modify":"javascript","optional":["css","css-extras","graphql","markdown","markup"],"owner":"RunDevelopment"},"julia":{"title":"Julia","owner":"cdagnino"},"keyman":{"title":"Keyman","owner":"mcdurdin"},"kotlin":{"title":"Kotlin","alias":["kt","kts"],"aliasTitles":{"kts":"Kotlin Script"},"require":"clike","owner":"Golmote"},"kumir":{"title":"KuMir (КуМир)","alias":"kum","owner":"edukisto"},"latex":{"title":"LaTeX","alias":["tex","context"],"aliasTitles":{"tex":"TeX","context":"ConTeXt"},"owner":"japborst"},"latte":{"title":"Latte","require":["clike","markup-templating","php"],"owner":"nette"},"less":{"title":"Less","require":"css","optional":"css-extras","owner":"Golmote"},"lilypond":{"title":"LilyPond","require":"scheme","alias":"ly","owner":"RunDevelopment"},"liquid":{"title":"Liquid","owner":"cinhtau"},"lisp":{"title":"Lisp","alias":["emacs","elisp","emacs-lisp"],"owner":"JuanCaicedo"},"livescript":{"title":"LiveScript","owner":"Golmote"},"llvm":{"title":"LLVM IR","owner":"porglezomp"},"lolcode":{"title":"LOLCODE","owner":"Golmote"},"lua":{"title":"Lua","owner":"Golmote"},"makefile":{"title":"Makefile","owner":"Golmote"},"markdown":{"title":"Markdown","require":"markup","optional":"yaml","alias":"md","owner":"Golmote"},"markup-templating":{"title":"Markup templating","require":"markup","owner":"Golmote"},"matlab":{"title":"MATLAB","owner":"Golmote"},"mel":{"title":"MEL","owner":"Golmote"},"mizar":{"title":"Mizar","owner":"Golmote"},"mongodb":{"title":"MongoDB","owner":"airs0urce","require":"javascript"},"monkey":{"title":"Monkey","owner":"Golmote"},"moonscript":{"title":"MoonScript","alias":"moon","owner":"RunDevelopment"},"n1ql":{"title":"N1QL","owner":"TMWilds"},"n4js":{"title":"N4JS","require":"javascript","optional":"jsdoc","alias":"n4jsd","owner":"bsmith-n4"},"nand2tetris-hdl":{"title":"Nand To Tetris HDL","owner":"stephanmax"},"naniscript":{"title":"Naninovel Script","owner":"Elringus","alias":"nani"},"nasm":{"title":"NASM","owner":"rbmj"},"neon":{"title":"NEON","owner":"nette"},"nevod":{"title":"Nevod","owner":"nezaboodka"},"nginx":{"title":"nginx","owner":"volado"},"nim":{"title":"Nim","owner":"Golmote"},"nix":{"title":"Nix","owner":"Golmote"},"nsis":{"title":"NSIS","owner":"idleberg"},"objectivec":{"title":"Objective-C","require":"c","alias":"objc","owner":"uranusjr"},"ocaml":{"title":"OCaml","owner":"Golmote"},"opencl":{"title":"OpenCL","require":"c","modify":["c","cpp"],"owner":"Milania1"},"openqasm":{"title":"OpenQasm","alias":"qasm","owner":"RunDevelopment"},"oz":{"title":"Oz","owner":"Golmote"},"parigp":{"title":"PARI/GP","owner":"Golmote"},"parser":{"title":"Parser","require":"markup","owner":"Golmote"},"pascal":{"title":"Pascal","alias":"objectpascal","aliasTitles":{"objectpascal":"Object Pascal"},"owner":"Golmote"},"pascaligo":{"title":"Pascaligo","owner":"DefinitelyNotAGoat"},"psl":{"title":"PATROL Scripting Language","owner":"bertysentry"},"pcaxis":{"title":"PC-Axis","alias":"px","owner":"RunDevelopment"},"peoplecode":{"title":"PeopleCode","alias":"pcode","owner":"RunDevelopment"},"perl":{"title":"Perl","owner":"Golmote"},"php":{"title":"PHP","require":"markup-templating","owner":"milesj"},"phpdoc":{"title":"PHPDoc","require":["php","javadoclike"],"modify":"php","owner":"RunDevelopment"},"php-extras":{"title":"PHP Extras","require":"php","modify":"php","owner":"milesj"},"plsql":{"title":"PL/SQL","require":"sql","owner":"Golmote"},"powerquery":{"title":"PowerQuery","alias":["pq","mscript"],"owner":"peterbud"},"powershell":{"title":"PowerShell","owner":"nauzilus"},"processing":{"title":"Processing","require":"clike","owner":"Golmote"},"prolog":{"title":"Prolog","owner":"Golmote"},"promql":{"title":"PromQL","owner":"arendjr"},"properties":{"title":".properties","owner":"Golmote"},"protobuf":{"title":"Protocol Buffers","require":"clike","owner":"just-boris"},"pug":{"title":"Pug","require":["markup","javascript"],"optional":["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],"owner":"Golmote"},"puppet":{"title":"Puppet","owner":"Golmote"},"pure":{"title":"Pure","optional":["c","cpp","fortran"],"owner":"Golmote"},"purebasic":{"title":"PureBasic","require":"clike","alias":"pbfasm","owner":"HeX0R101"},"purescript":{"title":"PureScript","require":"haskell","alias":"purs","owner":"sriharshachilakapati"},"python":{"title":"Python","alias":"py","owner":"multipetros"},"q":{"title":"Q (kdb+ database)","owner":"Golmote"},"qml":{"title":"QML","require":"javascript","owner":"RunDevelopment"},"qore":{"title":"Qore","require":"clike","owner":"temnroegg"},"r":{"title":"R","owner":"Golmote"},"racket":{"title":"Racket","require":"scheme","alias":"rkt","owner":"RunDevelopment"},"jsx":{"title":"React JSX","require":["markup","javascript"],"optional":["jsdoc","js-extras","js-templates"],"owner":"vkbansal"},"tsx":{"title":"React TSX","require":["jsx","typescript"]},"reason":{"title":"Reason","require":"clike","owner":"Golmote"},"regex":{"title":"Regex","owner":"RunDevelopment"},"rego":{"title":"Rego","owner":"JordanSh"},"renpy":{"title":"Ren'py","alias":"rpy","owner":"HyuchiaDiego"},"rest":{"title":"reST (reStructuredText)","owner":"Golmote"},"rip":{"title":"Rip","owner":"ravinggenius"},"roboconf":{"title":"Roboconf","owner":"Golmote"},"robotframework":{"title":"Robot Framework","alias":"robot","owner":"RunDevelopment"},"ruby":{"title":"Ruby","require":"clike","alias":"rb","owner":"samflores"},"rust":{"title":"Rust","owner":"Golmote"},"sas":{"title":"SAS","optional":["groovy","lua","sql"],"owner":"Golmote"},"sass":{"title":"Sass (Sass)","require":"css","owner":"Golmote"},"scss":{"title":"Sass (Scss)","require":"css","optional":"css-extras","owner":"MoOx"},"scala":{"title":"Scala","require":"java","owner":"jozic"},"scheme":{"title":"Scheme","owner":"bacchus123"},"shell-session":{"title":"Shell session","require":"bash","alias":["sh-session","shellsession"],"owner":"RunDevelopment"},"smali":{"title":"Smali","owner":"RunDevelopment"},"smalltalk":{"title":"Smalltalk","owner":"Golmote"},"smarty":{"title":"Smarty","require":"markup-templating","owner":"Golmote"},"sml":{"title":"SML","alias":"smlnj","aliasTitles":{"smlnj":"SML/NJ"},"owner":"RunDevelopment"},"solidity":{"title":"Solidity (Ethereum)","alias":"sol","require":"clike","owner":"glachaud"},"solution-file":{"title":"Solution file","alias":"sln","owner":"RunDevelopment"},"soy":{"title":"Soy (Closure Template)","require":"markup-templating","owner":"Golmote"},"sparql":{"title":"SPARQL","require":"turtle","owner":"Triply-Dev","alias":"rq"},"splunk-spl":{"title":"Splunk SPL","owner":"RunDevelopment"},"sqf":{"title":"SQF: Status Quo Function (Arma 3)","require":"clike","owner":"RunDevelopment"},"sql":{"title":"SQL","owner":"multipetros"},"squirrel":{"title":"Squirrel","require":"clike","owner":"RunDevelopment"},"stan":{"title":"Stan","owner":"RunDevelopment"},"iecst":{"title":"Structured Text (IEC 61131-3)","owner":"serhioromano"},"stylus":{"title":"Stylus","owner":"vkbansal"},"swift":{"title":"Swift","require":"clike","owner":"chrischares"},"t4-templating":{"title":"T4 templating","owner":"RunDevelopment"},"t4-cs":{"title":"T4 Text Templates (C#)","require":["t4-templating","csharp"],"alias":"t4","owner":"RunDevelopment"},"t4-vb":{"title":"T4 Text Templates (VB)","require":["t4-templating","vbnet"],"owner":"RunDevelopment"},"tap":{"title":"TAP","owner":"isaacs","require":"yaml"},"tcl":{"title":"Tcl","owner":"PeterChaplin"},"tt2":{"title":"Template Toolkit 2","require":["clike","markup-templating"],"owner":"gflohr"},"textile":{"title":"Textile","require":"markup","optional":"css","owner":"Golmote"},"toml":{"title":"TOML","owner":"RunDevelopment"},"turtle":{"title":"Turtle","alias":"trig","aliasTitles":{"trig":"TriG"},"owner":"jakubklimek"},"twig":{"title":"Twig","require":"markup","owner":"brandonkelly"},"typescript":{"title":"TypeScript","require":"javascript","optional":"js-templates","alias":"ts","owner":"vkbansal"},"typoscript":{"title":"TypoScript","alias":"tsconfig","aliasTitles":{"tsconfig":"TSConfig"},"owner":"dkern"},"unrealscript":{"title":"UnrealScript","alias":["uscript","uc"],"owner":"RunDevelopment"},"uri":{"title":"URI","alias":"url","aliasTitles":{"url":"URL"},"owner":"RunDevelopment"},"v":{"title":"V","require":"clike","owner":"taggon"},"vala":{"title":"Vala","require":"clike","optional":"regex","owner":"TemplarVolk"},"vbnet":{"title":"VB.Net","require":"basic","owner":"Bigsby"},"velocity":{"title":"Velocity","require":"markup","owner":"Golmote"},"verilog":{"title":"Verilog","owner":"a-rey"},"vhdl":{"title":"VHDL","owner":"a-rey"},"vim":{"title":"vim","owner":"westonganger"},"visual-basic":{"title":"Visual Basic","alias":["vb","vba"],"aliasTitles":{"vba":"VBA"},"owner":"Golmote"},"warpscript":{"title":"WarpScript","owner":"RunDevelopment"},"wasm":{"title":"WebAssembly","owner":"Golmote"},"wiki":{"title":"Wiki markup","require":"markup","owner":"Golmote"},"xeora":{"title":"Xeora","require":"markup","alias":"xeoracube","aliasTitles":{"xeoracube":"XeoraCube"},"owner":"freakmaxi"},"xml-doc":{"title":"XML doc (.net)","require":"markup","modify":["csharp","fsharp","vbnet"],"owner":"RunDevelopment"},"xojo":{"title":"Xojo (REALbasic)","owner":"Golmote"},"xquery":{"title":"XQuery","require":"markup","owner":"Golmote"},"yaml":{"title":"YAML","alias":"yml","owner":"hason"},"yang":{"title":"YANG","owner":"RunDevelopment"},"zig":{"title":"Zig","owner":"RunDevelopment"}},"plugins":{"meta":{"path":"plugins/{id}/prism-{id}","link":"plugins/{id}/"},"line-highlight":{"title":"Line Highlight","description":"Highlights specific lines and/or line ranges."},"line-numbers":{"title":"Line Numbers","description":"Line number at the beginning of code lines.","owner":"kuba-kubula"},"show-invisibles":{"title":"Show Invisibles","description":"Show hidden characters such as tabs and line breaks.","optional":["autolinker","data-uri-highlight"]},"autolinker":{"title":"Autolinker","description":"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},"wpd":{"title":"WebPlatform Docs","description":"Makes tokens link to WebPlatform.org documentation. The links open in a new tab."},"custom-class":{"title":"Custom Class","description":"This plugin allows you to prefix Prism's default classes (.comment
can become .namespace--comment
) or replace them with your defined ones (like .editor__comment
). You can even add new classes.","owner":"dvkndn","noCSS":true},"file-highlight":{"title":"File Highlight","description":"Fetch external files and highlight them with Prism. Used on the Prism website itself.","noCSS":true},"show-language":{"title":"Show Language","description":"Display the highlighted language in code blocks (inline code does not show the label).","owner":"nauzilus","noCSS":true,"require":"toolbar"},"jsonp-highlight":{"title":"JSONP Highlight","description":"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).","noCSS":true,"owner":"nauzilus"},"highlight-keywords":{"title":"Highlight Keywords","description":"Adds special CSS classes for each keyword matched in the code. For example, the keyword if
will have the class keyword-if
as well. You can have fine grained control over the appearance of each keyword by providing your own CSS rules.","owner":"vkbansal","noCSS":true},"remove-initial-line-feed":{"title":"Remove initial line feed","description":"Removes the initial line feed in code blocks.","owner":"Golmote","noCSS":true},"inline-color":{"title":"Inline color","description":"Adds a small inline preview for colors in style sheets.","require":"css-extras","owner":"RunDevelopment"},"previewers":{"title":"Previewers","description":"Previewers for angles, colors, gradients, easing and time.","require":"css-extras","owner":"Golmote"},"autoloader":{"title":"Autoloader","description":"Automatically loads the needed languages to highlight the code blocks.","owner":"Golmote","noCSS":true},"keep-markup":{"title":"Keep Markup","description":"Prevents custom markup from being dropped out during highlighting.","owner":"Golmote","optional":"normalize-whitespace","noCSS":true},"command-line":{"title":"Command Line","description":"Display a command line with a prompt and, optionally, the output/response from the commands.","owner":"chriswells0"},"unescaped-markup":{"title":"Unescaped Markup","description":"Write markup without having to escape anything."},"normalize-whitespace":{"title":"Normalize Whitespace","description":"Supports multiple operations to normalize whitespace in code blocks.","owner":"zeitgeist87","optional":"unescaped-markup","noCSS":true},"data-uri-highlight":{"title":"Data-URI Highlight","description":"Highlights data-URI contents.","owner":"Golmote","noCSS":true},"toolbar":{"title":"Toolbar","description":"Attach a toolbar for plugins to easily register buttons on the top of a code block.","owner":"mAAdhaTTah"},"copy-to-clipboard":{"title":"Copy to Clipboard Button","description":"Add a button that copies the code block to the clipboard when clicked.","owner":"mAAdhaTTah","require":"toolbar","noCSS":true},"download-button":{"title":"Download Button","description":"A button in the toolbar of a code block adding a convenient way to download a code file.","owner":"Golmote","require":"toolbar","noCSS":true},"match-braces":{"title":"Match braces","description":"Highlights matching braces.","owner":"RunDevelopment"},"diff-highlight":{"title":"Diff Highlight","description":"Highlights the code inside diff blocks.","owner":"RunDevelopment","require":"diff"},"filter-highlight-all":{"title":"Filter highlightAll","description":"Filters the elements the highlightAll
and highlightAllUnder
methods actually highlight.","owner":"RunDevelopment","noCSS":true},"treeview":{"title":"Treeview","description":"A language with special styles to highlight file system tree structures.","owner":"Golmote"}}};
+var components = {"core":{"meta":{"path":"components/prism-core.js","option":"mandatory"},"core":"Core"},"themes":{"meta":{"path":"themes/{id}.css","link":"index.html?theme={id}","exclusive":true},"prism":{"title":"Default","option":"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{"title":"Okaidia","owner":"ocodia"},"prism-twilight":{"title":"Twilight","owner":"remybach"},"prism-coy":{"title":"Coy","owner":"tshedor"},"prism-solarizedlight":{"title":"Solarized Light","owner":"hectormatos2011 "},"prism-tomorrow":{"title":"Tomorrow Night","owner":"Rosey"}},"languages":{"meta":{"path":"components/prism-{id}","noCSS":true,"examplesPath":"examples/prism-{id}","addCheckAll":true},"markup":{"title":"Markup","alias":["html","xml","svg","mathml","ssml","atom","rss"],"aliasTitles":{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","ssml":"SSML","atom":"Atom","rss":"RSS"},"option":"default"},"css":{"title":"CSS","option":"default","modify":"markup"},"clike":{"title":"C-like","option":"default"},"javascript":{"title":"JavaScript","require":"clike","modify":"markup","optional":"regex","alias":"js","option":"default"},"abap":{"title":"ABAP","owner":"dellagustin"},"abnf":{"title":"ABNF","owner":"RunDevelopment"},"actionscript":{"title":"ActionScript","require":"javascript","modify":"markup","owner":"Golmote"},"ada":{"title":"Ada","owner":"Lucretia"},"agda":{"title":"Agda","owner":"xy-ren"},"al":{"title":"AL","owner":"RunDevelopment"},"antlr4":{"title":"ANTLR4","alias":"g4","owner":"RunDevelopment"},"apacheconf":{"title":"Apache Configuration","owner":"GuiTeK"},"apex":{"title":"Apex","require":["clike","sql"],"owner":"RunDevelopment"},"apl":{"title":"APL","owner":"ngn"},"applescript":{"title":"AppleScript","owner":"Golmote"},"aql":{"title":"AQL","owner":"RunDevelopment"},"arduino":{"title":"Arduino","require":"cpp","owner":"dkern"},"arff":{"title":"ARFF","owner":"Golmote"},"asciidoc":{"alias":"adoc","title":"AsciiDoc","owner":"Golmote"},"aspnet":{"title":"ASP.NET (C#)","require":["markup","csharp"],"owner":"nauzilus"},"asm6502":{"title":"6502 Assembly","owner":"kzurawel"},"autohotkey":{"title":"AutoHotkey","owner":"aviaryan"},"autoit":{"title":"AutoIt","owner":"Golmote"},"bash":{"title":"Bash","alias":"shell","aliasTitles":{"shell":"Shell"},"owner":"zeitgeist87"},"basic":{"title":"BASIC","owner":"Golmote"},"batch":{"title":"Batch","owner":"Golmote"},"bbcode":{"title":"BBcode","alias":"shortcode","aliasTitles":{"shortcode":"Shortcode"},"owner":"RunDevelopment"},"birb":{"title":"Birb","require":"clike","owner":"Calamity210"},"bison":{"title":"Bison","require":"c","owner":"Golmote"},"bnf":{"title":"BNF","alias":"rbnf","aliasTitles":{"rbnf":"RBNF"},"owner":"RunDevelopment"},"brainfuck":{"title":"Brainfuck","owner":"Golmote"},"brightscript":{"title":"BrightScript","owner":"RunDevelopment"},"bro":{"title":"Bro","owner":"wayward710"},"bsl":{"title":"BSL (1C:Enterprise)","alias":"oscript","aliasTitles":{"oscript":"OneScript"},"owner":"Diversus23"},"c":{"title":"C","require":"clike","owner":"zeitgeist87"},"csharp":{"title":"C#","require":"clike","alias":["cs","dotnet"],"owner":"mvalipour"},"cpp":{"title":"C++","require":"c","owner":"zeitgeist87"},"cfscript":{"title":"CFScript","require":"clike","alias":"cfc","owner":"mjclemente"},"chaiscript":{"title":"ChaiScript","require":["clike","cpp"],"owner":"RunDevelopment"},"cil":{"title":"CIL","owner":"sbrl"},"clojure":{"title":"Clojure","owner":"troglotit"},"cmake":{"title":"CMake","owner":"mjrogozinski"},"coffeescript":{"title":"CoffeeScript","require":"javascript","alias":"coffee","owner":"R-osey"},"concurnas":{"title":"Concurnas","alias":"conc","owner":"jasontatton"},"csp":{"title":"Content-Security-Policy","owner":"ScottHelme"},"crystal":{"title":"Crystal","require":"ruby","owner":"MakeNowJust"},"css-extras":{"title":"CSS Extras","require":"css","modify":"css","owner":"milesj"},"csv":{"title":"CSV","owner":"RunDevelopment"},"cypher":{"title":"Cypher","owner":"RunDevelopment"},"d":{"title":"D","require":"clike","owner":"Golmote"},"dart":{"title":"Dart","require":"clike","owner":"Golmote"},"dataweave":{"title":"DataWeave","owner":"machaval"},"dax":{"title":"DAX","owner":"peterbud"},"dhall":{"title":"Dhall","owner":"RunDevelopment"},"diff":{"title":"Diff","owner":"uranusjr"},"django":{"title":"Django/Jinja2","require":"markup-templating","alias":"jinja2","owner":"romanvm"},"dns-zone-file":{"title":"DNS zone file","owner":"RunDevelopment","alias":"dns-zone"},"docker":{"title":"Docker","alias":"dockerfile","owner":"JustinBeckwith"},"dot":{"title":"DOT (Graphviz)","alias":"gv","optional":"markup","owner":"RunDevelopment"},"ebnf":{"title":"EBNF","owner":"RunDevelopment"},"editorconfig":{"title":"EditorConfig","owner":"osipxd"},"eiffel":{"title":"Eiffel","owner":"Conaclos"},"ejs":{"title":"EJS","require":["javascript","markup-templating"],"owner":"RunDevelopment","alias":"eta","aliasTitles":{"eta":"Eta"}},"elixir":{"title":"Elixir","owner":"Golmote"},"elm":{"title":"Elm","owner":"zwilias"},"etlua":{"title":"Embedded Lua templating","require":["lua","markup-templating"],"owner":"RunDevelopment"},"erb":{"title":"ERB","require":["ruby","markup-templating"],"owner":"Golmote"},"erlang":{"title":"Erlang","owner":"Golmote"},"excel-formula":{"title":"Excel Formula","alias":["xlsx","xls"],"owner":"RunDevelopment"},"fsharp":{"title":"F#","require":"clike","owner":"simonreynolds7"},"factor":{"title":"Factor","owner":"catb0t"},"false":{"title":"False","owner":"edukisto"},"firestore-security-rules":{"title":"Firestore security rules","require":"clike","owner":"RunDevelopment"},"flow":{"title":"Flow","require":"javascript","owner":"Golmote"},"fortran":{"title":"Fortran","owner":"Golmote"},"ftl":{"title":"FreeMarker Template Language","require":"markup-templating","owner":"RunDevelopment"},"gml":{"title":"GameMaker Language","alias":"gamemakerlanguage","require":"clike","owner":"LiarOnce"},"gcode":{"title":"G-code","owner":"RunDevelopment"},"gdscript":{"title":"GDScript","owner":"RunDevelopment"},"gedcom":{"title":"GEDCOM","owner":"Golmote"},"gherkin":{"title":"Gherkin","owner":"hason"},"git":{"title":"Git","owner":"lgiraudel"},"glsl":{"title":"GLSL","require":"c","owner":"Golmote"},"go":{"title":"Go","require":"clike","owner":"arnehormann"},"graphql":{"title":"GraphQL","optional":"markdown","owner":"Golmote"},"groovy":{"title":"Groovy","require":"clike","owner":"robfletcher"},"haml":{"title":"Haml","require":"ruby","optional":["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],"owner":"Golmote"},"handlebars":{"title":"Handlebars","require":"markup-templating","owner":"Golmote"},"haskell":{"title":"Haskell","alias":"hs","owner":"bholst"},"haxe":{"title":"Haxe","require":"clike","owner":"Golmote"},"hcl":{"title":"HCL","owner":"outsideris"},"hlsl":{"title":"HLSL","require":"c","owner":"RunDevelopment"},"http":{"title":"HTTP","optional":["css","javascript","json","markup","uri"],"owner":"danielgtaylor"},"hpkp":{"title":"HTTP Public-Key-Pins","owner":"ScottHelme"},"hsts":{"title":"HTTP Strict-Transport-Security","owner":"ScottHelme"},"ichigojam":{"title":"IchigoJam","owner":"BlueCocoa"},"icon":{"title":"Icon","owner":"Golmote"},"icu-message-format":{"title":"ICU Message Format","owner":"RunDevelopment"},"idris":{"title":"Idris","alias":"idr","owner":"KeenS","require":"haskell"},"ignore":{"title":".ignore","owner":"osipxd","alias":["gitignore","hgignore","npmignore"],"aliasTitles":{"gitignore":".gitignore","hgignore":".hgignore","npmignore":".npmignore"}},"inform7":{"title":"Inform 7","owner":"Golmote"},"ini":{"title":"Ini","owner":"aviaryan"},"io":{"title":"Io","owner":"AlesTsurko"},"j":{"title":"J","owner":"Golmote"},"java":{"title":"Java","require":"clike","owner":"sherblot"},"javadoc":{"title":"JavaDoc","require":["markup","java","javadoclike"],"modify":"java","optional":"scala","owner":"RunDevelopment"},"javadoclike":{"title":"JavaDoc-like","modify":["java","javascript","php"],"owner":"RunDevelopment"},"javastacktrace":{"title":"Java stack trace","owner":"RunDevelopment"},"jolie":{"title":"Jolie","require":"clike","owner":"thesave"},"jq":{"title":"JQ","owner":"RunDevelopment"},"jsdoc":{"title":"JSDoc","require":["javascript","javadoclike","typescript"],"modify":"javascript","optional":["actionscript","coffeescript"],"owner":"RunDevelopment"},"js-extras":{"title":"JS Extras","require":"javascript","modify":"javascript","optional":["actionscript","coffeescript","flow","n4js","typescript"],"owner":"RunDevelopment"},"json":{"title":"JSON","alias":"webmanifest","aliasTitles":{"webmanifest":"Web App Manifest"},"owner":"CupOfTea696"},"json5":{"title":"JSON5","require":"json","owner":"RunDevelopment"},"jsonp":{"title":"JSONP","require":"json","owner":"RunDevelopment"},"jsstacktrace":{"title":"JS stack trace","owner":"sbrl"},"js-templates":{"title":"JS Templates","require":"javascript","modify":"javascript","optional":["css","css-extras","graphql","markdown","markup"],"owner":"RunDevelopment"},"julia":{"title":"Julia","owner":"cdagnino"},"keyman":{"title":"Keyman","owner":"mcdurdin"},"kotlin":{"title":"Kotlin","alias":["kt","kts"],"aliasTitles":{"kts":"Kotlin Script"},"require":"clike","owner":"Golmote"},"kumir":{"title":"KuMir (КуМир)","alias":"kum","owner":"edukisto"},"latex":{"title":"LaTeX","alias":["tex","context"],"aliasTitles":{"tex":"TeX","context":"ConTeXt"},"owner":"japborst"},"latte":{"title":"Latte","require":["clike","markup-templating","php"],"owner":"nette"},"less":{"title":"Less","require":"css","optional":"css-extras","owner":"Golmote"},"lilypond":{"title":"LilyPond","require":"scheme","alias":"ly","owner":"RunDevelopment"},"liquid":{"title":"Liquid","owner":"cinhtau"},"lisp":{"title":"Lisp","alias":["emacs","elisp","emacs-lisp"],"owner":"JuanCaicedo"},"livescript":{"title":"LiveScript","owner":"Golmote"},"llvm":{"title":"LLVM IR","owner":"porglezomp"},"log":{"title":"Log file","owner":"RunDevelopment"},"lolcode":{"title":"LOLCODE","owner":"Golmote"},"lua":{"title":"Lua","owner":"Golmote"},"makefile":{"title":"Makefile","owner":"Golmote"},"markdown":{"title":"Markdown","require":"markup","optional":"yaml","alias":"md","owner":"Golmote"},"markup-templating":{"title":"Markup templating","require":"markup","owner":"Golmote"},"matlab":{"title":"MATLAB","owner":"Golmote"},"mel":{"title":"MEL","owner":"Golmote"},"mizar":{"title":"Mizar","owner":"Golmote"},"mongodb":{"title":"MongoDB","owner":"airs0urce","require":"javascript"},"monkey":{"title":"Monkey","owner":"Golmote"},"moonscript":{"title":"MoonScript","alias":"moon","owner":"RunDevelopment"},"n1ql":{"title":"N1QL","owner":"TMWilds"},"n4js":{"title":"N4JS","require":"javascript","optional":"jsdoc","alias":"n4jsd","owner":"bsmith-n4"},"nand2tetris-hdl":{"title":"Nand To Tetris HDL","owner":"stephanmax"},"naniscript":{"title":"Naninovel Script","owner":"Elringus","alias":"nani"},"nasm":{"title":"NASM","owner":"rbmj"},"neon":{"title":"NEON","owner":"nette"},"nevod":{"title":"Nevod","owner":"nezaboodka"},"nginx":{"title":"nginx","owner":"volado"},"nim":{"title":"Nim","owner":"Golmote"},"nix":{"title":"Nix","owner":"Golmote"},"nsis":{"title":"NSIS","owner":"idleberg"},"objectivec":{"title":"Objective-C","require":"c","alias":"objc","owner":"uranusjr"},"ocaml":{"title":"OCaml","owner":"Golmote"},"opencl":{"title":"OpenCL","require":"c","modify":["c","cpp"],"owner":"Milania1"},"openqasm":{"title":"OpenQasm","alias":"qasm","owner":"RunDevelopment"},"oz":{"title":"Oz","owner":"Golmote"},"parigp":{"title":"PARI/GP","owner":"Golmote"},"parser":{"title":"Parser","require":"markup","owner":"Golmote"},"pascal":{"title":"Pascal","alias":"objectpascal","aliasTitles":{"objectpascal":"Object Pascal"},"owner":"Golmote"},"pascaligo":{"title":"Pascaligo","owner":"DefinitelyNotAGoat"},"psl":{"title":"PATROL Scripting Language","owner":"bertysentry"},"pcaxis":{"title":"PC-Axis","alias":"px","owner":"RunDevelopment"},"peoplecode":{"title":"PeopleCode","alias":"pcode","owner":"RunDevelopment"},"perl":{"title":"Perl","owner":"Golmote"},"php":{"title":"PHP","require":"markup-templating","owner":"milesj"},"phpdoc":{"title":"PHPDoc","require":["php","javadoclike"],"modify":"php","owner":"RunDevelopment"},"php-extras":{"title":"PHP Extras","require":"php","modify":"php","owner":"milesj"},"plsql":{"title":"PL/SQL","require":"sql","owner":"Golmote"},"powerquery":{"title":"PowerQuery","alias":["pq","mscript"],"owner":"peterbud"},"powershell":{"title":"PowerShell","owner":"nauzilus"},"processing":{"title":"Processing","require":"clike","owner":"Golmote"},"prolog":{"title":"Prolog","owner":"Golmote"},"promql":{"title":"PromQL","owner":"arendjr"},"properties":{"title":".properties","owner":"Golmote"},"protobuf":{"title":"Protocol Buffers","require":"clike","owner":"just-boris"},"pug":{"title":"Pug","require":["markup","javascript"],"optional":["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],"owner":"Golmote"},"puppet":{"title":"Puppet","owner":"Golmote"},"pure":{"title":"Pure","optional":["c","cpp","fortran"],"owner":"Golmote"},"purebasic":{"title":"PureBasic","require":"clike","alias":"pbfasm","owner":"HeX0R101"},"purescript":{"title":"PureScript","require":"haskell","alias":"purs","owner":"sriharshachilakapati"},"python":{"title":"Python","alias":"py","owner":"multipetros"},"q":{"title":"Q (kdb+ database)","owner":"Golmote"},"qml":{"title":"QML","require":"javascript","owner":"RunDevelopment"},"qore":{"title":"Qore","require":"clike","owner":"temnroegg"},"r":{"title":"R","owner":"Golmote"},"racket":{"title":"Racket","require":"scheme","alias":"rkt","owner":"RunDevelopment"},"jsx":{"title":"React JSX","require":["markup","javascript"],"optional":["jsdoc","js-extras","js-templates"],"owner":"vkbansal"},"tsx":{"title":"React TSX","require":["jsx","typescript"]},"reason":{"title":"Reason","require":"clike","owner":"Golmote"},"regex":{"title":"Regex","owner":"RunDevelopment"},"rego":{"title":"Rego","owner":"JordanSh"},"renpy":{"title":"Ren'py","alias":"rpy","owner":"HyuchiaDiego"},"rest":{"title":"reST (reStructuredText)","owner":"Golmote"},"rip":{"title":"Rip","owner":"ravinggenius"},"roboconf":{"title":"Roboconf","owner":"Golmote"},"robotframework":{"title":"Robot Framework","alias":"robot","owner":"RunDevelopment"},"ruby":{"title":"Ruby","require":"clike","alias":"rb","owner":"samflores"},"rust":{"title":"Rust","owner":"Golmote"},"sas":{"title":"SAS","optional":["groovy","lua","sql"],"owner":"Golmote"},"sass":{"title":"Sass (Sass)","require":"css","owner":"Golmote"},"scss":{"title":"Sass (Scss)","require":"css","optional":"css-extras","owner":"MoOx"},"scala":{"title":"Scala","require":"java","owner":"jozic"},"scheme":{"title":"Scheme","owner":"bacchus123"},"shell-session":{"title":"Shell session","require":"bash","alias":["sh-session","shellsession"],"owner":"RunDevelopment"},"smali":{"title":"Smali","owner":"RunDevelopment"},"smalltalk":{"title":"Smalltalk","owner":"Golmote"},"smarty":{"title":"Smarty","require":"markup-templating","owner":"Golmote"},"sml":{"title":"SML","alias":"smlnj","aliasTitles":{"smlnj":"SML/NJ"},"owner":"RunDevelopment"},"solidity":{"title":"Solidity (Ethereum)","alias":"sol","require":"clike","owner":"glachaud"},"solution-file":{"title":"Solution file","alias":"sln","owner":"RunDevelopment"},"soy":{"title":"Soy (Closure Template)","require":"markup-templating","owner":"Golmote"},"sparql":{"title":"SPARQL","require":"turtle","owner":"Triply-Dev","alias":"rq"},"splunk-spl":{"title":"Splunk SPL","owner":"RunDevelopment"},"sqf":{"title":"SQF: Status Quo Function (Arma 3)","require":"clike","owner":"RunDevelopment"},"sql":{"title":"SQL","owner":"multipetros"},"squirrel":{"title":"Squirrel","require":"clike","owner":"RunDevelopment"},"stan":{"title":"Stan","owner":"RunDevelopment"},"iecst":{"title":"Structured Text (IEC 61131-3)","owner":"serhioromano"},"stylus":{"title":"Stylus","owner":"vkbansal"},"swift":{"title":"Swift","require":"clike","owner":"chrischares"},"t4-templating":{"title":"T4 templating","owner":"RunDevelopment"},"t4-cs":{"title":"T4 Text Templates (C#)","require":["t4-templating","csharp"],"alias":"t4","owner":"RunDevelopment"},"t4-vb":{"title":"T4 Text Templates (VB)","require":["t4-templating","vbnet"],"owner":"RunDevelopment"},"tap":{"title":"TAP","owner":"isaacs","require":"yaml"},"tcl":{"title":"Tcl","owner":"PeterChaplin"},"tt2":{"title":"Template Toolkit 2","require":["clike","markup-templating"],"owner":"gflohr"},"textile":{"title":"Textile","require":"markup","optional":"css","owner":"Golmote"},"toml":{"title":"TOML","owner":"RunDevelopment"},"turtle":{"title":"Turtle","alias":"trig","aliasTitles":{"trig":"TriG"},"owner":"jakubklimek"},"twig":{"title":"Twig","require":"markup","owner":"brandonkelly"},"typescript":{"title":"TypeScript","require":"javascript","optional":"js-templates","alias":"ts","owner":"vkbansal"},"typoscript":{"title":"TypoScript","alias":"tsconfig","aliasTitles":{"tsconfig":"TSConfig"},"owner":"dkern"},"unrealscript":{"title":"UnrealScript","alias":["uscript","uc"],"owner":"RunDevelopment"},"uri":{"title":"URI","alias":"url","aliasTitles":{"url":"URL"},"owner":"RunDevelopment"},"v":{"title":"V","require":"clike","owner":"taggon"},"vala":{"title":"Vala","require":"clike","optional":"regex","owner":"TemplarVolk"},"vbnet":{"title":"VB.Net","require":"basic","owner":"Bigsby"},"velocity":{"title":"Velocity","require":"markup","owner":"Golmote"},"verilog":{"title":"Verilog","owner":"a-rey"},"vhdl":{"title":"VHDL","owner":"a-rey"},"vim":{"title":"vim","owner":"westonganger"},"visual-basic":{"title":"Visual Basic","alias":["vb","vba"],"aliasTitles":{"vba":"VBA"},"owner":"Golmote"},"warpscript":{"title":"WarpScript","owner":"RunDevelopment"},"wasm":{"title":"WebAssembly","owner":"Golmote"},"wiki":{"title":"Wiki markup","require":"markup","owner":"Golmote"},"xeora":{"title":"Xeora","require":"markup","alias":"xeoracube","aliasTitles":{"xeoracube":"XeoraCube"},"owner":"freakmaxi"},"xml-doc":{"title":"XML doc (.net)","require":"markup","modify":["csharp","fsharp","vbnet"],"owner":"RunDevelopment"},"xojo":{"title":"Xojo (REALbasic)","owner":"Golmote"},"xquery":{"title":"XQuery","require":"markup","owner":"Golmote"},"yaml":{"title":"YAML","alias":"yml","owner":"hason"},"yang":{"title":"YANG","owner":"RunDevelopment"},"zig":{"title":"Zig","owner":"RunDevelopment"}},"plugins":{"meta":{"path":"plugins/{id}/prism-{id}","link":"plugins/{id}/"},"line-highlight":{"title":"Line Highlight","description":"Highlights specific lines and/or line ranges."},"line-numbers":{"title":"Line Numbers","description":"Line number at the beginning of code lines.","owner":"kuba-kubula"},"show-invisibles":{"title":"Show Invisibles","description":"Show hidden characters such as tabs and line breaks.","optional":["autolinker","data-uri-highlight"]},"autolinker":{"title":"Autolinker","description":"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},"wpd":{"title":"WebPlatform Docs","description":"Makes tokens link to WebPlatform.org documentation. The links open in a new tab."},"custom-class":{"title":"Custom Class","description":"This plugin allows you to prefix Prism's default classes (.comment
can become .namespace--comment
) or replace them with your defined ones (like .editor__comment
). You can even add new classes.","owner":"dvkndn","noCSS":true},"file-highlight":{"title":"File Highlight","description":"Fetch external files and highlight them with Prism. Used on the Prism website itself.","noCSS":true},"show-language":{"title":"Show Language","description":"Display the highlighted language in code blocks (inline code does not show the label).","owner":"nauzilus","noCSS":true,"require":"toolbar"},"jsonp-highlight":{"title":"JSONP Highlight","description":"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).","noCSS":true,"owner":"nauzilus"},"highlight-keywords":{"title":"Highlight Keywords","description":"Adds special CSS classes for each keyword matched in the code. For example, the keyword if
will have the class keyword-if
as well. You can have fine grained control over the appearance of each keyword by providing your own CSS rules.","owner":"vkbansal","noCSS":true},"remove-initial-line-feed":{"title":"Remove initial line feed","description":"Removes the initial line feed in code blocks.","owner":"Golmote","noCSS":true},"inline-color":{"title":"Inline color","description":"Adds a small inline preview for colors in style sheets.","require":"css-extras","owner":"RunDevelopment"},"previewers":{"title":"Previewers","description":"Previewers for angles, colors, gradients, easing and time.","require":"css-extras","owner":"Golmote"},"autoloader":{"title":"Autoloader","description":"Automatically loads the needed languages to highlight the code blocks.","owner":"Golmote","noCSS":true},"keep-markup":{"title":"Keep Markup","description":"Prevents custom markup from being dropped out during highlighting.","owner":"Golmote","optional":"normalize-whitespace","noCSS":true},"command-line":{"title":"Command Line","description":"Display a command line with a prompt and, optionally, the output/response from the commands.","owner":"chriswells0"},"unescaped-markup":{"title":"Unescaped Markup","description":"Write markup without having to escape anything."},"normalize-whitespace":{"title":"Normalize Whitespace","description":"Supports multiple operations to normalize whitespace in code blocks.","owner":"zeitgeist87","optional":"unescaped-markup","noCSS":true},"data-uri-highlight":{"title":"Data-URI Highlight","description":"Highlights data-URI contents.","owner":"Golmote","noCSS":true},"toolbar":{"title":"Toolbar","description":"Attach a toolbar for plugins to easily register buttons on the top of a code block.","owner":"mAAdhaTTah"},"copy-to-clipboard":{"title":"Copy to Clipboard Button","description":"Add a button that copies the code block to the clipboard when clicked.","owner":"mAAdhaTTah","require":"toolbar","noCSS":true},"download-button":{"title":"Download Button","description":"A button in the toolbar of a code block adding a convenient way to download a code file.","owner":"Golmote","require":"toolbar","noCSS":true},"match-braces":{"title":"Match braces","description":"Highlights matching braces.","owner":"RunDevelopment"},"diff-highlight":{"title":"Diff Highlight","description":"Highlights the code inside diff blocks.","owner":"RunDevelopment","require":"diff"},"filter-highlight-all":{"title":"Filter highlightAll","description":"Filters the elements the highlightAll
and highlightAllUnder
methods actually highlight.","owner":"RunDevelopment","noCSS":true},"treeview":{"title":"Treeview","description":"A language with special styles to highlight file system tree structures.","owner":"Golmote"}}};
if (typeof module !== 'undefined' && module.exports) { module.exports = components; }
\ No newline at end of file
diff --git a/components.json b/components.json
index 1fafc5af22..836c4f6521 100644
--- a/components.json
+++ b/components.json
@@ -733,6 +733,10 @@
"title": "LLVM IR",
"owner": "porglezomp"
},
+ "log": {
+ "title": "Log file",
+ "owner": "RunDevelopment"
+ },
"lolcode": {
"title": "LOLCODE",
"owner": "Golmote"
diff --git a/components/prism-log.js b/components/prism-log.js
new file mode 100644
index 0000000000..da04bc7ab2
--- /dev/null
+++ b/components/prism-log.js
@@ -0,0 +1,108 @@
+// This is a language definition for generic log files.
+// Since there is no one log format, this language definition has to support all formats to some degree.
+//
+// Based on https://github.com/MTDL9/vim-log-highlighting
+
+Prism.languages.log = {
+ 'string': {
+ // Single-quoted strings must not be confused with plain text. E.g. Can't isn't Susan's Chris' toy
+ pattern: /"(?:[^"\\\r\n]|\\.)*"|'(?![st] | \w)(?:[^'\\\r\n]|\\.)*'/,
+ greedy: true,
+ },
+
+ 'level': [
+ {
+ pattern: /\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\b/,
+ alias: ['error', 'important']
+ },
+ {
+ pattern: /\b(?:WARN|WARNING)\b/,
+ alias: ['warning', 'important']
+ },
+ {
+ pattern: /\b(?:DISPLAY|INFO|NOTICE|STATUS)\b/,
+ alias: ['info', 'keyword']
+ },
+ {
+ pattern: /\b(?:DEBUG|FINE)\b/,
+ alias: ['debug', 'keyword']
+ },
+ {
+ pattern: /\b(?:FINER|FINEST|TRACE|VERBOSE)\b/,
+ alias: ['trace', 'comment']
+ }
+ ],
+
+ 'property': {
+ pattern: /((?:^|[\]|])[ \t]*)[a-z_](?:[\w-]|\b\/\b)*(?:[. ]\(?\w(?:[\w-]|\b\/\b)*\)?)*:(?=\s)/im,
+ lookbehind: true
+ },
+
+ 'separator': {
+ pattern: /(^|[^-+])-{3,}|={3,}|\*{3,}|- - /m,
+ lookbehind: true,
+ alias: 'comment'
+ },
+
+ 'url': /\b(?:https?|ftp|file):\/\/[^\s|,;'"]*[^\s|,;'">.]/,
+ 'email': {
+ pattern: /(^|\s)[-\w+.]+@[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+(?=\s)/,
+ lookbehind: true,
+ alias: 'url'
+ },
+
+ 'ip-address': {
+ pattern: /\b(?:\d{1,3}(?:\.\d{1,3}){3})\b/i,
+ alias: 'constant'
+ },
+ 'mac-address': {
+ pattern: /\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\b/i,
+ alias: 'constant'
+ },
+ 'domain': {
+ pattern: /(^|\s)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*\.[a-z][a-z0-9-]+(?=\s)/,
+ lookbehind: true,
+ alias: 'constant'
+ },
+
+ 'uuid': {
+ pattern: /\b\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\b/,
+ alias: 'constant'
+ },
+ 'hash': {
+ pattern: /\b(?:[a-f0-9]{32}){1,2}\b/i,
+ alias: 'constant'
+ },
+
+ 'file-path': {
+ pattern: /\b[a-z]:[\\/][^\s|,;:(){}\[\]"']+|(^|[\s:\[\](>|])\.{0,2}\/\w[^\s|,;:(){}\[\]"']*/i,
+ lookbehind: true,
+ greedy: true,
+ alias: 'string'
+ },
+
+ 'date': {
+ pattern: RegExp(
+ /\b\d{4}[-/]\d{2}[-/]\d{2}T(?=\d{1,2}:)/.source +
+ '|' +
+ /\b\d{1,4}[-/ ](?:\d{1,2}|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[-/ ]\d{2,4}T?\b/.source +
+ '|' +
+ /\b(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:\s{1,2}(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))?|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s{1,2}\d{1,2}\b/.source,
+ 'i'
+ ),
+ alias: 'number'
+ },
+ 'time': {
+ pattern: /\b\d{1,2}:\d{1,2}:\d{1,2}(?:[.,:]\d+)?(?:\s?[+-]\d{2,4}|Z)?\b/,
+ alias: 'number'
+ },
+
+ 'boolean': /\b(?:true|false|null)\b/i,
+ 'number': {
+ pattern: /(^|[^.\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\d[\da-f]*(?:\.\d+)*(?:e[+-]?\d+)?[a-z]{0,3}\b)\b(?!\.\w)/i,
+ lookbehind: true
+ },
+
+ 'operator': /[;:?<=>~/@!$%&+\-|^(){}*#]/,
+ 'punctuation': /[\[\].,]/
+};
diff --git a/components/prism-log.min.js b/components/prism-log.min.js
new file mode 100644
index 0000000000..a81f0d536c
--- /dev/null
+++ b/components/prism-log.min.js
@@ -0,0 +1 @@
+Prism.languages.log={string:{pattern:/"(?:[^"\\\r\n]|\\.)*"|'(?![st] | \w)(?:[^'\\\r\n]|\\.)*'/,greedy:!0},level:[{pattern:/\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\b/,alias:["error","important"]},{pattern:/\b(?:WARN|WARNING)\b/,alias:["warning","important"]},{pattern:/\b(?:DISPLAY|INFO|NOTICE|STATUS)\b/,alias:["info","keyword"]},{pattern:/\b(?:DEBUG|FINE)\b/,alias:["debug","keyword"]},{pattern:/\b(?:FINER|FINEST|TRACE|VERBOSE)\b/,alias:["trace","comment"]}],property:{pattern:/((?:^|[\]|])[ \t]*)[a-z_](?:[\w-]|\b\/\b)*(?:[. ]\(?\w(?:[\w-]|\b\/\b)*\)?)*:(?=\s)/im,lookbehind:!0},separator:{pattern:/(^|[^-+])-{3,}|={3,}|\*{3,}|- - /m,lookbehind:!0,alias:"comment"},url:/\b(?:https?|ftp|file):\/\/[^\s|,;'"]*[^\s|,;'">.]/,email:{pattern:/(^|\s)[-\w+.]+@[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+(?=\s)/,lookbehind:!0,alias:"url"},"ip-address":{pattern:/\b(?:\d{1,3}(?:\.\d{1,3}){3})\b/i,alias:"constant"},"mac-address":{pattern:/\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\b/i,alias:"constant"},domain:{pattern:/(^|\s)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*\.[a-z][a-z0-9-]+(?=\s)/,lookbehind:!0,alias:"constant"},uuid:{pattern:/\b\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\b/,alias:"constant"},hash:{pattern:/\b(?:[a-f0-9]{32}){1,2}\b/i,alias:"constant"},"file-path":{pattern:/\b[a-z]:[\\/][^\s|,;:(){}\[\]"']+|(^|[\s:\[\](>|])\.{0,2}\/\w[^\s|,;:(){}\[\]"']*/i,lookbehind:!0,greedy:!0,alias:"string"},date:{pattern:RegExp("\\b\\d{4}[-/]\\d{2}[-/]\\d{2}T(?=\\d{1,2}:)|\\b\\d{1,4}[-/ ](?:\\d{1,2}|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[-/ ]\\d{2,4}T?\\b|\\b(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:\\s{1,2}(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))?|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s{1,2}\\d{1,2}\\b","i"),alias:"number"},time:{pattern:/\b\d{1,2}:\d{1,2}:\d{1,2}(?:[.,:]\d+)?(?:\s?[+-]\d{2,4}|Z)?\b/,alias:"number"},boolean:/\b(?:true|false|null)\b/i,number:{pattern:/(^|[^.\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\d[\da-f]*(?:\.\d+)*(?:e[+-]?\d+)?[a-z]{0,3}\b)\b(?!\.\w)/i,lookbehind:!0},operator:/[;:?<=>~/@!$%&+\-|^(){}*#]/,punctuation:/[\[\].,]/};
\ No newline at end of file
diff --git a/examples/prism-log.html b/examples/prism-log.html
new file mode 100644
index 0000000000..efb1d4f43d
--- /dev/null
+++ b/examples/prism-log.html
@@ -0,0 +1,10 @@
+
/47.29.201.179 - - [28/Feb/2019:13:17:10 +0000] "GET /?p=1 HTTP/2.0" 200 5316 "https://domain1.com/?p=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "2.75"
+Mar 19 22:10:18 xxxxxx journal: xxxxxxx.mylabserver.com nginx: photos.example.com 127.0.0.1 - - [19/Mar/2018:22:10:18 +0000] "GET / HTTP/1.1" 200 1863 "-" "curl/7.29.0" "-"
+Mar 19 22:10:24 xxxxxxx journal: xxxxxxxx.mylabserver.com nginx: photos.example.com 127.0.0.1 - - [19/Mar/2018:22:10:24 +0000] "GET / HTTP/1.1" 200 53324 "-" "curl/7.29.0" "-"
+TLSv1.2 AES128-SHA 1.1.1.1 "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
+TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 2.2.2.2 "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
+TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0"
+TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 4.4.4.4 "Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0"
+TLSv1 AES128-SHA 5.5.5.5 "Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0"
+TLSv1.2 ECDHE-RSA-CHACHA20-POLY1305 6.6.6.6 "Mozilla/5.0 (Linux; U; Android 5.0.2; en-US; XT1068 Build/LXB22.46-28) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.10.2.1164 Mobile Safari/537.36"
diff --git a/plugins/show-language/prism-show-language.js b/plugins/show-language/prism-show-language.js
index 8e1a034ce9..5db7031b11 100644
--- a/plugins/show-language/prism-show-language.js
+++ b/plugins/show-language/prism-show-language.js
@@ -126,6 +126,7 @@
"elisp": "Lisp",
"emacs-lisp": "Lisp",
"llvm": "LLVM IR",
+ "log": "Log file",
"lolcode": "LOLCODE",
"md": "Markdown",
"markup-templating": "Markup templating",
diff --git a/plugins/show-language/prism-show-language.min.js b/plugins/show-language/prism-show-language.min.js
index 209b527fec..a5e67f1fc5 100644
--- a/plugins/show-language/prism-show-language.min.js
+++ b/plugins/show-language/prism-show-language.min.js
@@ -1 +1 @@
-!function(){if("undefined"!=typeof self&&self.Prism&&self.document)if(Prism.plugins.toolbar){var i={none:"Plain text",plain:"Plain text",plaintext:"Plain text",text:"Plain text",txt:"Plain text",html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",rss:"RSS",css:"CSS",clike:"C-like",js:"JavaScript",abap:"ABAP",abnf:"ABNF",al:"AL",antlr4:"ANTLR4",g4:"ANTLR4",apacheconf:"Apache Configuration",apl:"APL",aql:"AQL",arff:"ARFF",asciidoc:"AsciiDoc",adoc:"AsciiDoc",aspnet:"ASP.NET (C#)",asm6502:"6502 Assembly",autohotkey:"AutoHotkey",autoit:"AutoIt",basic:"BASIC",bbcode:"BBcode",bnf:"BNF",rbnf:"RBNF",bsl:"BSL (1C:Enterprise)",oscript:"OneScript",csharp:"C#",cs:"C#",dotnet:"C#",cpp:"C++",cfscript:"CFScript",cfc:"CFScript",cil:"CIL",cmake:"CMake",coffee:"CoffeeScript",conc:"Concurnas",csp:"Content-Security-Policy","css-extras":"CSS Extras",csv:"CSV",dataweave:"DataWeave",dax:"DAX",django:"Django/Jinja2",jinja2:"Django/Jinja2","dns-zone-file":"DNS zone file","dns-zone":"DNS zone file",dockerfile:"Docker",dot:"DOT (Graphviz)",gv:"DOT (Graphviz)",ebnf:"EBNF",editorconfig:"EditorConfig",ejs:"EJS",etlua:"Embedded Lua templating",erb:"ERB","excel-formula":"Excel Formula",xlsx:"Excel Formula",xls:"Excel Formula",fsharp:"F#","firestore-security-rules":"Firestore security rules",ftl:"FreeMarker Template Language",gml:"GameMaker Language",gamemakerlanguage:"GameMaker Language",gcode:"G-code",gdscript:"GDScript",gedcom:"GEDCOM",glsl:"GLSL",graphql:"GraphQL",hs:"Haskell",hcl:"HCL",hlsl:"HLSL",http:"HTTP",hpkp:"HTTP Public-Key-Pins",hsts:"HTTP Strict-Transport-Security",ichigojam:"IchigoJam","icu-message-format":"ICU Message Format",idr:"Idris",ignore:".ignore",gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore",inform7:"Inform 7",javadoc:"JavaDoc",javadoclike:"JavaDoc-like",javastacktrace:"Java stack trace",jq:"JQ",jsdoc:"JSDoc","js-extras":"JS Extras",json:"JSON",webmanifest:"Web App Manifest",json5:"JSON5",jsonp:"JSONP",jsstacktrace:"JS stack trace","js-templates":"JS Templates",kts:"Kotlin Script",kt:"Kotlin",kumir:"KuMir (КуМир)",kum:"KuMir (КуМир)",latex:"LaTeX",tex:"TeX",context:"ConTeXt",lilypond:"LilyPond",ly:"LilyPond",emacs:"Lisp",elisp:"Lisp","emacs-lisp":"Lisp",llvm:"LLVM IR",lolcode:"LOLCODE",md:"Markdown","markup-templating":"Markup templating",matlab:"MATLAB",mel:"MEL",mongodb:"MongoDB",moon:"MoonScript",n1ql:"N1QL",n4js:"N4JS",n4jsd:"N4JS","nand2tetris-hdl":"Nand To Tetris HDL",naniscript:"Naninovel Script",nani:"Naninovel Script",nasm:"NASM",neon:"NEON",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",objc:"Objective-C",ocaml:"OCaml",opencl:"OpenCL",openqasm:"OpenQasm",qasm:"OpenQasm",parigp:"PARI/GP",objectpascal:"Object Pascal",psl:"PATROL Scripting Language",pcaxis:"PC-Axis",px:"PC-Axis",peoplecode:"PeopleCode",pcode:"PeopleCode",php:"PHP",phpdoc:"PHPDoc","php-extras":"PHP Extras",plsql:"PL/SQL",powerquery:"PowerQuery",pq:"PowerQuery",mscript:"PowerQuery",powershell:"PowerShell",promql:"PromQL",properties:".properties",protobuf:"Protocol Buffers",purebasic:"PureBasic",pbfasm:"PureBasic",purs:"PureScript",py:"Python",q:"Q (kdb+ database)",qml:"QML",rkt:"Racket",jsx:"React JSX",tsx:"React TSX",renpy:"Ren'py",rpy:"Ren'py",rest:"reST (reStructuredText)",robotframework:"Robot Framework",robot:"Robot Framework",rb:"Ruby",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)","shell-session":"Shell session","sh-session":"Shell session",shellsession:"Shell session",sml:"SML",smlnj:"SML/NJ",solidity:"Solidity (Ethereum)",sol:"Solidity (Ethereum)","solution-file":"Solution file",sln:"Solution file",soy:"Soy (Closure Template)",sparql:"SPARQL",rq:"SPARQL","splunk-spl":"Splunk SPL",sqf:"SQF: Status Quo Function (Arma 3)",sql:"SQL",iecst:"Structured Text (IEC 61131-3)","t4-templating":"T4 templating","t4-cs":"T4 Text Templates (C#)",t4:"T4 Text Templates (C#)","t4-vb":"T4 Text Templates (VB)",tap:"TAP",tt2:"Template Toolkit 2",toml:"TOML",trig:"TriG",ts:"TypeScript",tsconfig:"TSConfig",uscript:"UnrealScript",uc:"UnrealScript",uri:"URI",url:"URL",vbnet:"VB.Net",vhdl:"VHDL",vim:"vim","visual-basic":"Visual Basic",vba:"VBA",vb:"Visual Basic",wasm:"WebAssembly",wiki:"Wiki markup",xeoracube:"XeoraCube","xml-doc":"XML doc (.net)",xojo:"Xojo (REALbasic)",xquery:"XQuery",yaml:"YAML",yml:"YAML",yang:"YANG"};Prism.plugins.toolbar.registerButton("show-language",function(e){var a=e.element.parentNode;if(a&&/pre/i.test(a.nodeName)){var t,s=a.getAttribute("data-language")||i[e.language]||((t=e.language)?(t.substring(0,1).toUpperCase()+t.substring(1)).replace(/s(?=cript)/,"S"):t);if(s){var o=document.createElement("span");return o.textContent=s,o}}})}else console.warn("Show Languages plugin loaded before Toolbar plugin.")}();
\ No newline at end of file
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document)if(Prism.plugins.toolbar){var i={none:"Plain text",plain:"Plain text",plaintext:"Plain text",text:"Plain text",txt:"Plain text",html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",rss:"RSS",css:"CSS",clike:"C-like",js:"JavaScript",abap:"ABAP",abnf:"ABNF",al:"AL",antlr4:"ANTLR4",g4:"ANTLR4",apacheconf:"Apache Configuration",apl:"APL",aql:"AQL",arff:"ARFF",asciidoc:"AsciiDoc",adoc:"AsciiDoc",aspnet:"ASP.NET (C#)",asm6502:"6502 Assembly",autohotkey:"AutoHotkey",autoit:"AutoIt",basic:"BASIC",bbcode:"BBcode",bnf:"BNF",rbnf:"RBNF",bsl:"BSL (1C:Enterprise)",oscript:"OneScript",csharp:"C#",cs:"C#",dotnet:"C#",cpp:"C++",cfscript:"CFScript",cfc:"CFScript",cil:"CIL",cmake:"CMake",coffee:"CoffeeScript",conc:"Concurnas",csp:"Content-Security-Policy","css-extras":"CSS Extras",csv:"CSV",dataweave:"DataWeave",dax:"DAX",django:"Django/Jinja2",jinja2:"Django/Jinja2","dns-zone-file":"DNS zone file","dns-zone":"DNS zone file",dockerfile:"Docker",dot:"DOT (Graphviz)",gv:"DOT (Graphviz)",ebnf:"EBNF",editorconfig:"EditorConfig",ejs:"EJS",etlua:"Embedded Lua templating",erb:"ERB","excel-formula":"Excel Formula",xlsx:"Excel Formula",xls:"Excel Formula",fsharp:"F#","firestore-security-rules":"Firestore security rules",ftl:"FreeMarker Template Language",gml:"GameMaker Language",gamemakerlanguage:"GameMaker Language",gcode:"G-code",gdscript:"GDScript",gedcom:"GEDCOM",glsl:"GLSL",graphql:"GraphQL",hs:"Haskell",hcl:"HCL",hlsl:"HLSL",http:"HTTP",hpkp:"HTTP Public-Key-Pins",hsts:"HTTP Strict-Transport-Security",ichigojam:"IchigoJam","icu-message-format":"ICU Message Format",idr:"Idris",ignore:".ignore",gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore",inform7:"Inform 7",javadoc:"JavaDoc",javadoclike:"JavaDoc-like",javastacktrace:"Java stack trace",jq:"JQ",jsdoc:"JSDoc","js-extras":"JS Extras",json:"JSON",webmanifest:"Web App Manifest",json5:"JSON5",jsonp:"JSONP",jsstacktrace:"JS stack trace","js-templates":"JS Templates",kts:"Kotlin Script",kt:"Kotlin",kumir:"KuMir (КуМир)",kum:"KuMir (КуМир)",latex:"LaTeX",tex:"TeX",context:"ConTeXt",lilypond:"LilyPond",ly:"LilyPond",emacs:"Lisp",elisp:"Lisp","emacs-lisp":"Lisp",llvm:"LLVM IR",log:"Log file",lolcode:"LOLCODE",md:"Markdown","markup-templating":"Markup templating",matlab:"MATLAB",mel:"MEL",mongodb:"MongoDB",moon:"MoonScript",n1ql:"N1QL",n4js:"N4JS",n4jsd:"N4JS","nand2tetris-hdl":"Nand To Tetris HDL",naniscript:"Naninovel Script",nani:"Naninovel Script",nasm:"NASM",neon:"NEON",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",objc:"Objective-C",ocaml:"OCaml",opencl:"OpenCL",openqasm:"OpenQasm",qasm:"OpenQasm",parigp:"PARI/GP",objectpascal:"Object Pascal",psl:"PATROL Scripting Language",pcaxis:"PC-Axis",px:"PC-Axis",peoplecode:"PeopleCode",pcode:"PeopleCode",php:"PHP",phpdoc:"PHPDoc","php-extras":"PHP Extras",plsql:"PL/SQL",powerquery:"PowerQuery",pq:"PowerQuery",mscript:"PowerQuery",powershell:"PowerShell",promql:"PromQL",properties:".properties",protobuf:"Protocol Buffers",purebasic:"PureBasic",pbfasm:"PureBasic",purs:"PureScript",py:"Python",q:"Q (kdb+ database)",qml:"QML",rkt:"Racket",jsx:"React JSX",tsx:"React TSX",renpy:"Ren'py",rpy:"Ren'py",rest:"reST (reStructuredText)",robotframework:"Robot Framework",robot:"Robot Framework",rb:"Ruby",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)","shell-session":"Shell session","sh-session":"Shell session",shellsession:"Shell session",sml:"SML",smlnj:"SML/NJ",solidity:"Solidity (Ethereum)",sol:"Solidity (Ethereum)","solution-file":"Solution file",sln:"Solution file",soy:"Soy (Closure Template)",sparql:"SPARQL",rq:"SPARQL","splunk-spl":"Splunk SPL",sqf:"SQF: Status Quo Function (Arma 3)",sql:"SQL",iecst:"Structured Text (IEC 61131-3)","t4-templating":"T4 templating","t4-cs":"T4 Text Templates (C#)",t4:"T4 Text Templates (C#)","t4-vb":"T4 Text Templates (VB)",tap:"TAP",tt2:"Template Toolkit 2",toml:"TOML",trig:"TriG",ts:"TypeScript",tsconfig:"TSConfig",uscript:"UnrealScript",uc:"UnrealScript",uri:"URI",url:"URL",vbnet:"VB.Net",vhdl:"VHDL",vim:"vim","visual-basic":"Visual Basic",vba:"VBA",vb:"Visual Basic",wasm:"WebAssembly",wiki:"Wiki markup",xeoracube:"XeoraCube","xml-doc":"XML doc (.net)",xojo:"Xojo (REALbasic)",xquery:"XQuery",yaml:"YAML",yml:"YAML",yang:"YANG"};Prism.plugins.toolbar.registerButton("show-language",function(e){var a=e.element.parentNode;if(a&&/pre/i.test(a.nodeName)){var t,s=a.getAttribute("data-language")||i[e.language]||((t=e.language)?(t.substring(0,1).toUpperCase()+t.substring(1)).replace(/s(?=cript)/,"S"):t);if(s){var o=document.createElement("span");return o.textContent=s,o}}})}else console.warn("Show Languages plugin loaded before Toolbar plugin.")}();
\ No newline at end of file
diff --git a/tests/languages/log/_discord.test b/tests/languages/log/_discord.test
new file mode 100644
index 0000000000..064e815667
--- /dev/null
+++ b/tests/languages/log/_discord.test
@@ -0,0 +1,420 @@
+[2020-12-07][23:26:36][DEBUG][discord_dispatch::application_manager:195] App started. version="1.10.5"
+[2020-12-07][23:26:36][DEBUG][discord_dispatch::application_manager:1030] Searching for applications. install_path=AbsolutePath { path_buf: "C:\\Users\\micha\\AppData\\Local\\DiscordGames" }
+[2020-12-07][23:26:36][WARN][discord_dispatch::application_manager:1034] Failed to read install path. path=AbsolutePath { path_buf: "C:\\Users\\micha\\AppData\\Local\\DiscordGames" } error=Os { code: 3, kind: NotFound, message: "Das System kann den angegebenen Pfad nicht finden." }
+[2020-12-09][17:25:53][DEBUG][discord_dispatch::application_manager:195] App started. version="1.10.5"
+[2020-12-09][17:25:53][DEBUG][discord_dispatch::application_manager:1030] Searching for applications. install_path=AbsolutePath { path_buf: "C:\\Users\\micha\\AppData\\Local\\DiscordGames" }
+[2020-12-09][17:25:53][WARN][discord_dispatch::application_manager:1034] Failed to read install path. path=AbsolutePath { path_buf: "C:\\Users\\micha\\AppData\\Local\\DiscordGames" } error=Os { code: 3, kind: NotFound, message: "Das System kann den angegebenen Pfad nicht finden." }
+[2020-12-10][12:30:59][DEBUG][discord_dispatch::application_manager:195] App started. version="1.10.5"
+[2020-12-10][12:30:59][DEBUG][discord_dispatch::application_manager:1030] Searching for applications. install_path=AbsolutePath { path_buf: "C:\\Users\\micha\\AppData\\Local\\DiscordGames" }
+[2020-12-10][12:30:59][WARN][discord_dispatch::application_manager:1034] Failed to read install path. path=AbsolutePath { path_buf: "C:\\Users\\micha\\AppData\\Local\\DiscordGames" } error=Os { code: 3, kind: NotFound, message: "Das System kann den angegebenen Pfad nicht finden." }
+[2020-12-10][21:42:22][DEBUG][discord_dispatch::application_manager:195] App started. version="1.10.5"
+[2020-12-10][21:42:22][DEBUG][discord_dispatch::application_manager:1030] Searching for applications. install_path=AbsolutePath { path_buf: "C:\\Users\\micha\\AppData\\Local\\DiscordGames" }
+[2020-12-10][21:42:22][WARN][discord_dispatch::application_manager:1034] Failed to read install path. path=AbsolutePath { path_buf: "C:\\Users\\micha\\AppData\\Local\\DiscordGames" } error=Os { code: 3, kind: NotFound, message: "Das System kann den angegebenen Pfad nicht finden." }
+[2020-12-11][13:05:13][DEBUG][discord_dispatch::application_manager:195] App started. version="1.10.5"
+
+----------------------------------------------------
+
+[
+ ["punctuation", "["],
+ ["date", "2020-12-07"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "23:26:36"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "195"],
+ ["punctuation", "]"],
+ " App started",
+ ["punctuation", "."],
+ " version",
+ ["operator", "="],
+ ["string", "\"1.10.5\""],
+
+ ["punctuation", "["],
+ ["date", "2020-12-07"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "23:26:36"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "1030"],
+ ["punctuation", "]"],
+ " Searching for applications",
+ ["punctuation", "."],
+ " install_path",
+ ["operator", "="],
+ "AbsolutePath ",
+ ["operator", "{"],
+ " path_buf",
+ ["operator", ":"],
+ ["string", "\"C:\\\\Users\\\\micha\\\\AppData\\\\Local\\\\DiscordGames\""],
+ ["operator", "}"],
+
+ ["punctuation", "["],
+ ["date", "2020-12-07"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "23:26:36"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "WARN"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "1034"],
+ ["punctuation", "]"],
+ " Failed to read install path",
+ ["punctuation", "."],
+ " path",
+ ["operator", "="],
+ "AbsolutePath ",
+ ["operator", "{"],
+ " path_buf",
+ ["operator", ":"],
+ ["string", "\"C:\\\\Users\\\\micha\\\\AppData\\\\Local\\\\DiscordGames\""],
+ ["operator", "}"],
+ " error",
+ ["operator", "="],
+ "Os ",
+ ["operator", "{"],
+ " code",
+ ["operator", ":"],
+ ["number", "3"],
+ ["punctuation", ","],
+ " kind",
+ ["operator", ":"],
+ " NotFound",
+ ["punctuation", ","],
+ " message",
+ ["operator", ":"],
+ ["string", "\"Das System kann den angegebenen Pfad nicht finden.\""],
+ ["operator", "}"],
+
+ ["punctuation", "["],
+ ["date", "2020-12-09"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "17:25:53"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "195"],
+ ["punctuation", "]"],
+ " App started",
+ ["punctuation", "."],
+ " version",
+ ["operator", "="],
+ ["string", "\"1.10.5\""],
+
+ ["punctuation", "["],
+ ["date", "2020-12-09"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "17:25:53"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "1030"],
+ ["punctuation", "]"],
+ " Searching for applications",
+ ["punctuation", "."],
+ " install_path",
+ ["operator", "="],
+ "AbsolutePath ",
+ ["operator", "{"],
+ " path_buf",
+ ["operator", ":"],
+ ["string", "\"C:\\\\Users\\\\micha\\\\AppData\\\\Local\\\\DiscordGames\""],
+ ["operator", "}"],
+
+ ["punctuation", "["],
+ ["date", "2020-12-09"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "17:25:53"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "WARN"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "1034"],
+ ["punctuation", "]"],
+ " Failed to read install path",
+ ["punctuation", "."],
+ " path",
+ ["operator", "="],
+ "AbsolutePath ",
+ ["operator", "{"],
+ " path_buf",
+ ["operator", ":"],
+ ["string", "\"C:\\\\Users\\\\micha\\\\AppData\\\\Local\\\\DiscordGames\""],
+ ["operator", "}"],
+ " error",
+ ["operator", "="],
+ "Os ",
+ ["operator", "{"],
+ " code",
+ ["operator", ":"],
+ ["number", "3"],
+ ["punctuation", ","],
+ " kind",
+ ["operator", ":"],
+ " NotFound",
+ ["punctuation", ","],
+ " message",
+ ["operator", ":"],
+ ["string", "\"Das System kann den angegebenen Pfad nicht finden.\""],
+ ["operator", "}"],
+
+ ["punctuation", "["],
+ ["date", "2020-12-10"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "12:30:59"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "195"],
+ ["punctuation", "]"],
+ " App started",
+ ["punctuation", "."],
+ " version",
+ ["operator", "="],
+ ["string", "\"1.10.5\""],
+
+ ["punctuation", "["],
+ ["date", "2020-12-10"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "12:30:59"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "1030"],
+ ["punctuation", "]"],
+ " Searching for applications",
+ ["punctuation", "."],
+ " install_path",
+ ["operator", "="],
+ "AbsolutePath ",
+ ["operator", "{"],
+ " path_buf",
+ ["operator", ":"],
+ ["string", "\"C:\\\\Users\\\\micha\\\\AppData\\\\Local\\\\DiscordGames\""],
+ ["operator", "}"],
+
+ ["punctuation", "["],
+ ["date", "2020-12-10"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "12:30:59"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "WARN"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "1034"],
+ ["punctuation", "]"],
+ " Failed to read install path",
+ ["punctuation", "."],
+ " path",
+ ["operator", "="],
+ "AbsolutePath ",
+ ["operator", "{"],
+ " path_buf",
+ ["operator", ":"],
+ ["string", "\"C:\\\\Users\\\\micha\\\\AppData\\\\Local\\\\DiscordGames\""],
+ ["operator", "}"],
+ " error",
+ ["operator", "="],
+ "Os ",
+ ["operator", "{"],
+ " code",
+ ["operator", ":"],
+ ["number", "3"],
+ ["punctuation", ","],
+ " kind",
+ ["operator", ":"],
+ " NotFound",
+ ["punctuation", ","],
+ " message",
+ ["operator", ":"],
+ ["string", "\"Das System kann den angegebenen Pfad nicht finden.\""],
+ ["operator", "}"],
+
+ ["punctuation", "["],
+ ["date", "2020-12-10"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "21:42:22"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "195"],
+ ["punctuation", "]"],
+ " App started",
+ ["punctuation", "."],
+ " version",
+ ["operator", "="],
+ ["string", "\"1.10.5\""],
+
+ ["punctuation", "["],
+ ["date", "2020-12-10"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "21:42:22"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "1030"],
+ ["punctuation", "]"],
+ " Searching for applications",
+ ["punctuation", "."],
+ " install_path",
+ ["operator", "="],
+ "AbsolutePath ",
+ ["operator", "{"],
+ " path_buf",
+ ["operator", ":"],
+ ["string", "\"C:\\\\Users\\\\micha\\\\AppData\\\\Local\\\\DiscordGames\""],
+ ["operator", "}"],
+
+ ["punctuation", "["],
+ ["date", "2020-12-10"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "21:42:22"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "WARN"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "1034"],
+ ["punctuation", "]"],
+ " Failed to read install path",
+ ["punctuation", "."],
+ " path",
+ ["operator", "="],
+ "AbsolutePath ",
+ ["operator", "{"],
+ " path_buf",
+ ["operator", ":"],
+ ["string", "\"C:\\\\Users\\\\micha\\\\AppData\\\\Local\\\\DiscordGames\""],
+ ["operator", "}"],
+ " error",
+ ["operator", "="],
+ "Os ",
+ ["operator", "{"],
+ " code",
+ ["operator", ":"],
+ ["number", "3"],
+ ["punctuation", ","],
+ " kind",
+ ["operator", ":"],
+ " NotFound",
+ ["punctuation", ","],
+ " message",
+ ["operator", ":"],
+ ["string", "\"Das System kann den angegebenen Pfad nicht finden.\""],
+ ["operator", "}"],
+
+ ["punctuation", "["],
+ ["date", "2020-12-11"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["time", "13:05:13"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ ["level", "DEBUG"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "discord_dispatch",
+ ["operator", ":"],
+ ["operator", ":"],
+ "application_manager",
+ ["operator", ":"],
+ ["number", "195"],
+ ["punctuation", "]"],
+ " App started",
+ ["punctuation", "."],
+ " version",
+ ["operator", "="],
+ ["string", "\"1.10.5\""]
+]
\ No newline at end of file
diff --git a/tests/languages/log/_docker.test b/tests/languages/log/_docker.test
new file mode 100644
index 0000000000..ff5b5fd552
--- /dev/null
+++ b/tests/languages/log/_docker.test
@@ -0,0 +1,335 @@
+2021-01-12T13:38:16Z containerd time="2021-01-12T13:38:16.314696100Z" level=info msg="starting containerd" revision=269548fa27e0089a8b8278fc4fc781d7f65a939b version=v1.4.3
+2021-01-12T13:38:16Z containerd time="2021-01-12T13:38:16.314743500Z" level=debug msg="changing OOM score to -500"
+2021-01-12T13:38:16Z containerd time="2021-01-12T13:38:16.336716900Z" level=info msg="loading plugin \"io.containerd.content.v1.content\"..." type=io.containerd.content.v1
+2021-01-12T13:38:16Z containerd time="2021-01-12T13:38:16.336891100Z" level=info msg="loading plugin \"io.containerd.snapshotter.v1.aufs\"..." type=io.containerd.snapshotter.v1
+2021-01-12T13:38:16Z containerd time="2021-01-12T13:38:16.338482500Z" level=info msg="skip loading plugin \"io.containerd.snapshotter.v1.aufs\"..." error="aufs is not supported (modprobe aufs failed: exit status 1 \"modprobe: can't change directory to '4.19.128-microsoft-standard': No such file or directory\\n\"): skip plugin" type=io.containerd.snapshotter.v1
+2021-01-12T13:38:16Z containerd time="2021-01-12T13:38:16.338523700Z" level=info msg="loading plugin \"io.containerd.snapshotter.v1.btrfs\"..." type=io.containerd.snapshotter.v1
+2021-01-12T13:38:16Z containerd time="2021-01-12T13:38:16.338835400Z" level=info msg="skip loading plugin \"io.containerd.snapshotter.v1.btrfs\"..." error="path /var/lib/desktop-containerd/daemon/io.containerd.snapshotter.v1.btrfs (ext4) must be a btrfs filesystem to be used with the btrfs snapshotter: skip plugin" type=io.containerd.snapshotter.v1
+
+2021-03-05T17:58:29Z kmsg (977696) - 2021-03-05T17:58:28.2836488Z: init: (141) ERROR: StartHostListener:356: write failed 32
+2021-03-05T17:58:30Z kmsg (977697) - 2021-03-05T17:58:29.2863708Z: init: (141) ERROR: StartHostListener:356: write failed 32
+2021-03-05T17:58:31Z kmsg (977698) - 2021-03-05T17:58:30.2888998Z: init: (141) ERROR: StartHostListener:356: write failed 32
+2021-03-05T17:58:32Z kmsg (977699) - 2021-03-05T17:58:31.2917718Z: init: (141) ERROR: StartHostListener:356: write failed 32
+2021-03-05T17:58:33Z kmsg (977700) - 2021-03-05T17:58:32.2944488Z: init: (141) ERROR: StartHostListener:356: write failed 32
+2021-03-05T17:58:34Z kmsg (977701) - 2021-03-05T17:58:33.2979438Z: init: (141) ERROR: StartHostListener:356: write failed 32
+
+time="2021-01-12T14:38:11+01:00" level=info msg="🍀 socket server listening : \\\\.\\pipe\\dockerGuiToDriver"
+time="2021-01-12T14:38:13+01:00" level=info msg="NewSharer: WSL2 engine is enabled so no file sharer is required."
+time="2021-01-12T14:38:13+01:00" level=info msg=waitForDockerUp
+time="2021-01-12T14:38:13+01:00" level=info msg="🍀 socket server starting : \\\\.\\pipe\\dockerGuiToDriver"
+
+----------------------------------------------------
+
+[
+ ["date", "2021-01-12T"],
+ ["time", "13:38:16Z"],
+ " containerd time",
+ ["operator", "="],
+ ["string", "\"2021-01-12T13:38:16.314696100Z\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"starting containerd\""],
+ " revision",
+ ["operator", "="],
+ ["number", "269548fa27e0089a8b8278fc4fc781d7f65a939b"],
+ " version",
+ ["operator", "="],
+ ["number", "v1.4.3"],
+
+ ["date", "2021-01-12T"],
+ ["time", "13:38:16Z"],
+ " containerd time",
+ ["operator", "="],
+ ["string", "\"2021-01-12T13:38:16.314743500Z\""],
+ " level",
+ ["operator", "="],
+ "debug msg",
+ ["operator", "="],
+ ["string", "\"changing OOM score to -500\""],
+
+ ["date", "2021-01-12T"],
+ ["time", "13:38:16Z"],
+ " containerd time",
+ ["operator", "="],
+ ["string", "\"2021-01-12T13:38:16.336716900Z\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"loading plugin \\\"io.containerd.content.v1.content\\\"...\""],
+ " type",
+ ["operator", "="],
+ "io",
+ ["punctuation", "."],
+ "containerd",
+ ["punctuation", "."],
+ "content",
+ ["punctuation", "."],
+ "v1\r\n",
+
+ ["date", "2021-01-12T"],
+ ["time", "13:38:16Z"],
+ " containerd time",
+ ["operator", "="],
+ ["string", "\"2021-01-12T13:38:16.336891100Z\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"loading plugin \\\"io.containerd.snapshotter.v1.aufs\\\"...\""],
+ " type",
+ ["operator", "="],
+ "io",
+ ["punctuation", "."],
+ "containerd",
+ ["punctuation", "."],
+ "snapshotter",
+ ["punctuation", "."],
+ "v1\r\n",
+
+ ["date", "2021-01-12T"],
+ ["time", "13:38:16Z"],
+ " containerd time",
+ ["operator", "="],
+ ["string", "\"2021-01-12T13:38:16.338482500Z\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"skip loading plugin \\\"io.containerd.snapshotter.v1.aufs\\\"...\""],
+ " error",
+ ["operator", "="],
+ ["string", "\"aufs is not supported (modprobe aufs failed: exit status 1 \\\"modprobe: can't change directory to '4.19.128-microsoft-standard': No such file or directory\\\\n\\\"): skip plugin\""],
+ " type",
+ ["operator", "="],
+ "io",
+ ["punctuation", "."],
+ "containerd",
+ ["punctuation", "."],
+ "snapshotter",
+ ["punctuation", "."],
+ "v1\r\n",
+
+ ["date", "2021-01-12T"],
+ ["time", "13:38:16Z"],
+ " containerd time",
+ ["operator", "="],
+ ["string", "\"2021-01-12T13:38:16.338523700Z\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"loading plugin \\\"io.containerd.snapshotter.v1.btrfs\\\"...\""],
+ " type",
+ ["operator", "="],
+ "io",
+ ["punctuation", "."],
+ "containerd",
+ ["punctuation", "."],
+ "snapshotter",
+ ["punctuation", "."],
+ "v1\r\n",
+
+ ["date", "2021-01-12T"],
+ ["time", "13:38:16Z"],
+ " containerd time",
+ ["operator", "="],
+ ["string", "\"2021-01-12T13:38:16.338835400Z\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"skip loading plugin \\\"io.containerd.snapshotter.v1.btrfs\\\"...\""],
+ " error",
+ ["operator", "="],
+ ["string", "\"path /var/lib/desktop-containerd/daemon/io.containerd.snapshotter.v1.btrfs (ext4) must be a btrfs filesystem to be used with the btrfs snapshotter: skip plugin\""],
+ " type",
+ ["operator", "="],
+ "io",
+ ["punctuation", "."],
+ "containerd",
+ ["punctuation", "."],
+ "snapshotter",
+ ["punctuation", "."],
+ "v1\r\n\r\n",
+
+ ["date", "2021-03-05T"],
+ ["time", "17:58:29Z"],
+ " kmsg ",
+ ["operator", "("],
+ ["number", "977696"],
+ ["operator", ")"],
+ ["operator", "-"],
+ ["date", "2021-03-05T"],
+ ["time", "17:58:28.2836488Z"],
+ ["operator", ":"],
+ " init",
+ ["operator", ":"],
+ ["operator", "("],
+ ["number", "141"],
+ ["operator", ")"],
+ ["level", "ERROR"],
+ ["operator", ":"],
+ " StartHostListener",
+ ["operator", ":"],
+ ["number", "356"],
+ ["operator", ":"],
+ " write failed ",
+ ["number", "32"],
+
+ ["date", "2021-03-05T"],
+ ["time", "17:58:30Z"],
+ " kmsg ",
+ ["operator", "("],
+ ["number", "977697"],
+ ["operator", ")"],
+ ["operator", "-"],
+ ["date", "2021-03-05T"],
+ ["time", "17:58:29.2863708Z"],
+ ["operator", ":"],
+ " init",
+ ["operator", ":"],
+ ["operator", "("],
+ ["number", "141"],
+ ["operator", ")"],
+ ["level", "ERROR"],
+ ["operator", ":"],
+ " StartHostListener",
+ ["operator", ":"],
+ ["number", "356"],
+ ["operator", ":"],
+ " write failed ",
+ ["number", "32"],
+
+ ["date", "2021-03-05T"],
+ ["time", "17:58:31Z"],
+ " kmsg ",
+ ["operator", "("],
+ ["number", "977698"],
+ ["operator", ")"],
+ ["operator", "-"],
+ ["date", "2021-03-05T"],
+ ["time", "17:58:30.2888998Z"],
+ ["operator", ":"],
+ " init",
+ ["operator", ":"],
+ ["operator", "("],
+ ["number", "141"],
+ ["operator", ")"],
+ ["level", "ERROR"],
+ ["operator", ":"],
+ " StartHostListener",
+ ["operator", ":"],
+ ["number", "356"],
+ ["operator", ":"],
+ " write failed ",
+ ["number", "32"],
+
+ ["date", "2021-03-05T"],
+ ["time", "17:58:32Z"],
+ " kmsg ",
+ ["operator", "("],
+ ["number", "977699"],
+ ["operator", ")"],
+ ["operator", "-"],
+ ["date", "2021-03-05T"],
+ ["time", "17:58:31.2917718Z"],
+ ["operator", ":"],
+ " init",
+ ["operator", ":"],
+ ["operator", "("],
+ ["number", "141"],
+ ["operator", ")"],
+ ["level", "ERROR"],
+ ["operator", ":"],
+ " StartHostListener",
+ ["operator", ":"],
+ ["number", "356"],
+ ["operator", ":"],
+ " write failed ",
+ ["number", "32"],
+
+ ["date", "2021-03-05T"],
+ ["time", "17:58:33Z"],
+ " kmsg ",
+ ["operator", "("],
+ ["number", "977700"],
+ ["operator", ")"],
+ ["operator", "-"],
+ ["date", "2021-03-05T"],
+ ["time", "17:58:32.2944488Z"],
+ ["operator", ":"],
+ " init",
+ ["operator", ":"],
+ ["operator", "("],
+ ["number", "141"],
+ ["operator", ")"],
+ ["level", "ERROR"],
+ ["operator", ":"],
+ " StartHostListener",
+ ["operator", ":"],
+ ["number", "356"],
+ ["operator", ":"],
+ " write failed ",
+ ["number", "32"],
+
+ ["date", "2021-03-05T"],
+ ["time", "17:58:34Z"],
+ " kmsg ",
+ ["operator", "("],
+ ["number", "977701"],
+ ["operator", ")"],
+ ["operator", "-"],
+ ["date", "2021-03-05T"],
+ ["time", "17:58:33.2979438Z"],
+ ["operator", ":"],
+ " init",
+ ["operator", ":"],
+ ["operator", "("],
+ ["number", "141"],
+ ["operator", ")"],
+ ["level", "ERROR"],
+ ["operator", ":"],
+ " StartHostListener",
+ ["operator", ":"],
+ ["number", "356"],
+ ["operator", ":"],
+ " write failed ",
+ ["number", "32"],
+
+ "\r\n\r\ntime",
+ ["operator", "="],
+ ["string", "\"2021-01-12T14:38:11+01:00\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"🍀 socket server listening : \\\\\\\\.\\\\pipe\\\\dockerGuiToDriver\""],
+
+ "\r\ntime",
+ ["operator", "="],
+ ["string", "\"2021-01-12T14:38:13+01:00\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"NewSharer: WSL2 engine is enabled so no file sharer is required.\""],
+
+ "\r\ntime",
+ ["operator", "="],
+ ["string", "\"2021-01-12T14:38:13+01:00\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ "waitForDockerUp\r\ntime",
+ ["operator", "="],
+ ["string", "\"2021-01-12T14:38:13+01:00\""],
+ " level",
+ ["operator", "="],
+ "info msg",
+ ["operator", "="],
+ ["string", "\"🍀 socket server starting : \\\\\\\\.\\\\pipe\\\\dockerGuiToDriver\""]
+]
\ No newline at end of file
diff --git a/tests/languages/log/_java_stack_trace.test b/tests/languages/log/_java_stack_trace.test
new file mode 100644
index 0000000000..2b974a8b9b
--- /dev/null
+++ b/tests/languages/log/_java_stack_trace.test
@@ -0,0 +1,762 @@
+java.net.BindException: Address already in use
+ at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_171]
+ at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_171]
+ at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_171]
+ at sun.nio.ch.ServeISocketChannelImpl.bind(ServerSocketChannellmpl.java:223) ~[na:1.8.0_171]
+
+org.apache.maven.lifecycle.LifecycleExecutionException: Error installing artifact's metadata: Error while deploying metadata: Failed to transfer file: http://repo.xxxx.com/foo/bar.pom. Return code is: 500
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:564)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
+ at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:334)
+ at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:125)
+ at org.apache.maven.cli.MavenCli.main(MavenCli.java:280)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+ at java.lang.reflect.Method.invoke(Method.java:585)
+ at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
+ at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
+ at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
+ at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
+Caused by: org.apache.maven.plugin.MojoExecutionException: Error installing artifact's metadata: Error while deploying metadata: Failed to transfer file: http://repo.xxxx.com/foo/bar.pom. Return code is: 500
+ at org.apache.maven.plugin.deploy.DeployMojo.execute(DeployMojo.java:174)
+ at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:443)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
+ ... 16 more
+Caused by: org.apache.maven.artifact.deployer.ArtifactDeploymentException: Error installing artifact's metadata: Error while deploying metadata: Failed to transfer file: http://repo.xxxx.com/foo/bar.pom. Return code is: 500
+ at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:102)
+ at org.apache.maven.plugin.deploy.DeployMojo.execute(DeployMojo.java:162)
+ ... 18 more
+Caused by: org.apache.maven.artifact.repository.metadata.RepositoryMetadataDeploymentException: Error while deploying metadata: Failed to transfer file: http://repo.xxxx.com/foo/bar.pom. Return code is: 500
+ at org.apache.maven.artifact.repository.metadata.DefaultRepositoryMetadataManager.deploy(DefaultRepositoryMetadataManager.java:441)
+ at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:86)
+ ... 19 more
+Caused by: org.apache.maven.wagon.TransferFailedException: Failed to transfer file: http://repo.xxxx.com/foo/bar.pom. Return code is: 500
+ at org.apache.maven.wagon.providers.http.LightweightHttpWagon.put(LightweightHttpWagon.java:172)
+ at org.apache.maven.artifact.manager.DefaultWagonManager.putRemoteFile(DefaultWagonManager.java:237)
+ at org.apache.maven.artifact.manager.DefaultWagonManager.putArtifactMetadata(DefaultWagonManager.java:162)
+ at org.apache.maven.artifact.repository.metadata.DefaultRepositoryMetadataManager.deploy(DefaultRepositoryMetadataManager.java:437)
+ ... 20 more
+
+----------------------------------------------------
+
+[
+ ["property", "java.net.BindException:"],
+ " Address already in use\r\n\tat sun",
+ ["punctuation", "."],
+ "nio",
+ ["punctuation", "."],
+ "ch",
+ ["punctuation", "."],
+ "Net",
+ ["punctuation", "."],
+ "bind0",
+ ["operator", "("],
+ "Native Method",
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "na",
+ ["operator", ":"],
+ "1",
+ ["punctuation", "."],
+ "8",
+ ["punctuation", "."],
+ "0_171",
+ ["punctuation", "]"],
+
+ "\r\n\tat sun",
+ ["punctuation", "."],
+ "nio",
+ ["punctuation", "."],
+ "ch",
+ ["punctuation", "."],
+ "Net",
+ ["punctuation", "."],
+ "bind",
+ ["operator", "("],
+ "Net",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "433"],
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "na",
+ ["operator", ":"],
+ "1",
+ ["punctuation", "."],
+ "8",
+ ["punctuation", "."],
+ "0_171",
+ ["punctuation", "]"],
+
+ "\r\n\tat sun",
+ ["punctuation", "."],
+ "nio",
+ ["punctuation", "."],
+ "ch",
+ ["punctuation", "."],
+ "Net",
+ ["punctuation", "."],
+ "bind",
+ ["operator", "("],
+ "Net",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "425"],
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "na",
+ ["operator", ":"],
+ "1",
+ ["punctuation", "."],
+ "8",
+ ["punctuation", "."],
+ "0_171",
+ ["punctuation", "]"],
+
+ "\r\n\tat sun",
+ ["punctuation", "."],
+ "nio",
+ ["punctuation", "."],
+ "ch",
+ ["punctuation", "."],
+ "ServeISocketChannelImpl",
+ ["punctuation", "."],
+ "bind",
+ ["operator", "("],
+ "ServerSocketChannellmpl",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "223"],
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "na",
+ ["operator", ":"],
+ "1",
+ ["punctuation", "."],
+ "8",
+ ["punctuation", "."],
+ "0_171",
+ ["punctuation", "]"],
+
+ ["property", "org.apache.maven.lifecycle.LifecycleExecutionException:"],
+ " Error installing artifact's metadata",
+ ["operator", ":"],
+ " Error while deploying metadata",
+ ["operator", ":"],
+ " Failed to transfer file",
+ ["operator", ":"],
+ ["url", "http://repo.xxxx.com/foo/bar.pom"],
+ ["punctuation", "."],
+ " Return code is",
+ ["operator", ":"],
+ ["number", "500"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "lifecycle",
+ ["punctuation", "."],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "executeGoals",
+ ["operator", "("],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "564"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "lifecycle",
+ ["punctuation", "."],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "executeGoalWithLifecycle",
+ ["operator", "("],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "480"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "lifecycle",
+ ["punctuation", "."],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "executeGoal",
+ ["operator", "("],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "459"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "lifecycle",
+ ["punctuation", "."],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "executeGoalAndHandleFailures",
+ ["operator", "("],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "311"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "lifecycle",
+ ["punctuation", "."],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "executeTaskSegments",
+ ["operator", "("],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "278"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "lifecycle",
+ ["punctuation", "."],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "execute",
+ ["operator", "("],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "143"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "DefaultMaven",
+ ["punctuation", "."],
+ "doExecute",
+ ["operator", "("],
+ "DefaultMaven",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "334"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "DefaultMaven",
+ ["punctuation", "."],
+ "execute",
+ ["operator", "("],
+ "DefaultMaven",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "125"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "cli",
+ ["punctuation", "."],
+ "MavenCli",
+ ["punctuation", "."],
+ "main",
+ ["operator", "("],
+ "MavenCli",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "280"],
+ ["operator", ")"],
+
+ "\r\n at sun",
+ ["punctuation", "."],
+ "reflect",
+ ["punctuation", "."],
+ "NativeMethodAccessorImpl",
+ ["punctuation", "."],
+ "invoke0",
+ ["operator", "("],
+ "Native Method",
+ ["operator", ")"],
+
+ "\r\n at sun",
+ ["punctuation", "."],
+ "reflect",
+ ["punctuation", "."],
+ "NativeMethodAccessorImpl",
+ ["punctuation", "."],
+ "invoke",
+ ["operator", "("],
+ "NativeMethodAccessorImpl",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "39"],
+ ["operator", ")"],
+
+ "\r\n at sun",
+ ["punctuation", "."],
+ "reflect",
+ ["punctuation", "."],
+ "DelegatingMethodAccessorImpl",
+ ["punctuation", "."],
+ "invoke",
+ ["operator", "("],
+ "DelegatingMethodAccessorImpl",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "25"],
+ ["operator", ")"],
+
+ "\r\n at java",
+ ["punctuation", "."],
+ "lang",
+ ["punctuation", "."],
+ "reflect",
+ ["punctuation", "."],
+ "Method",
+ ["punctuation", "."],
+ "invoke",
+ ["operator", "("],
+ "Method",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "585"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "codehaus",
+ ["punctuation", "."],
+ "classworlds",
+ ["punctuation", "."],
+ "Launcher",
+ ["punctuation", "."],
+ "launchEnhanced",
+ ["operator", "("],
+ "Launcher",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "315"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "codehaus",
+ ["punctuation", "."],
+ "classworlds",
+ ["punctuation", "."],
+ "Launcher",
+ ["punctuation", "."],
+ "launch",
+ ["operator", "("],
+ "Launcher",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "255"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "codehaus",
+ ["punctuation", "."],
+ "classworlds",
+ ["punctuation", "."],
+ "Launcher",
+ ["punctuation", "."],
+ "mainWithExitCode",
+ ["operator", "("],
+ "Launcher",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "430"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "codehaus",
+ ["punctuation", "."],
+ "classworlds",
+ ["punctuation", "."],
+ "Launcher",
+ ["punctuation", "."],
+ "main",
+ ["operator", "("],
+ "Launcher",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "375"],
+ ["operator", ")"],
+
+ ["property", "Caused by:"],
+ ["property", "org.apache.maven.plugin.MojoExecutionException:"],
+ " Error installing artifact's metadata",
+ ["operator", ":"],
+ " Error while deploying metadata",
+ ["operator", ":"],
+ " Failed to transfer file",
+ ["operator", ":"],
+ ["url", "http://repo.xxxx.com/foo/bar.pom"],
+ ["punctuation", "."],
+ " Return code is",
+ ["operator", ":"],
+ ["number", "500"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "plugin",
+ ["punctuation", "."],
+ "deploy",
+ ["punctuation", "."],
+ "DeployMojo",
+ ["punctuation", "."],
+ "execute",
+ ["operator", "("],
+ "DeployMojo",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "174"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "plugin",
+ ["punctuation", "."],
+ "DefaultPluginManager",
+ ["punctuation", "."],
+ "executeMojo",
+ ["operator", "("],
+ "DefaultPluginManager",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "443"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "lifecycle",
+ ["punctuation", "."],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "executeGoals",
+ ["operator", "("],
+ "DefaultLifecycleExecutor",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "539"],
+ ["operator", ")"],
+
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["number", "16"],
+ " more\r\n",
+
+ ["property", "Caused by:"],
+ ["property", "org.apache.maven.artifact.deployer.ArtifactDeploymentException:"],
+ " Error installing artifact's metadata",
+ ["operator", ":"],
+ " Error while deploying metadata",
+ ["operator", ":"],
+ " Failed to transfer file",
+ ["operator", ":"],
+ ["url", "http://repo.xxxx.com/foo/bar.pom"],
+ ["punctuation", "."],
+ " Return code is",
+ ["operator", ":"],
+ ["number", "500"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "artifact",
+ ["punctuation", "."],
+ "deployer",
+ ["punctuation", "."],
+ "DefaultArtifactDeployer",
+ ["punctuation", "."],
+ "deploy",
+ ["operator", "("],
+ "DefaultArtifactDeployer",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "102"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "plugin",
+ ["punctuation", "."],
+ "deploy",
+ ["punctuation", "."],
+ "DeployMojo",
+ ["punctuation", "."],
+ "execute",
+ ["operator", "("],
+ "DeployMojo",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "162"],
+ ["operator", ")"],
+
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["number", "18"],
+ " more\r\n",
+
+ ["property", "Caused by:"],
+ ["property", "org.apache.maven.artifact.repository.metadata.RepositoryMetadataDeploymentException:"],
+ ["property", "Error while deploying metadata:"],
+ ["property", "Failed to transfer file:"],
+ ["url", "http://repo.xxxx.com/foo/bar.pom"],
+ ["punctuation", "."],
+ " Return code is",
+ ["operator", ":"],
+ ["number", "500"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "artifact",
+ ["punctuation", "."],
+ "repository",
+ ["punctuation", "."],
+ "metadata",
+ ["punctuation", "."],
+ "DefaultRepositoryMetadataManager",
+ ["punctuation", "."],
+ "deploy",
+ ["operator", "("],
+ "DefaultRepositoryMetadataManager",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "441"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "artifact",
+ ["punctuation", "."],
+ "deployer",
+ ["punctuation", "."],
+ "DefaultArtifactDeployer",
+ ["punctuation", "."],
+ "deploy",
+ ["operator", "("],
+ "DefaultArtifactDeployer",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "86"],
+ ["operator", ")"],
+
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["number", "19"],
+ " more\r\n",
+
+ ["property", "Caused by:"],
+ ["property", "org.apache.maven.wagon.TransferFailedException:"],
+ ["property", "Failed to transfer file:"],
+ ["url", "http://repo.xxxx.com/foo/bar.pom"],
+ ["punctuation", "."],
+ " Return code is",
+ ["operator", ":"],
+ ["number", "500"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "wagon",
+ ["punctuation", "."],
+ "providers",
+ ["punctuation", "."],
+ "http",
+ ["punctuation", "."],
+ "LightweightHttpWagon",
+ ["punctuation", "."],
+ "put",
+ ["operator", "("],
+ "LightweightHttpWagon",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "172"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "artifact",
+ ["punctuation", "."],
+ "manager",
+ ["punctuation", "."],
+ "DefaultWagonManager",
+ ["punctuation", "."],
+ "putRemoteFile",
+ ["operator", "("],
+ "DefaultWagonManager",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "237"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "artifact",
+ ["punctuation", "."],
+ "manager",
+ ["punctuation", "."],
+ "DefaultWagonManager",
+ ["punctuation", "."],
+ "putArtifactMetadata",
+ ["operator", "("],
+ "DefaultWagonManager",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "162"],
+ ["operator", ")"],
+
+ "\r\n at org",
+ ["punctuation", "."],
+ "apache",
+ ["punctuation", "."],
+ "maven",
+ ["punctuation", "."],
+ "artifact",
+ ["punctuation", "."],
+ "repository",
+ ["punctuation", "."],
+ "metadata",
+ ["punctuation", "."],
+ "DefaultRepositoryMetadataManager",
+ ["punctuation", "."],
+ "deploy",
+ ["operator", "("],
+ "DefaultRepositoryMetadataManager",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "437"],
+ ["operator", ")"],
+
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["number", "20"],
+ " more"
+]
\ No newline at end of file
diff --git a/tests/languages/log/_minecraft.test b/tests/languages/log/_minecraft.test
new file mode 100644
index 0000000000..9c388d5508
--- /dev/null
+++ b/tests/languages/log/_minecraft.test
@@ -0,0 +1,419 @@
+[07:28:17] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Starting minecraft server version 1.12.2
+[07:28:17] [Server thread/INFO] [FML]: MinecraftForge v14.23.5.2847 Initialized
+[07:28:17] [Server thread/INFO] [FML]: Starts to replace vanilla recipe ingredients with ore ingredients.
+[07:28:18] [Server thread/INFO] [FML]: Invalid recipe found with multiple oredict ingredients in the same ingredient...
+[07:28:19] [Server thread/INFO] [FML]: Replaced 1227 ore ingredients
+[07:28:19] [Server thread/INFO] [FML]: Searching /home/minecraft/multicraft/servers/server99505/./mods for mods
+[07:28:21] [Server thread/INFO] [FML]: Forge Mod Loader has identified 5 mods to load
+[07:28:21] [Server thread/WARN] [FML]: Missing English translation for FML: assets/fml/lang/en_us.lang
+[07:28:21] [Server thread/FATAL] [FML]: net.minecraftforge.fml.common.MissingModsException: Mod thaumcraft (Thaumcraft) requires [baubles@[1.5.2,)]
+[07:28:21] [Server thread/ERROR] [net.minecraft.server.MinecraftServer]: Encountered an unexpected exception
+net.minecraftforge.fml.common.MissingModsException: Mod thaumcraft (Thaumcraft) requires [baubles@[1.5.2,)]
+ at net.minecraftforge.fml.common.Loader.sortModList(Loader.java:266) ~[Loader.class:?]
+ at net.minecraftforge.fml.common.Loader.loadMods(Loader.java:572) ~[Loader.class:?]
+ at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98) ~[FMLServerHandler.class:?]
+ at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333) ~[FMLCommonHandler.class:?]
+ at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125) ~[nz.class:?]
+ at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486) [MinecraftServer.class:?]
+ at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]
+
+----------------------------------------------------
+
+[
+ ["punctuation", "["],
+ ["time", "07:28:17"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "INFO"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "net",
+ ["punctuation", "."],
+ "minecraft",
+ ["punctuation", "."],
+ "server",
+ ["punctuation", "."],
+ "dedicated",
+ ["punctuation", "."],
+ "DedicatedServer",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " Starting minecraft server version ",
+ ["number", "1.12.2"],
+
+ ["punctuation", "["],
+ ["time", "07:28:17"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "INFO"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "FML",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " MinecraftForge ",
+ ["number", "v14.23.5.2847"],
+ " Initialized\r\n",
+
+ ["punctuation", "["],
+ ["time", "07:28:17"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "INFO"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "FML",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " Starts to replace vanilla recipe ingredients with ore ingredients",
+ ["punctuation", "."],
+
+ ["punctuation", "["],
+ ["time", "07:28:18"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "INFO"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "FML",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " Invalid recipe found with multiple oredict ingredients in the same ingredient",
+ ["punctuation", "."],
+ ["punctuation", "."],
+ ["punctuation", "."],
+
+ ["punctuation", "["],
+ ["time", "07:28:19"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "INFO"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "FML",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " Replaced ",
+ ["number", "1227"],
+ " ore ingredients\r\n",
+
+ ["punctuation", "["],
+ ["time", "07:28:19"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "INFO"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "FML",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " Searching ",
+ ["file-path", "/home/minecraft/multicraft/servers/server99505/./mods"],
+ " for mods\r\n",
+
+ ["punctuation", "["],
+ ["time", "07:28:21"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "INFO"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "FML",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " Forge Mod Loader has identified ",
+ ["number", "5"],
+ " mods to load\r\n",
+
+ ["punctuation", "["],
+ ["time", "07:28:21"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "WARN"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "FML",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " Missing English translation for FML",
+ ["operator", ":"],
+ " assets",
+ ["operator", "/"],
+ "fml",
+ ["operator", "/"],
+ "lang",
+ ["operator", "/"],
+ "en_us",
+ ["punctuation", "."],
+ "lang\r\n",
+
+ ["punctuation", "["],
+ ["time", "07:28:21"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "FATAL"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "FML",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " net",
+ ["punctuation", "."],
+ "minecraftforge",
+ ["punctuation", "."],
+ "fml",
+ ["punctuation", "."],
+ "common",
+ ["punctuation", "."],
+ "MissingModsException",
+ ["operator", ":"],
+ " Mod thaumcraft ",
+ ["operator", "("],
+ "Thaumcraft",
+ ["operator", ")"],
+ " requires ",
+ ["punctuation", "["],
+ "baubles",
+ ["operator", "@"],
+ ["punctuation", "["],
+ ["number", "1.5.2"],
+ ["punctuation", ","],
+ ["operator", ")"],
+ ["punctuation", "]"],
+
+ ["punctuation", "["],
+ ["time", "07:28:21"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "Server thread",
+ ["operator", "/"],
+ ["level", "ERROR"],
+ ["punctuation", "]"],
+ ["punctuation", "["],
+ "net",
+ ["punctuation", "."],
+ "minecraft",
+ ["punctuation", "."],
+ "server",
+ ["punctuation", "."],
+ "MinecraftServer",
+ ["punctuation", "]"],
+ ["operator", ":"],
+ " Encountered an unexpected exception\r\n",
+
+ ["property", "net.minecraftforge.fml.common.MissingModsException:"],
+ " Mod thaumcraft ",
+ ["operator", "("],
+ "Thaumcraft",
+ ["operator", ")"],
+ " requires ",
+ ["punctuation", "["],
+ "baubles",
+ ["operator", "@"],
+ ["punctuation", "["],
+ ["number", "1.5.2"],
+ ["punctuation", ","],
+ ["operator", ")"],
+ ["punctuation", "]"],
+
+ "\r\n\tat net",
+ ["punctuation", "."],
+ "minecraftforge",
+ ["punctuation", "."],
+ "fml",
+ ["punctuation", "."],
+ "common",
+ ["punctuation", "."],
+ "Loader",
+ ["punctuation", "."],
+ "sortModList",
+ ["operator", "("],
+ "Loader",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "266"],
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "Loader",
+ ["punctuation", "."],
+ "class",
+ ["operator", ":"],
+ ["operator", "?"],
+ ["punctuation", "]"],
+
+ "\r\n\tat net",
+ ["punctuation", "."],
+ "minecraftforge",
+ ["punctuation", "."],
+ "fml",
+ ["punctuation", "."],
+ "common",
+ ["punctuation", "."],
+ "Loader",
+ ["punctuation", "."],
+ "loadMods",
+ ["operator", "("],
+ "Loader",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "572"],
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "Loader",
+ ["punctuation", "."],
+ "class",
+ ["operator", ":"],
+ ["operator", "?"],
+ ["punctuation", "]"],
+
+ "\r\n\tat net",
+ ["punctuation", "."],
+ "minecraftforge",
+ ["punctuation", "."],
+ "fml",
+ ["punctuation", "."],
+ "server",
+ ["punctuation", "."],
+ "FMLServerHandler",
+ ["punctuation", "."],
+ "beginServerLoading",
+ ["operator", "("],
+ "FMLServerHandler",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "98"],
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "FMLServerHandler",
+ ["punctuation", "."],
+ "class",
+ ["operator", ":"],
+ ["operator", "?"],
+ ["punctuation", "]"],
+
+ "\r\n\tat net",
+ ["punctuation", "."],
+ "minecraftforge",
+ ["punctuation", "."],
+ "fml",
+ ["punctuation", "."],
+ "common",
+ ["punctuation", "."],
+ "FMLCommonHandler",
+ ["punctuation", "."],
+ "onServerStart",
+ ["operator", "("],
+ "FMLCommonHandler",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "333"],
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "FMLCommonHandler",
+ ["punctuation", "."],
+ "class",
+ ["operator", ":"],
+ ["operator", "?"],
+ ["punctuation", "]"],
+
+ "\r\n\tat net",
+ ["punctuation", "."],
+ "minecraft",
+ ["punctuation", "."],
+ "server",
+ ["punctuation", "."],
+ "dedicated",
+ ["punctuation", "."],
+ "DedicatedServer",
+ ["punctuation", "."],
+ "func_71197_b",
+ ["operator", "("],
+ "DedicatedServer",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "125"],
+ ["operator", ")"],
+ ["operator", "~"],
+ ["punctuation", "["],
+ "nz",
+ ["punctuation", "."],
+ "class",
+ ["operator", ":"],
+ ["operator", "?"],
+ ["punctuation", "]"],
+
+ "\r\n\tat net",
+ ["punctuation", "."],
+ "minecraft",
+ ["punctuation", "."],
+ "server",
+ ["punctuation", "."],
+ "MinecraftServer",
+ ["punctuation", "."],
+ "run",
+ ["operator", "("],
+ "MinecraftServer",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "486"],
+ ["operator", ")"],
+ ["punctuation", "["],
+ "MinecraftServer",
+ ["punctuation", "."],
+ "class",
+ ["operator", ":"],
+ ["operator", "?"],
+ ["punctuation", "]"],
+
+ "\r\n\tat java",
+ ["punctuation", "."],
+ "lang",
+ ["punctuation", "."],
+ "Thread",
+ ["punctuation", "."],
+ "run",
+ ["operator", "("],
+ "Thread",
+ ["punctuation", "."],
+ "java",
+ ["operator", ":"],
+ ["number", "748"],
+ ["operator", ")"],
+ ["punctuation", "["],
+ ["operator", "?"],
+ ["operator", ":"],
+ "1",
+ ["punctuation", "."],
+ "8",
+ ["punctuation", "."],
+ "0_222",
+ ["punctuation", "]"]
+]
\ No newline at end of file
diff --git a/tests/languages/log/_nginx.test b/tests/languages/log/_nginx.test
new file mode 100644
index 0000000000..a013ecb971
--- /dev/null
+++ b/tests/languages/log/_nginx.test
@@ -0,0 +1,141 @@
+47.29.201.179 - - [28/Feb/2019:13:17:10 +0000] "GET /?p=1 HTTP/2.0" 200 5316 "https://domain1.com/?p=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "2.75"
+
+Mar 19 22:10:18 xxxxxx journal: xxxxxxx.mylabserver.com nginx: photos.example.com 127.0.0.1 - - [19/Mar/2018:22:10:18 +0000] "GET / HTTP/1.1" 200 1863 "-" "curl/7.29.0" "-"
+Mar 19 22:10:24 xxxxxxx journal: xxxxxxxx.mylabserver.com nginx: photos.example.com 127.0.0.1 - - [19/Mar/2018:22:10:24 +0000] "GET / HTTP/1.1" 200 53324 "-" "curl/7.29.0" "-"
+
+TLSv1.2 AES128-SHA 1.1.1.1 "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
+TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 2.2.2.2 "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
+TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0"
+TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 4.4.4.4 "Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0"
+TLSv1 AES128-SHA 5.5.5.5 "Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0"
+TLSv1.2 ECDHE-RSA-CHACHA20-POLY1305 6.6.6.6 "Mozilla/5.0 (Linux; U; Android 5.0.2; en-US; XT1068 Build/LXB22.46-28) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.10.2.1164 Mobile Safari/537.36"
+
+----------------------------------------------------
+
+[
+ ["ip-address", "47.29.201.179"],
+ ["separator", "- - "],
+ ["punctuation", "["],
+ ["date", "28/Feb/2019"],
+ ["operator", ":"],
+ ["time", "13:17:10 +0000"],
+ ["punctuation", "]"],
+ ["string", "\"GET /?p=1 HTTP/2.0\""],
+ ["number", "200"],
+ ["number", "5316"],
+ ["string", "\"https://domain1.com/?p=1\""],
+ ["string", "\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36\""],
+ ["string", "\"2.75\""],
+
+ ["date", "Mar 19"],
+ ["time", "22:10:18"],
+ " xxxxxx journal",
+ ["operator", ":"],
+ ["domain", "xxxxxxx.mylabserver.com"],
+ " nginx",
+ ["operator", ":"],
+ ["domain", "photos.example.com"],
+ ["ip-address", "127.0.0.1"],
+ ["separator", "- - "],
+ ["punctuation", "["],
+ ["date", "19/Mar/2018"],
+ ["operator", ":"],
+ ["time", "22:10:18 +0000"],
+ ["punctuation", "]"],
+ ["string", "\"GET / HTTP/1.1\""],
+ ["number", "200"],
+ ["number", "1863"],
+ ["string", "\"-\""],
+ ["string", "\"curl/7.29.0\""],
+ ["string", "\"-\""],
+
+ ["date", "Mar 19"],
+ ["time", "22:10:24"],
+ " xxxxxxx journal",
+ ["operator", ":"],
+ ["domain", "xxxxxxxx.mylabserver.com"],
+ " nginx",
+ ["operator", ":"],
+ ["domain", "photos.example.com"],
+ ["ip-address", "127.0.0.1"],
+ ["separator", "- - "],
+ ["punctuation", "["],
+ ["date", "19/Mar/2018"],
+ ["operator", ":"],
+ ["time", "22:10:24 +0000"],
+ ["punctuation", "]"],
+ ["string", "\"GET / HTTP/1.1\""],
+ ["number", "200"],
+ ["number", "53324"],
+ ["string", "\"-\""],
+ ["string", "\"curl/7.29.0\""],
+ ["string", "\"-\""],
+
+ "\r\n\r\nTLSv1",
+ ["punctuation", "."],
+ "2 AES128",
+ ["operator", "-"],
+ "SHA ",
+ ["ip-address", "1.1.1.1"],
+ ["string", "\"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0\""],
+
+ "\r\nTLSv1",
+ ["punctuation", "."],
+ "2 ECDHE",
+ ["operator", "-"],
+ "RSA",
+ ["operator", "-"],
+ "AES128",
+ ["operator", "-"],
+ "GCM",
+ ["operator", "-"],
+ "SHA256 ",
+ ["ip-address", "2.2.2.2"],
+ ["string", "\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\""],
+
+ "\r\nTLSv1",
+ ["punctuation", "."],
+ "2 ECDHE",
+ ["operator", "-"],
+ "RSA",
+ ["operator", "-"],
+ "AES128",
+ ["operator", "-"],
+ "GCM",
+ ["operator", "-"],
+ "SHA256 ",
+ ["ip-address", "3.3.3.3"],
+ ["string", "\"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0\""],
+
+ "\r\nTLSv1",
+ ["punctuation", "."],
+ "2 ECDHE",
+ ["operator", "-"],
+ "RSA",
+ ["operator", "-"],
+ "AES128",
+ ["operator", "-"],
+ "GCM",
+ ["operator", "-"],
+ "SHA256 ",
+ ["ip-address", "4.4.4.4"],
+ ["string", "\"Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0\""],
+
+ "\r\nTLSv1 AES128",
+ ["operator", "-"],
+ "SHA ",
+ ["ip-address", "5.5.5.5"],
+ ["string", "\"Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0\""],
+
+ "\r\nTLSv1",
+ ["punctuation", "."],
+ "2 ECDHE",
+ ["operator", "-"],
+ "RSA",
+ ["operator", "-"],
+ "CHACHA20",
+ ["operator", "-"],
+ "POLY1305 ",
+ ["ip-address", "6.6.6.6"],
+ ["string", "\"Mozilla/5.0 (Linux; U; Android 5.0.2; en-US; XT1068 Build/LXB22.46-28) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.10.2.1164 Mobile Safari/537.36\""]
+]
\ No newline at end of file
diff --git a/tests/languages/log/_npm_console.test b/tests/languages/log/_npm_console.test
new file mode 100644
index 0000000000..643cc4afd9
--- /dev/null
+++ b/tests/languages/log/_npm_console.test
@@ -0,0 +1,83 @@
+npm ERR! code E404
+npm ERR! 404 Not Found - GET https://registry.npmjs.org/asdasvsdffafwedsfvfasdfkigpodkfphd - Not found
+npm ERR! 404
+npm ERR! 404 'asdasvsdffafwedsfvfasdfkigpodkfphd@latest' is not in the npm registry.
+npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
+npm ERR! 404
+npm ERR! 404 Note that you can also install from a
+npm ERR! 404 tarball, folder, http url, or git url.
+
+npm ERR! A complete log of this run can be found in:
+npm ERR! C:\Users\micha\AppData\Roaming\npm-cache\_logs\2021-03-08T19_15_44_229Z-debug.log
+
+----------------------------------------------------
+
+[
+ "npm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ " code E404\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ ["number", "404"],
+ " Not Found ",
+ ["operator", "-"],
+ " GET ",
+ ["url", "https://registry.npmjs.org/asdasvsdffafwedsfvfasdfkigpodkfphd"],
+ ["operator", "-"],
+ " Not found\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ ["number", "404"],
+
+ "\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ ["number", "404"],
+ ["string", "'asdasvsdffafwedsfvfasdfkigpodkfphd@latest'"],
+ " is not in the npm registry",
+ ["punctuation", "."],
+
+ "\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ ["number", "404"],
+ " You should bug the author to publish it ",
+ ["operator", "("],
+ "or use the name yourself",
+ ["operator", "!"],
+ ["operator", ")"],
+
+ "\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ ["number", "404"],
+
+ "\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ ["number", "404"],
+ " Note that you can also install from a\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ ["number", "404"],
+ " tarball",
+ ["punctuation", ","],
+ " folder",
+ ["punctuation", ","],
+ " http url",
+ ["punctuation", ","],
+ " or git url",
+ ["punctuation", "."],
+
+ "\r\n\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ " A complete log of this run can be found in",
+ ["operator", ":"],
+
+ "\r\nnpm ",
+ ["level", "ERR"],
+ ["operator", "!"],
+ ["file-path", "C:\\Users\\micha\\AppData\\Roaming\\npm-cache\\_logs\\2021-03-08T19_15_44_229Z-debug.log"]
+]
\ No newline at end of file
diff --git a/tests/languages/log/_npm_log.test b/tests/languages/log/_npm_log.test
new file mode 100644
index 0000000000..da8be10bec
--- /dev/null
+++ b/tests/languages/log/_npm_log.test
@@ -0,0 +1,401 @@
+0 info it worked if it ends with ok
+1 verbose cli [
+1 verbose cli 'C:\\Program Files\\nodejs\\node.exe',
+1 verbose cli 'C:\\Users\\micha\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js',
+1 verbose cli 'run',
+1 verbose cli 'test:aliases'
+1 verbose cli ]
+2 info using npm@6.14.10
+3 info using node@v14.15.4
+4 verbose run-script [ 'pretest:aliases', 'test:aliases', 'posttest:aliases' ]
+5 info lifecycle prismjs@1.23.0~pretest:aliases: prismjs@1.23.0
+6 info lifecycle prismjs@1.23.0~test:aliases: prismjs@1.23.0
+7 verbose lifecycle prismjs@1.23.0~test:aliases: unsafe-perm in lifecycle true
+8 verbose lifecycle prismjs@1.23.0~test:aliases: PATH: ...
+9 verbose lifecycle prismjs@1.23.0~test:aliases: CWD: C:\Users\micha\Git\prism
+10 silly lifecycle prismjs@1.23.0~test:aliases: Args: [ '/d /s /c', 'mocha tests/aliases-test.js' ]
+11 silly lifecycle prismjs@1.23.0~test:aliases: Returned: code: 1 signal: null
+12 info lifecycle prismjs@1.23.0~test:aliases: Failed to exec test:aliases script
+13 verbose stack Error: prismjs@1.23.0 test:aliases: `mocha tests/aliases-test.js`
+13 verbose stack Exit status 1
+13 verbose stack at EventEmitter.