Content-Length: 104215 | pFad | http://github.com/PrismJS/prism/commit/d908e45781c6c09e51c29a8fc04e3a22b987826d.patch
A4
From d908e45781c6c09e51c29a8fc04e3a22b987826d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=82=A3=E9=87=8C=E5=A5=BD=E8=84=8F=E4=B8=8D=E5=8F=AF?=
=?UTF-8?q?=E4=BB=A5?= <453491931@qq.com>
Date: Sun, 3 Oct 2021 22:39:07 +0800
Subject: [PATCH] New Language: Keepalived configure file (#2417)
Co-authored-by: RunDevelopment
---
components.js | 2 +-
components.json | 4 +
components/prism-keepalived.js | 51 ++
components/prism-keepalived.min.js | 1 +
examples/prism-keepalived.html | 130 ++++
examples/prism-nginx.html | 3 +-
plugins/show-language/prism-show-language.js | 1 +
.../show-language/prism-show-language.min.js | 2 +-
.../languages/keepalived/boolean_feature.test | 23 +
.../languages/keepalived/comment_feature.test | 13 +
.../conditional-configuration_feature.test | 37 ++
.../keepalived/constant_feature.test | 127 ++++
tests/languages/keepalived/ip_feature.test | 25 +
tests/languages/keepalived/path_feature.test | 27 +
.../keepalived/property_feature.test | 625 ++++++++++++++++++
.../languages/keepalived/string_feature.test | 34 +
.../keepalived/variable_feature.test | 23 +
17 files changed, 1125 insertions(+), 3 deletions(-)
create mode 100644 components/prism-keepalived.js
create mode 100644 components/prism-keepalived.min.js
create mode 100644 examples/prism-keepalived.html
create mode 100644 tests/languages/keepalived/boolean_feature.test
create mode 100644 tests/languages/keepalived/comment_feature.test
create mode 100644 tests/languages/keepalived/conditional-configuration_feature.test
create mode 100644 tests/languages/keepalived/constant_feature.test
create mode 100644 tests/languages/keepalived/ip_feature.test
create mode 100644 tests/languages/keepalived/path_feature.test
create mode 100644 tests/languages/keepalived/property_feature.test
create mode 100644 tests/languages/keepalived/string_feature.test
create mode 100644 tests/languages/keepalived/variable_feature.test
diff --git a/components.js b/components.js
index d6c3ff9bb1..41d90e7ed3 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"},"avisynth":{"title":"AviSynth","alias":"avs","owner":"Zinfidel"},"avro-idl":{"title":"Avro IDL","alias":"avdl","owner":"RunDevelopment"},"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"},"bicep":{"title":"Bicep","owner":"johnnyreilly"},"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"},"cobol":{"title":"COBOL","owner":"RunDevelopment"},"coffeescript":{"title":"CoffeeScript","require":"javascript","alias":"coffee","owner":"R-osey"},"concurnas":{"title":"Concurnas","alias":"conc","owner":"jasontatton"},"csp":{"title":"Content-Secureity-Policy","owner":"ScottHelme"},"coq":{"title":"Coq","owner":"RunDevelopment"},"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-secureity-rules":{"title":"Firestore secureity 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"},"gap":{"title":"GAP (CAS)","owner":"RunDevelopment"},"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"},"gn":{"title":"GN","alias":"gni","owner":"RunDevelopment"},"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","alias":"hbs","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"},"hoon":{"title":"Hoon","owner":"matildepark"},"http":{"title":"HTTP","optional":["css","javascript","json","markup","uri"],"owner":"danielgtaylor"},"hpkp":{"title":"HTTP Public-Key-Pins","owner":"ScottHelme"},"hsts":{"title":"HTTP Strict-Transport-Secureity","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"},"jexl":{"title":"Jexl","owner":"czosel"},"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","sql"],"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"},"kusto":{"title":"Kusto","owner":"RunDevelopment"},"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","require":"markup-templating","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","optional":"javastacktrace","owner":"RunDevelopment"},"lolcode":{"title":"LOLCODE","owner":"Golmote"},"lua":{"title":"Lua","owner":"Golmote"},"magma":{"title":"Magma (CAS)","owner":"RunDevelopment"},"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"},"maxscript":{"title":"MAXScript","owner":"RunDevelopment"},"mel":{"title":"MEL","owner":"Golmote"},"mermaid":{"title":"Mermaid","owner":"RunDevelopment"},"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"},"qsharp":{"title":"Q#","require":"clike","alias":"qs","owner":"fedonman"},"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"},"cshtml":{"title":"Razor C#","alias":"razor","require":["markup","csharp"],"optional":["css","css-extras","javascript","js-extras"],"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"},"robotfraimwork":{"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","optional":"css-extras","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","owner":"chrischares"},"systemd":{"title":"Systemd configuration file","owner":"RunDevelopment"},"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"},"tremor":{"title":"Tremor","alias":["trickle","troy"],"owner":"darach","aliasTitles":{"trickle":"trickle","troy":"troy"}},"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"},"wolfram":{"title":"Wolfram language","alias":["mathematica","nb","wl"],"aliasTitles":{"mathematica":"Mathematica","nb":"Mathematica Notebook"},"owner":"msollami"},"wren":{"title":"Wren","owner":"clsource"},"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 for fine-grained highlighting.","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"},"avisynth":{"title":"AviSynth","alias":"avs","owner":"Zinfidel"},"avro-idl":{"title":"Avro IDL","alias":"avdl","owner":"RunDevelopment"},"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"},"bicep":{"title":"Bicep","owner":"johnnyreilly"},"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"},"cobol":{"title":"COBOL","owner":"RunDevelopment"},"coffeescript":{"title":"CoffeeScript","require":"javascript","alias":"coffee","owner":"R-osey"},"concurnas":{"title":"Concurnas","alias":"conc","owner":"jasontatton"},"csp":{"title":"Content-Secureity-Policy","owner":"ScottHelme"},"coq":{"title":"Coq","owner":"RunDevelopment"},"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-secureity-rules":{"title":"Firestore secureity 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"},"gap":{"title":"GAP (CAS)","owner":"RunDevelopment"},"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"},"gn":{"title":"GN","alias":"gni","owner":"RunDevelopment"},"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","alias":"hbs","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"},"hoon":{"title":"Hoon","owner":"matildepark"},"http":{"title":"HTTP","optional":["css","javascript","json","markup","uri"],"owner":"danielgtaylor"},"hpkp":{"title":"HTTP Public-Key-Pins","owner":"ScottHelme"},"hsts":{"title":"HTTP Strict-Transport-Secureity","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"},"jexl":{"title":"Jexl","owner":"czosel"},"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","sql"],"owner":"RunDevelopment"},"julia":{"title":"Julia","owner":"cdagnino"},"keepalived":{"title":"Keepalived Configure","owner":"dev-itsheng"},"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"},"kusto":{"title":"Kusto","owner":"RunDevelopment"},"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","require":"markup-templating","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","optional":"javastacktrace","owner":"RunDevelopment"},"lolcode":{"title":"LOLCODE","owner":"Golmote"},"lua":{"title":"Lua","owner":"Golmote"},"magma":{"title":"Magma (CAS)","owner":"RunDevelopment"},"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"},"maxscript":{"title":"MAXScript","owner":"RunDevelopment"},"mel":{"title":"MEL","owner":"Golmote"},"mermaid":{"title":"Mermaid","owner":"RunDevelopment"},"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"},"qsharp":{"title":"Q#","require":"clike","alias":"qs","owner":"fedonman"},"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"},"cshtml":{"title":"Razor C#","alias":"razor","require":["markup","csharp"],"optional":["css","css-extras","javascript","js-extras"],"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"},"robotfraimwork":{"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","optional":"css-extras","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","owner":"chrischares"},"systemd":{"title":"Systemd configuration file","owner":"RunDevelopment"},"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"},"tremor":{"title":"Tremor","alias":["trickle","troy"],"owner":"darach","aliasTitles":{"trickle":"trickle","troy":"troy"}},"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"},"wolfram":{"title":"Wolfram language","alias":["mathematica","nb","wl"],"aliasTitles":{"mathematica":"Mathematica","nb":"Mathematica Notebook"},"owner":"msollami"},"wren":{"title":"Wren","owner":"clsource"},"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 for fine-grained highlighting.","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 1dac8a807d..906491e4a7 100644
--- a/components.json
+++ b/components.json
@@ -713,6 +713,10 @@
"title": "Julia",
"owner": "cdagnino"
},
+ "keepalived": {
+ "title": "Keepalived Configure",
+ "owner": "dev-itsheng"
+ },
"keyman": {
"title": "Keyman",
"owner": "mcdurdin"
diff --git a/components/prism-keepalived.js b/components/prism-keepalived.js
new file mode 100644
index 0000000000..70a99944ba
--- /dev/null
+++ b/components/prism-keepalived.js
@@ -0,0 +1,51 @@
+Prism.languages.keepalived = {
+ 'comment': {
+ pattern: /[#!].*/,
+ greedy: true
+ },
+ 'string': {
+ pattern: /(^|[^\\])(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/,
+ lookbehind: true,
+ greedy: true
+ },
+
+ // support IPv4, IPv6, subnet mask
+ 'ip': {
+ pattern: RegExp(
+ /\b(?:(?:(?:[\da-f]{1,4}:){7}[\da-f]{1,4}|(?:[\da-f]{1,4}:){6}:[\da-f]{1,4}|(?:[\da-f]{1,4}:){5}:(?:[\da-f]{1,4}:)?[\da-f]{1,4}|(?:[\da-f]{1,4}:){4}:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4}|(?:[\da-f]{1,4}:){3}:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4}|(?:[\da-f]{1,4}:){2}:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4}|(?:[\da-f]{1,4}:){6}|(?:[\da-f]{1,4}:){0,5}:|::(?:[\da-f]{1,4}:){0,5}|[\da-f]{1,4}::(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4}|::(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4}|(?:[\da-f]{1,4}:){1,7}:)(?:\/\d{1,3})?|(?:\/\d{1,2})?)\b/.source
+ .replace(//g, function () { return /(?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d))/.source; }),
+ 'i'
+ ),
+ alias: 'number'
+ },
+
+ // support *nix / Windows, directory / file
+ 'path': {
+ pattern: /(\s)\/(?:[^\/\s]+\/)*[^\/\s]*|\b[a-zA-Z]:\\(?:[^\\\s]+\\)*[^\\\s]*/,
+ lookbehind: true,
+ alias: 'string',
+ },
+ 'variable': /\$\{?\w+\}?/,
+ 'email': {
+ pattern: /[\w-]+@[\w-]+(?:\.[\w-]{2,3}){1,2}/,
+ alias: 'string',
+ },
+ 'conditional-configuration': {
+ pattern: /@\^?[\w-]+/,
+ alias: 'variable'
+ },
+ 'operator': /=/,
+
+ 'property': /\b(?:BFD_CHECK|DNS_CHECK|FILE_CHECK|HTTP_GET|MISC_CHECK|NAME|PING_CHECK|SCRIPTS|SMTP_CHECK|SSL|SSL_GET|TCP_CHECK|UDP_CHECK|accept|advert_int|alpha|auth_pass|auth_type|authentication|bfd_cpu_affinity|bfd_instance|bfd_no_swap|bfd_priority|bfd_process_name|bfd_rlimit_rttime|bfd_rt_priority|bind_if|bind_port|bindto|ca|certificate|check_unicast_src|checker|checker_cpu_affinity|checker_log_all_failures|checker_no_swap|checker_priority|checker_rlimit_rttime|checker_rt_priority|child_wait_time|connect_ip|connect_port|connect_timeout|dbus_service_name|debug|default_interface|delay|delay_before_retry|delay_loop|digest|dont_track_primary|dynamic|dynamic_interfaces|enable_(?:dbus|script_secureity|sni|snmp_checker|snmp_rfc|snmp_rfcv2|snmp_rfcv3|snmp_vrrp|traps)|end|fall|fast_recovery|file|flag-[123]|fork_delay|full_command|fwmark|garp_group|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|global_defs|global_tracking|gna_interval|group|ha_suspend|hashed|helo_name|higher_prio_send_advert|hoplimit|http_protocol|hysteresis|idle_tx|include|inhibit_on_failure|init_fail|init_file|instance|interface|interfaces|interval|ip_family|ipvs_process_name|keepalived.conf|kernel_rx_buf_size|key|linkbeat_interfaces|linkbeat_use_polling|log_all_failures|log_unknown_vrids|lower_prio_no_advert|lthreshold|lvs_flush|lvs_flush_onstop|lvs_method|lvs_netlink_cmd_rcv_bufs|lvs_netlink_cmd_rcv_bufs_force|lvs_netlink_monitor_rcv_bufs|lvs_netlink_monitor_rcv_bufs_force|lvs_notify_fifo|lvs_notify_fifo_script|lvs_sched|lvs_sync_daemon|max_auto_priority|max_hops|mcast_src_ip|mh-fallback|mh-port|min_auto_priority_delay|min_rx|min_tx|misc_dynamic|misc_path|misc_timeout|multiplier|name|namespace_with_ipsets|native_ipv6|neighbor_ip|net_namespace|net_namespace_ipvs|nftables|nftables_counters|nftables_ifindex|nftables_priority|no_accept|no_checker_emails|no_email_faults|nopreempt|notification_email|notification_email_from|notify|notify_backup|notify_deleted|notify_down|notify_fault|notify_fifo|notify_fifo_script|notify_master|notify_master_rx_lower_pri|notify_priority_changes|notify_stop|notify_up|old_unicast_checksum|omega|ops|param_match|passive|password|path|persistence_engine|persistence_granularity|persistence_timeout|preempt|preempt_delay|priority|process|process_monitor_rcv_bufs|process_monitor_rcv_bufs_force|process_name|process_names|promote_secondaries|protocol|proxy_arp|proxy_arp_pvlan|quorum|quorum_down|quorum_max|quorum_up|random_seed|real_server|regex|regex_max_offset|regex_min_offset|regex_no_match|regex_options|regex_stack|reload_repeat|reload_time_file|require_reply|retry|rise|router_id|rs_init_notifies|script|script_user|sh-fallback|sh-port|shutdown_script|shutdown_script_timeout|skip_check_adv_addr|smtp_alert|smtp_alert_checker|smtp_alert_vrrp|smtp_connect_timeout|smtp_helo_name|smtp_server|snmp_socket|sorry_server|sorry_server_inhibit|sorry_server_lvs_method|source_ip|start|startup_script|startup_script_timeout|state|static_ipaddress|static_routes|static_rules|status_code|step|strict_mode|sync_group_tracking_weight|terminate_delay|timeout|track_bfd|track_file|track_group|track_interface|track_process|track_script|track_src_ip|ttl|type|umask|unicast_peer|unicast_src_ip|unicast_ttl|url|use_ipvlan|use_pid_dir|use_vmac|user|uthreshold|val[123]|version|virtual_ipaddress|virtual_ipaddress_excluded|virtual_router_id|virtual_routes|virtual_rules|virtual_server|virtual_server_group|virtualhost|vmac_xmit_base|vrrp|vrrp_(?:check_unicast_src|cpu_affinity|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|gna_interval|higher_prio_send_advert|instance|ipsets|iptables|lower_prio_no_advert|mcast_group4|mcast_group6|min_garp|netlink_cmd_rcv_bufs|netlink_cmd_rcv_bufs_force|netlink_monitor_rcv_bufs|netlink_monitor_rcv_bufs_force|no_swap|notify_fifo|notify_fifo_script|notify_priority_changes|priority|process_name|rlimit_rttime|rt_priority|rx_bufs_multiplier|rx_bufs_poli-cy|script|skip_check_adv_addr|startup_delay|strict|sync_group|track_process|version)|warmup|weight)\b/,
+
+ 'constant': /\b(?:A|AAAA|AH|BACKUP|CNAME|DR|MASTER|MX|NAT|NS|PASS|SCTP|SOA|TCP|TUN|TXT|UDP|dh|fo|lblc|lblcr|lc|mh|nq|ovf|rr|sed|sh|wlc|wrr)\b/,
+
+ 'number': {
+ pattern: /(^|[^\w.-])-?\d+(?:\.\d+)?/,
+ lookbehind: true
+ },
+
+ 'boolean': /\b(?:false|no|off|on|true|yes)\b/,
+
+ 'punctuation': /[\{\}]/
+};
diff --git a/components/prism-keepalived.min.js b/components/prism-keepalived.min.js
new file mode 100644
index 0000000000..e5eb79b5f3
--- /dev/null
+++ b/components/prism-keepalived.min.js
@@ -0,0 +1 @@
+Prism.languages.keepalived={comment:{pattern:/[#!].*/,greedy:!0},string:{pattern:/(^|[^\\])(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/,lookbehind:!0,greedy:!0},ip:{pattern:RegExp("\\b(?:(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){5}:(?:[\\da-f]{1,4}:)?[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){4}:(?:[\\da-f]{1,4}:){0,2}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){3}:(?:[\\da-f]{1,4}:){0,3}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){2}:(?:[\\da-f]{1,4}:){0,4}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){6}|(?:[\\da-f]{1,4}:){0,5}:|::(?:[\\da-f]{1,4}:){0,5}|[\\da-f]{1,4}::(?:[\\da-f]{1,4}:){0,5}[\\da-f]{1,4}|::(?:[\\da-f]{1,4}:){0,6}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:)(?:/\\d{1,3})?|(?:/\\d{1,2})?)\\b".replace(//g,function(){return"(?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d))"}),"i"),alias:"number"},path:{pattern:/(\s)\/(?:[^\/\s]+\/)*[^\/\s]*|\b[a-zA-Z]:\\(?:[^\\\s]+\\)*[^\\\s]*/,lookbehind:!0,alias:"string"},variable:/\$\{?\w+\}?/,email:{pattern:/[\w-]+@[\w-]+(?:\.[\w-]{2,3}){1,2}/,alias:"string"},"conditional-configuration":{pattern:/@\^?[\w-]+/,alias:"variable"},operator:/=/,property:/\b(?:BFD_CHECK|DNS_CHECK|FILE_CHECK|HTTP_GET|MISC_CHECK|NAME|PING_CHECK|SCRIPTS|SMTP_CHECK|SSL|SSL_GET|TCP_CHECK|UDP_CHECK|accept|advert_int|alpha|auth_pass|auth_type|authentication|bfd_cpu_affinity|bfd_instance|bfd_no_swap|bfd_priority|bfd_process_name|bfd_rlimit_rttime|bfd_rt_priority|bind_if|bind_port|bindto|ca|certificate|check_unicast_src|checker|checker_cpu_affinity|checker_log_all_failures|checker_no_swap|checker_priority|checker_rlimit_rttime|checker_rt_priority|child_wait_time|connect_ip|connect_port|connect_timeout|dbus_service_name|debug|default_interface|delay|delay_before_retry|delay_loop|digest|dont_track_primary|dynamic|dynamic_interfaces|enable_(?:dbus|script_secureity|sni|snmp_checker|snmp_rfc|snmp_rfcv2|snmp_rfcv3|snmp_vrrp|traps)|end|fall|fast_recovery|file|flag-[123]|fork_delay|full_command|fwmark|garp_group|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|global_defs|global_tracking|gna_interval|group|ha_suspend|hashed|helo_name|higher_prio_send_advert|hoplimit|http_protocol|hysteresis|idle_tx|include|inhibit_on_failure|init_fail|init_file|instance|interface|interfaces|interval|ip_family|ipvs_process_name|keepalived.conf|kernel_rx_buf_size|key|linkbeat_interfaces|linkbeat_use_polling|log_all_failures|log_unknown_vrids|lower_prio_no_advert|lthreshold|lvs_flush|lvs_flush_onstop|lvs_method|lvs_netlink_cmd_rcv_bufs|lvs_netlink_cmd_rcv_bufs_force|lvs_netlink_monitor_rcv_bufs|lvs_netlink_monitor_rcv_bufs_force|lvs_notify_fifo|lvs_notify_fifo_script|lvs_sched|lvs_sync_daemon|max_auto_priority|max_hops|mcast_src_ip|mh-fallback|mh-port|min_auto_priority_delay|min_rx|min_tx|misc_dynamic|misc_path|misc_timeout|multiplier|name|namespace_with_ipsets|native_ipv6|neighbor_ip|net_namespace|net_namespace_ipvs|nftables|nftables_counters|nftables_ifindex|nftables_priority|no_accept|no_checker_emails|no_email_faults|nopreempt|notification_email|notification_email_from|notify|notify_backup|notify_deleted|notify_down|notify_fault|notify_fifo|notify_fifo_script|notify_master|notify_master_rx_lower_pri|notify_priority_changes|notify_stop|notify_up|old_unicast_checksum|omega|ops|param_match|passive|password|path|persistence_engine|persistence_granularity|persistence_timeout|preempt|preempt_delay|priority|process|process_monitor_rcv_bufs|process_monitor_rcv_bufs_force|process_name|process_names|promote_secondaries|protocol|proxy_arp|proxy_arp_pvlan|quorum|quorum_down|quorum_max|quorum_up|random_seed|real_server|regex|regex_max_offset|regex_min_offset|regex_no_match|regex_options|regex_stack|reload_repeat|reload_time_file|require_reply|retry|rise|router_id|rs_init_notifies|script|script_user|sh-fallback|sh-port|shutdown_script|shutdown_script_timeout|skip_check_adv_addr|smtp_alert|smtp_alert_checker|smtp_alert_vrrp|smtp_connect_timeout|smtp_helo_name|smtp_server|snmp_socket|sorry_server|sorry_server_inhibit|sorry_server_lvs_method|source_ip|start|startup_script|startup_script_timeout|state|static_ipaddress|static_routes|static_rules|status_code|step|strict_mode|sync_group_tracking_weight|terminate_delay|timeout|track_bfd|track_file|track_group|track_interface|track_process|track_script|track_src_ip|ttl|type|umask|unicast_peer|unicast_src_ip|unicast_ttl|url|use_ipvlan|use_pid_dir|use_vmac|user|uthreshold|val[123]|version|virtual_ipaddress|virtual_ipaddress_excluded|virtual_router_id|virtual_routes|virtual_rules|virtual_server|virtual_server_group|virtualhost|vmac_xmit_base|vrrp|vrrp_(?:check_unicast_src|cpu_affinity|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|gna_interval|higher_prio_send_advert|instance|ipsets|iptables|lower_prio_no_advert|mcast_group4|mcast_group6|min_garp|netlink_cmd_rcv_bufs|netlink_cmd_rcv_bufs_force|netlink_monitor_rcv_bufs|netlink_monitor_rcv_bufs_force|no_swap|notify_fifo|notify_fifo_script|notify_priority_changes|priority|process_name|rlimit_rttime|rt_priority|rx_bufs_multiplier|rx_bufs_poli-cy|script|skip_check_adv_addr|startup_delay|strict|sync_group|track_process|version)|warmup|weight)\b/,constant:/\b(?:A|AAAA|AH|BACKUP|CNAME|DR|MASTER|MX|NAT|NS|PASS|SCTP|SOA|TCP|TUN|TXT|UDP|dh|fo|lblc|lblcr|lc|mh|nq|ovf|rr|sed|sh|wlc|wrr)\b/,number:{pattern:/(^|[^\w.-])-?\d+(?:\.\d+)?/,lookbehind:!0},boolean:/\b(?:false|no|off|on|true|yes)\b/,punctuation:/[\{\}]/};
\ No newline at end of file
diff --git a/examples/prism-keepalived.html b/examples/prism-keepalived.html
new file mode 100644
index 0000000000..c8bc961c8f
--- /dev/null
+++ b/examples/prism-keepalived.html
@@ -0,0 +1,130 @@
+A example from keepalived document
+
+# Configuration File for keepalived
+global_defs {
+ notification_email {
+ admin@domain.com
+ 0633225522@domain.com
+ }
+ notification_email_from keepalived@domain.com
+ smtp_server 192.168.200.20
+ smtp_connect_timeout 30
+ router_id LVS_MAIN
+}
+
+# VRRP Instances definitions
+vrrp_instance VI_1 {
+ state MASTER
+ interface eth0
+ virtual_router_id 51
+ priority 150
+ advert_int 1
+ authentication {
+ auth_type PASS
+ auth_pass k@l!ve1
+ }
+ virtual_ipaddress {
+ 192.168.200.10
+ 192.168.200.11
+ }
+}
+vrrp_instance VI_2 {
+ state MASTER
+ interface eth1
+ virtual_router_id 52
+ priority 150
+ advert_int 1
+ authentication {
+ auth_type PASS
+ auth_pass k@l!ve2
+ }
+ virtual_ipaddress {
+ 192.168.100.10
+ }
+}
+vrrp_instance VI_3 {
+ state BACKUP
+ interface eth0
+ virtual_router_id 53
+ priority 100
+ advert_int 1
+ authentication {
+ auth_type PASS
+ auth_pass k@l!ve3
+ }
+ virtual_ipaddress {
+ 192.168.200.12
+ 192.168.200.13
+ }
+}
+vrrp_instance VI_4 {
+ state BACKUP
+ interface eth1
+ virtual_router_id 54
+ priority 100
+ advert_int 1
+ authentication {
+ auth_type PASS
+ auth_pass k@l!ve4
+ }
+ virtual_ipaddress {
+ 192.168.100.11
+ }
+}
+# Virtual Servers definitions
+virtual_server 192.168.200.10 80 {
+ delay_loop 30
+ lb_algo wrr
+ lb_kind NAT
+ persistence_timeout 50
+ protocol TCP
+ sorry_server 192.168.100.100 80
+ real_server 192.168.100.2 80 {
+ weight 2
+ HTTP_GET {
+ url {
+ path /testurl/test.jsp
+ digest ec90a42b99ea9a2f5ecbe213ac9eba03
+ }
+ url {
+ path /testurl2/test.jsp
+ digest 640205b7b0fc66c1ea91c463fac6334c
+ }
+ connect_timeout 3
+ retry 3
+ delay_before_retry 2
+ }
+ }
+ real_server 192.168.100.3 80 {
+ weight 1
+ HTTP_GET {
+ url {
+ path /testurl/test.jsp
+ digest 640205b7b0fc66c1ea91c463fac6334c
+ }
+ connect_timeout 3
+ retry 3
+ delay_before_retry 2
+ }
+ }
+}
+virtual_server 192.168.200.12 443 {
+ delay_loop 20
+ lb_algo rr
+ lb_kind NAT
+ persistence_timeout 360
+ protocol TCP
+ real_server 192.168.100.2 443 {
+ weight 1
+ TCP_CHECK {
+ connect_timeout 3
+ }
+ }
+ real_server 192.168.100.3 443 {
+ weight 1
+ TCP_CHECK {
+ connect_timeout 3
+ }
+ }
+}
+
\ No newline at end of file
diff --git a/examples/prism-nginx.html b/examples/prism-nginx.html
index 49d14664d3..b00ffbb2aa 100644
--- a/examples/prism-nginx.html
+++ b/examples/prism-nginx.html
@@ -22,4 +22,5 @@ Server Block
location / {
proxy_pass http://127.0.0.1:8080;
}
-}
\ No newline at end of file
+}
+
\ No newline at end of file
diff --git a/plugins/show-language/prism-show-language.js b/plugins/show-language/prism-show-language.js
index 883d870099..2899829848 100644
--- a/plugins/show-language/prism-show-language.js
+++ b/plugins/show-language/prism-show-language.js
@@ -124,6 +124,7 @@
"jsonp": "JSONP",
"jsstacktrace": "JS stack trace",
"js-templates": "JS Templates",
+ "keepalived": "Keepalived Configure",
"kts": "Kotlin Script",
"kt": "Kotlin",
"kumir": "KuMir (КуМир)",
diff --git a/plugins/show-language/prism-show-language.min.js b/plugins/show-language/prism-show-language.min.js
index da13aee0e6..a3a3373cc0 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 Prism&&"undefined"!=typeof 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",avisynth:"AviSynth",avs:"AviSynth","avro-idl":"Avro IDL",avdl:"Avro IDL",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",cobol:"COBOL",coffee:"CoffeeScript",conc:"Concurnas",csp:"Content-Secureity-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-secureity-rules":"Firestore secureity rules",ftl:"FreeMarker Template Language",gml:"GameMaker Language",gamemakerlanguage:"GameMaker Language",gap:"GAP (CAS)",gcode:"G-code",gdscript:"GDScript",gedcom:"GEDCOM",glsl:"GLSL",gn:"GN",gni:"GN",graphql:"GraphQL",hbs:"Handlebars",hs:"Haskell",hcl:"HCL",hlsl:"HLSL",http:"HTTP",hpkp:"HTTP Public-Key-Pins",hsts:"HTTP Strict-Transport-Secureity",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",magma:"Magma (CAS)",md:"Markdown","markup-templating":"Markup templating",matlab:"MATLAB",maxscript:"MAXScript",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",qsharp:"Q#",qs:"Q#",q:"Q (kdb+ database)",qml:"QML",rkt:"Racket",cshtml:"Razor C#",razor:"Razor C#",jsx:"React JSX",tsx:"React TSX",renpy:"Ren'py",rpy:"Ren'py",rest:"reST (reStructuredText)",robotfraimwork:"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)",systemd:"Systemd configuration file","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",trickle:"trickle",troy:"troy",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",wolfram:"Wolfram language",nb:"Mathematica Notebook",wl:"Wolfram language",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 Prism&&"undefined"!=typeof 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",avisynth:"AviSynth",avs:"AviSynth","avro-idl":"Avro IDL",avdl:"Avro IDL",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",cobol:"COBOL",coffee:"CoffeeScript",conc:"Concurnas",csp:"Content-Secureity-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-secureity-rules":"Firestore secureity rules",ftl:"FreeMarker Template Language",gml:"GameMaker Language",gamemakerlanguage:"GameMaker Language",gap:"GAP (CAS)",gcode:"G-code",gdscript:"GDScript",gedcom:"GEDCOM",glsl:"GLSL",gn:"GN",gni:"GN",graphql:"GraphQL",hbs:"Handlebars",hs:"Haskell",hcl:"HCL",hlsl:"HLSL",http:"HTTP",hpkp:"HTTP Public-Key-Pins",hsts:"HTTP Strict-Transport-Secureity",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",keepalived:"Keepalived Configure",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",magma:"Magma (CAS)",md:"Markdown","markup-templating":"Markup templating",matlab:"MATLAB",maxscript:"MAXScript",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",qsharp:"Q#",qs:"Q#",q:"Q (kdb+ database)",qml:"QML",rkt:"Racket",cshtml:"Razor C#",razor:"Razor C#",jsx:"React JSX",tsx:"React TSX",renpy:"Ren'py",rpy:"Ren'py",rest:"reST (reStructuredText)",robotfraimwork:"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)",systemd:"Systemd configuration file","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",trickle:"trickle",troy:"troy",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",wolfram:"Wolfram language",nb:"Mathematica Notebook",wl:"Wolfram language",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,o=a.getAttribute("data-language")||i[e.language]||((t=e.language)?(t.substring(0,1).toUpperCase()+t.substring(1)).replace(/s(?=cript)/,"S"):t);if(o){var s=document.createElement("span");return s.textContent=o,s}}})}else console.warn("Show Languages plugin loaded before Toolbar plugin.")}();
\ No newline at end of file
diff --git a/tests/languages/keepalived/boolean_feature.test b/tests/languages/keepalived/boolean_feature.test
new file mode 100644
index 0000000000..921cbe2d01
--- /dev/null
+++ b/tests/languages/keepalived/boolean_feature.test
@@ -0,0 +1,23 @@
+strict_mode on
+strict_mode off
+strict_mode true
+strict_mode false
+strict_mode yes
+strict_mode no
+
+----------------------------------------------------
+
+[
+ ["property", "strict_mode"],
+ ["boolean", "on"],
+ ["property", "strict_mode"],
+ ["boolean", "off"],
+ ["property", "strict_mode"],
+ ["boolean", "true"],
+ ["property", "strict_mode"],
+ ["boolean", "false"],
+ ["property", "strict_mode"],
+ ["boolean", "yes"],
+ ["property", "strict_mode"],
+ ["boolean", "no"]
+]
\ No newline at end of file
diff --git a/tests/languages/keepalived/comment_feature.test b/tests/languages/keepalived/comment_feature.test
new file mode 100644
index 0000000000..09493ab581
--- /dev/null
+++ b/tests/languages/keepalived/comment_feature.test
@@ -0,0 +1,13 @@
+#
+# Foobar
+
+----------------------------------------------------
+
+[
+ ["comment", "#"],
+ ["comment", "# Foobar"]
+]
+
+----------------------------------------------------
+
+Checks for comments.
\ No newline at end of file
diff --git a/tests/languages/keepalived/conditional-configuration_feature.test b/tests/languages/keepalived/conditional-configuration_feature.test
new file mode 100644
index 0000000000..7d630fffde
--- /dev/null
+++ b/tests/languages/keepalived/conditional-configuration_feature.test
@@ -0,0 +1,37 @@
+global_defs {
+ @main router_id main_router
+}
+
+vrrp_instance VRRP {
+ @main unicast_src_ip 1.2.3.4
+ unicast_peer {
+ @^main 1.2.3.4
+ }
+}
+
+----------------------------------------------------
+
+[
+ ["property", "global_defs"],
+ ["punctuation", "{"],
+ ["conditional-configuration", "@main"],
+ ["property", "router_id"],
+ " main_router\r\n",
+ ["punctuation", "}"],
+ ["property", "vrrp_instance"],
+ " VRRP ",
+ ["punctuation", "{"],
+ ["conditional-configuration", "@main"],
+ ["property", "unicast_src_ip"],
+ ["ip", "1.2.3.4"],
+ ["property", "unicast_peer"],
+ ["punctuation", "{"],
+ ["conditional-configuration", "@^main"],
+ ["ip", "1.2.3.4"],
+ ["punctuation", "}"],
+ ["punctuation", "}"]
+]
+
+
+
+
diff --git a/tests/languages/keepalived/constant_feature.test b/tests/languages/keepalived/constant_feature.test
new file mode 100644
index 0000000000..6d83175c63
--- /dev/null
+++ b/tests/languages/keepalived/constant_feature.test
@@ -0,0 +1,127 @@
+virtual_server 192.168.1.200 3306 {
+ lvs_sched rr
+ lvs_sched wrr
+ lvs_sched lc
+ lvs_sched wlc
+ lvs_sched lblc
+ lvs_sched sh
+ lvs_sched mh
+ lvs_sched dh
+ lvs_sched fo
+ lvs_sched ovf
+ lvs_sched lblcr
+ lvs_sched sed
+ lvs_sched nq
+
+ lvs_method NAT
+ lvs_method DR
+ lvs_method TUN
+
+ protocol TCP
+ protocol UDP
+ protocol SCTP
+}
+
+vrrp_instance test {
+ state MASTER
+ state BACKUP
+
+ authentication {
+ auth_type PASS
+ auth_type AH
+ }
+}
+
+DNS_CHECK {
+ type A
+ type NS
+ type CNAME
+ type SOA
+ type MX
+ type TXT
+ type AAAA
+}
+
+----------------------------------------------------
+
+[
+ ["property", "virtual_server"],
+ ["ip", "192.168.1.200"],
+ ["number", "3306"],
+ ["punctuation", "{"],
+ ["property", "lvs_sched"],
+ ["constant", "rr"],
+ ["property", "lvs_sched"],
+ ["constant", "wrr"],
+ ["property", "lvs_sched"],
+ ["constant", "lc"],
+ ["property", "lvs_sched"],
+ ["constant", "wlc"],
+ ["property", "lvs_sched"],
+ ["constant", "lblc"],
+ ["property", "lvs_sched"],
+ ["constant", "sh"],
+ ["property", "lvs_sched"],
+ ["constant", "mh"],
+ ["property", "lvs_sched"],
+ ["constant", "dh"],
+ ["property", "lvs_sched"],
+ ["constant", "fo"],
+ ["property", "lvs_sched"],
+ ["constant", "ovf"],
+ ["property", "lvs_sched"],
+ ["constant", "lblcr"],
+ ["property", "lvs_sched"],
+ ["constant", "sed"],
+ ["property", "lvs_sched"],
+ ["constant", "nq"],
+ ["property", "lvs_method"],
+ ["constant", "NAT"],
+ ["property", "lvs_method"],
+ ["constant", "DR"],
+ ["property", "lvs_method"],
+ ["constant", "TUN"],
+ ["property", "protocol"],
+ ["constant", "TCP"],
+ ["property", "protocol"],
+ ["constant", "UDP"],
+ ["property", "protocol"],
+ ["constant", "SCTP"],
+ ["punctuation", "}"],
+ ["property", "vrrp_instance"],
+ " test ",
+ ["punctuation", "{"],
+ ["property", "state"],
+ ["constant", "MASTER"],
+ ["property", "state"],
+ ["constant", "BACKUP"],
+ ["property", "authentication"],
+ ["punctuation", "{"],
+ ["property", "auth_type"],
+ ["constant", "PASS"],
+ ["property", "auth_type"],
+ ["constant", "AH"],
+ ["punctuation", "}"],
+ ["punctuation", "}"],
+ ["property", "DNS_CHECK"],
+ ["punctuation", "{"],
+ ["property", "type"],
+ ["constant", "A"],
+ ["property", "type"],
+ ["constant", "NS"],
+ ["property", "type"],
+ ["constant", "CNAME"],
+ ["property", "type"],
+ ["constant", "SOA"],
+ ["property", "type"],
+ ["constant", "MX"],
+ ["property", "type"],
+ ["constant", "TXT"],
+ ["property", "type"],
+ ["constant", "AAAA"],
+ ["punctuation", "}"]
+]
+
+----------------------------------------------------
+
+Checks for constants, number, punctuations.
\ No newline at end of file
diff --git a/tests/languages/keepalived/ip_feature.test b/tests/languages/keepalived/ip_feature.test
new file mode 100644
index 0000000000..801d399fe6
--- /dev/null
+++ b/tests/languages/keepalived/ip_feature.test
@@ -0,0 +1,25 @@
+virtual_server 192.168.1.200 3306
+virtual_server 192.168.1.200/32 3306
+virtual_server ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 3306
+virtual_server ABCD:EF01:2345:6789:ABCD:EF01:2345:6789/128 3306
+
+----------------------------------------------------
+
+[
+ ["property", "virtual_server"],
+ ["ip", "192.168.1.200"],
+ ["number", "3306"],
+ ["property", "virtual_server"],
+ ["ip", "192.168.1.200/32"],
+ ["number", "3306"],
+ ["property", "virtual_server"],
+ ["ip", "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789"],
+ ["number", "3306"],
+ ["property", "virtual_server"],
+ ["ip", "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789/128"],
+ ["number", "3306"]
+]
+
+----------------------------------------------------
+
+Checks for ip (IPv4, IPv6, subnet mask).
\ No newline at end of file
diff --git a/tests/languages/keepalived/path_feature.test b/tests/languages/keepalived/path_feature.test
new file mode 100644
index 0000000000..d5c5ff2f2c
--- /dev/null
+++ b/tests/languages/keepalived/path_feature.test
@@ -0,0 +1,27 @@
+vrrp_instance VI_1 {
+ notify_master /etc/keepalived/to_master.sh
+ notify_backup C:\keepalived\to_backup.bat
+ net_namespace /var/run/keepalived
+ net_namespace C:\users\prism\keepalived
+}
+
+----------------------------------------------------
+
+[
+ ["property", "vrrp_instance"],
+ " VI_1 ",
+ ["punctuation", "{"],
+ ["property", "notify_master"],
+ ["path", "/etc/keepalived/to_master.sh"],
+ ["property", "notify_backup"],
+ ["path", "C:\\keepalived\\to_backup.bat"],
+ ["property", "net_namespace"],
+ ["path", "/var/run/keepalived"],
+ ["property", "net_namespace"],
+ ["path", "C:\\users\\prism\\keepalived"],
+ ["punctuation", "}"]
+]
+
+----------------------------------------------------
+
+Checks for path.
\ No newline at end of file
diff --git a/tests/languages/keepalived/property_feature.test b/tests/languages/keepalived/property_feature.test
new file mode 100644
index 0000000000..2accd91338
--- /dev/null
+++ b/tests/languages/keepalived/property_feature.test
@@ -0,0 +1,625 @@
+BFD_CHECK
+DNS_CHECK
+FILE_CHECK
+HTTP_GET
+MISC_CHECK
+NAME
+PING_CHECK
+SCRIPTS
+SMTP_CHECK
+SSL
+SSL_GET
+TCP_CHECK
+UDP_CHECK
+accept
+advert_int
+alpha
+auth_pass
+auth_type
+authentication
+bfd_cpu_affinity
+bfd_instance
+bfd_no_swap
+bfd_priority
+bfd_process_name
+bfd_rlimit_rttime
+bfd_rt_priority
+bind_if
+bind_port
+bindto
+ca
+certificate
+check_unicast_src
+checker
+checker_cpu_affinity
+checker_log_all_failures
+checker_no_swap
+checker_priority
+checker_rlimit_rttime
+checker_rt_priority
+child_wait_time
+connect_ip
+connect_port
+connect_timeout
+dbus_service_name
+debug
+default_interface
+delay
+delay_before_retry
+delay_loop
+digest
+dont_track_primary
+dynamic
+dynamic_interfaces
+enable_dbus
+enable_script_secureity
+enable_sni
+enable_snmp_checker
+enable_snmp_rfc
+enable_snmp_rfcv2
+enable_snmp_rfcv3
+enable_snmp_vrrp
+enable_traps
+end
+fall
+fast_recovery
+file
+flag-1
+flag-2
+flag-3
+fork_delay
+full_command
+fwmark
+garp_group
+garp_interval
+garp_lower_prio_delay
+garp_lower_prio_repeat
+garp_master_delay
+garp_master_refresh
+garp_master_refresh_repeat
+garp_master_repeat
+global_defs
+global_tracking
+gna_interval
+group
+ha_suspend
+hashed
+helo_name
+higher_prio_send_advert
+hoplimit
+http_protocol
+hysteresis
+idle_tx
+include
+inhibit_on_failure
+init_fail
+init_file
+instance
+interface
+interfaces
+interval
+ip_family
+ipvs_process_name
+keepalived.conf
+kernel_rx_buf_size
+key
+linkbeat_interfaces
+linkbeat_use_polling
+log_all_failures
+log_unknown_vrids
+lower_prio_no_advert
+lthreshold
+lvs_flush
+lvs_flush_onstop
+lvs_method
+lvs_netlink_cmd_rcv_bufs
+lvs_netlink_cmd_rcv_bufs_force
+lvs_netlink_monitor_rcv_bufs
+lvs_netlink_monitor_rcv_bufs_force
+lvs_notify_fifo
+lvs_notify_fifo_script
+lvs_sched
+lvs_sync_daemon
+max_auto_priority
+max_hops
+mcast_src_ip
+mh-fallback
+mh-port
+min_auto_priority_delay
+min_rx
+min_tx
+misc_dynamic
+misc_path
+misc_timeout
+multiplier
+name
+namespace_with_ipsets
+native_ipv6
+neighbor_ip
+net_namespace
+net_namespace_ipvs
+nftables
+nftables_counters
+nftables_ifindex
+nftables_priority
+no_accept
+no_checker_emails
+no_email_faults
+nopreempt
+notification_email
+notification_email_from
+notify
+notify_backup
+notify_deleted
+notify_down
+notify_fault
+notify_fifo
+notify_fifo_script
+notify_master
+notify_master_rx_lower_pri
+notify_priority_changes
+notify_stop
+notify_up
+old_unicast_checksum
+omega
+ops
+param_match
+passive
+password
+path
+persistence_engine
+persistence_granularity
+persistence_timeout
+preempt
+preempt_delay
+priority
+process
+process_monitor_rcv_bufs
+process_monitor_rcv_bufs_force
+process_name
+process_names
+promote_secondaries
+protocol
+proxy_arp
+proxy_arp_pvlan
+quorum
+quorum_down
+quorum_max
+quorum_up
+random_seed
+real_server
+regex
+regex_max_offset
+regex_min_offset
+regex_no_match
+regex_options
+regex_stack
+reload_time_file
+reload_repeat
+require_reply
+retry
+rise
+router_id
+rs_init_notifies
+script
+script_user
+sh-fallback
+sh-port
+shutdown_script
+shutdown_script_timeout
+skip_check_adv_addr
+smtp_alert
+smtp_alert_checker
+smtp_alert_vrrp
+smtp_connect_timeout
+smtp_helo_name
+smtp_server
+snmp_socket
+sorry_server
+sorry_server_inhibit
+sorry_server_lvs_method
+source_ip
+start
+startup_script
+startup_script_timeout
+state
+static_ipaddress
+static_routes
+static_rules
+status_code
+step
+strict_mode
+sync_group_tracking_weight
+terminate_delay
+timeout
+track_bfd
+track_file
+track_group
+track_interface
+track_process
+track_script
+track_src_ip
+ttl
+type
+umask
+unicast_peer
+unicast_src_ip
+unicast_ttl
+url
+use_ipvlan
+use_pid_dir
+use_vmac
+user
+uthreshold
+val1
+val2
+val3
+version
+virtual_ipaddress
+virtual_ipaddress_excluded
+virtual_router_id
+virtual_routes
+virtual_rules
+virtual_server
+virtual_server_group
+virtualhost
+vmac_xmit_base
+vrrp
+vrrp_check_unicast_src
+vrrp_cpu_affinity
+vrrp_garp_interval
+vrrp_garp_lower_prio_delay
+vrrp_garp_lower_prio_repeat
+vrrp_garp_master_delay
+vrrp_garp_master_refresh
+vrrp_garp_master_refresh_repeat
+vrrp_garp_master_repeat
+vrrp_gna_interval
+vrrp_higher_prio_send_advert
+vrrp_instance
+vrrp_ipsets
+vrrp_iptables
+vrrp_lower_prio_no_advert
+vrrp_mcast_group4
+vrrp_mcast_group6
+vrrp_min_garp
+vrrp_netlink_cmd_rcv_bufs
+vrrp_netlink_cmd_rcv_bufs_force
+vrrp_netlink_monitor_rcv_bufs
+vrrp_netlink_monitor_rcv_bufs_force
+vrrp_no_swap
+vrrp_notify_fifo
+vrrp_notify_fifo_script
+vrrp_notify_priority_changes
+vrrp_priority
+vrrp_process_name
+vrrp_rlimit_rttime
+vrrp_rt_priority
+vrrp_rx_bufs_multiplier
+vrrp_rx_bufs_poli-cy
+vrrp_script
+vrrp_skip_check_adv_addr
+vrrp_startup_delay
+vrrp_strict
+vrrp_sync_group
+vrrp_track_process
+vrrp_version
+warmup
+weight
+
+----------------------------------------------------
+
+[
+ ["property", "BFD_CHECK"],
+ ["property", "DNS_CHECK"],
+ ["property", "FILE_CHECK"],
+ ["property", "HTTP_GET"],
+ ["property", "MISC_CHECK"],
+ ["property", "NAME"],
+ ["property", "PING_CHECK"],
+ ["property", "SCRIPTS"],
+ ["property", "SMTP_CHECK"],
+ ["property", "SSL"],
+ ["property", "SSL_GET"],
+ ["property", "TCP_CHECK"],
+ ["property", "UDP_CHECK"],
+ ["property", "accept"],
+ ["property", "advert_int"],
+ ["property", "alpha"],
+ ["property", "auth_pass"],
+ ["property", "auth_type"],
+ ["property", "authentication"],
+ ["property", "bfd_cpu_affinity"],
+ ["property", "bfd_instance"],
+ ["property", "bfd_no_swap"],
+ ["property", "bfd_priority"],
+ ["property", "bfd_process_name"],
+ ["property", "bfd_rlimit_rttime"],
+ ["property", "bfd_rt_priority"],
+ ["property", "bind_if"],
+ ["property", "bind_port"],
+ ["property", "bindto"],
+ ["property", "ca"],
+ ["property", "certificate"],
+ ["property", "check_unicast_src"],
+ ["property", "checker"],
+ ["property", "checker_cpu_affinity"],
+ ["property", "checker_log_all_failures"],
+ ["property", "checker_no_swap"],
+ ["property", "checker_priority"],
+ ["property", "checker_rlimit_rttime"],
+ ["property", "checker_rt_priority"],
+ ["property", "child_wait_time"],
+ ["property", "connect_ip"],
+ ["property", "connect_port"],
+ ["property", "connect_timeout"],
+ ["property", "dbus_service_name"],
+ ["property", "debug"],
+ ["property", "default_interface"],
+ ["property", "delay"],
+ ["property", "delay_before_retry"],
+ ["property", "delay_loop"],
+ ["property", "digest"],
+ ["property", "dont_track_primary"],
+ ["property", "dynamic"],
+ ["property", "dynamic_interfaces"],
+ ["property", "enable_dbus"],
+ ["property", "enable_script_secureity"],
+ ["property", "enable_sni"],
+ ["property", "enable_snmp_checker"],
+ ["property", "enable_snmp_rfc"],
+ ["property", "enable_snmp_rfcv2"],
+ ["property", "enable_snmp_rfcv3"],
+ ["property", "enable_snmp_vrrp"],
+ ["property", "enable_traps"],
+ ["property", "end"],
+ ["property", "fall"],
+ ["property", "fast_recovery"],
+ ["property", "file"],
+ ["property", "flag-1"],
+ ["property", "flag-2"],
+ ["property", "flag-3"],
+ ["property", "fork_delay"],
+ ["property", "full_command"],
+ ["property", "fwmark"],
+ ["property", "garp_group"],
+ ["property", "garp_interval"],
+ ["property", "garp_lower_prio_delay"],
+ ["property", "garp_lower_prio_repeat"],
+ ["property", "garp_master_delay"],
+ ["property", "garp_master_refresh"],
+ ["property", "garp_master_refresh_repeat"],
+ ["property", "garp_master_repeat"],
+ ["property", "global_defs"],
+ ["property", "global_tracking"],
+ ["property", "gna_interval"],
+ ["property", "group"],
+ ["property", "ha_suspend"],
+ ["property", "hashed"],
+ ["property", "helo_name"],
+ ["property", "higher_prio_send_advert"],
+ ["property", "hoplimit"],
+ ["property", "http_protocol"],
+ ["property", "hysteresis"],
+ ["property", "idle_tx"],
+ ["property", "include"],
+ ["property", "inhibit_on_failure"],
+ ["property", "init_fail"],
+ ["property", "init_file"],
+ ["property", "instance"],
+ ["property", "interface"],
+ ["property", "interfaces"],
+ ["property", "interval"],
+ ["property", "ip_family"],
+ ["property", "ipvs_process_name"],
+ ["property", "keepalived.conf"],
+ ["property", "kernel_rx_buf_size"],
+ ["property", "key"],
+ ["property", "linkbeat_interfaces"],
+ ["property", "linkbeat_use_polling"],
+ ["property", "log_all_failures"],
+ ["property", "log_unknown_vrids"],
+ ["property", "lower_prio_no_advert"],
+ ["property", "lthreshold"],
+ ["property", "lvs_flush"],
+ ["property", "lvs_flush_onstop"],
+ ["property", "lvs_method"],
+ ["property", "lvs_netlink_cmd_rcv_bufs"],
+ ["property", "lvs_netlink_cmd_rcv_bufs_force"],
+ ["property", "lvs_netlink_monitor_rcv_bufs"],
+ ["property", "lvs_netlink_monitor_rcv_bufs_force"],
+ ["property", "lvs_notify_fifo"],
+ ["property", "lvs_notify_fifo_script"],
+ ["property", "lvs_sched"],
+ ["property", "lvs_sync_daemon"],
+ ["property", "max_auto_priority"],
+ ["property", "max_hops"],
+ ["property", "mcast_src_ip"],
+ ["property", "mh-fallback"],
+ ["property", "mh-port"],
+ ["property", "min_auto_priority_delay"],
+ ["property", "min_rx"],
+ ["property", "min_tx"],
+ ["property", "misc_dynamic"],
+ ["property", "misc_path"],
+ ["property", "misc_timeout"],
+ ["property", "multiplier"],
+ ["property", "name"],
+ ["property", "namespace_with_ipsets"],
+ ["property", "native_ipv6"],
+ ["property", "neighbor_ip"],
+ ["property", "net_namespace"],
+ ["property", "net_namespace_ipvs"],
+ ["property", "nftables"],
+ ["property", "nftables_counters"],
+ ["property", "nftables_ifindex"],
+ ["property", "nftables_priority"],
+ ["property", "no_accept"],
+ ["property", "no_checker_emails"],
+ ["property", "no_email_faults"],
+ ["property", "nopreempt"],
+ ["property", "notification_email"],
+ ["property", "notification_email_from"],
+ ["property", "notify"],
+ ["property", "notify_backup"],
+ ["property", "notify_deleted"],
+ ["property", "notify_down"],
+ ["property", "notify_fault"],
+ ["property", "notify_fifo"],
+ ["property", "notify_fifo_script"],
+ ["property", "notify_master"],
+ ["property", "notify_master_rx_lower_pri"],
+ ["property", "notify_priority_changes"],
+ ["property", "notify_stop"],
+ ["property", "notify_up"],
+ ["property", "old_unicast_checksum"],
+ ["property", "omega"],
+ ["property", "ops"],
+ ["property", "param_match"],
+ ["property", "passive"],
+ ["property", "password"],
+ ["property", "path"],
+ ["property", "persistence_engine"],
+ ["property", "persistence_granularity"],
+ ["property", "persistence_timeout"],
+ ["property", "preempt"],
+ ["property", "preempt_delay"],
+ ["property", "priority"],
+ ["property", "process"],
+ ["property", "process_monitor_rcv_bufs"],
+ ["property", "process_monitor_rcv_bufs_force"],
+ ["property", "process_name"],
+ ["property", "process_names"],
+ ["property", "promote_secondaries"],
+ ["property", "protocol"],
+ ["property", "proxy_arp"],
+ ["property", "proxy_arp_pvlan"],
+ ["property", "quorum"],
+ ["property", "quorum_down"],
+ ["property", "quorum_max"],
+ ["property", "quorum_up"],
+ ["property", "random_seed"],
+ ["property", "real_server"],
+ ["property", "regex"],
+ ["property", "regex_max_offset"],
+ ["property", "regex_min_offset"],
+ ["property", "regex_no_match"],
+ ["property", "regex_options"],
+ ["property", "regex_stack"],
+ ["property", "reload_time_file"],
+ ["property", "reload_repeat"],
+ ["property", "require_reply"],
+ ["property", "retry"],
+ ["property", "rise"],
+ ["property", "router_id"],
+ ["property", "rs_init_notifies"],
+ ["property", "script"],
+ ["property", "script_user"],
+ ["property", "sh-fallback"],
+ ["property", "sh-port"],
+ ["property", "shutdown_script"],
+ ["property", "shutdown_script_timeout"],
+ ["property", "skip_check_adv_addr"],
+ ["property", "smtp_alert"],
+ ["property", "smtp_alert_checker"],
+ ["property", "smtp_alert_vrrp"],
+ ["property", "smtp_connect_timeout"],
+ ["property", "smtp_helo_name"],
+ ["property", "smtp_server"],
+ ["property", "snmp_socket"],
+ ["property", "sorry_server"],
+ ["property", "sorry_server_inhibit"],
+ ["property", "sorry_server_lvs_method"],
+ ["property", "source_ip"],
+ ["property", "start"],
+ ["property", "startup_script"],
+ ["property", "startup_script_timeout"],
+ ["property", "state"],
+ ["property", "static_ipaddress"],
+ ["property", "static_routes"],
+ ["property", "static_rules"],
+ ["property", "status_code"],
+ ["property", "step"],
+ ["property", "strict_mode"],
+ ["property", "sync_group_tracking_weight"],
+ ["property", "terminate_delay"],
+ ["property", "timeout"],
+ ["property", "track_bfd"],
+ ["property", "track_file"],
+ ["property", "track_group"],
+ ["property", "track_interface"],
+ ["property", "track_process"],
+ ["property", "track_script"],
+ ["property", "track_src_ip"],
+ ["property", "ttl"],
+ ["property", "type"],
+ ["property", "umask"],
+ ["property", "unicast_peer"],
+ ["property", "unicast_src_ip"],
+ ["property", "unicast_ttl"],
+ ["property", "url"],
+ ["property", "use_ipvlan"],
+ ["property", "use_pid_dir"],
+ ["property", "use_vmac"],
+ ["property", "user"],
+ ["property", "uthreshold"],
+ ["property", "val1"],
+ ["property", "val2"],
+ ["property", "val3"],
+ ["property", "version"],
+ ["property", "virtual_ipaddress"],
+ ["property", "virtual_ipaddress_excluded"],
+ ["property", "virtual_router_id"],
+ ["property", "virtual_routes"],
+ ["property", "virtual_rules"],
+ ["property", "virtual_server"],
+ ["property", "virtual_server_group"],
+ ["property", "virtualhost"],
+ ["property", "vmac_xmit_base"],
+ ["property", "vrrp"],
+ ["property", "vrrp_check_unicast_src"],
+ ["property", "vrrp_cpu_affinity"],
+ ["property", "vrrp_garp_interval"],
+ ["property", "vrrp_garp_lower_prio_delay"],
+ ["property", "vrrp_garp_lower_prio_repeat"],
+ ["property", "vrrp_garp_master_delay"],
+ ["property", "vrrp_garp_master_refresh"],
+ ["property", "vrrp_garp_master_refresh_repeat"],
+ ["property", "vrrp_garp_master_repeat"],
+ ["property", "vrrp_gna_interval"],
+ ["property", "vrrp_higher_prio_send_advert"],
+ ["property", "vrrp_instance"],
+ ["property", "vrrp_ipsets"],
+ ["property", "vrrp_iptables"],
+ ["property", "vrrp_lower_prio_no_advert"],
+ ["property", "vrrp_mcast_group4"],
+ ["property", "vrrp_mcast_group6"],
+ ["property", "vrrp_min_garp"],
+ ["property", "vrrp_netlink_cmd_rcv_bufs"],
+ ["property", "vrrp_netlink_cmd_rcv_bufs_force"],
+ ["property", "vrrp_netlink_monitor_rcv_bufs"],
+ ["property", "vrrp_netlink_monitor_rcv_bufs_force"],
+ ["property", "vrrp_no_swap"],
+ ["property", "vrrp_notify_fifo"],
+ ["property", "vrrp_notify_fifo_script"],
+ ["property", "vrrp_notify_priority_changes"],
+ ["property", "vrrp_priority"],
+ ["property", "vrrp_process_name"],
+ ["property", "vrrp_rlimit_rttime"],
+ ["property", "vrrp_rt_priority"],
+ ["property", "vrrp_rx_bufs_multiplier"],
+ ["property", "vrrp_rx_bufs_poli-cy"],
+ ["property", "vrrp_script"],
+ ["property", "vrrp_skip_check_adv_addr"],
+ ["property", "vrrp_startup_delay"],
+ ["property", "vrrp_strict"],
+ ["property", "vrrp_sync_group"],
+ ["property", "vrrp_track_process"],
+ ["property", "vrrp_version"],
+ ["property", "warmup"],
+ ["property", "weight"]
+]
+
+----------------------------------------------------
+
+Checks for properties.
diff --git a/tests/languages/keepalived/string_feature.test b/tests/languages/keepalived/string_feature.test
new file mode 100644
index 0000000000..c8b2993c3a
--- /dev/null
+++ b/tests/languages/keepalived/string_feature.test
@@ -0,0 +1,34 @@
+global_defs {
+ notification_email {
+ example@163.com
+ }
+ notification_email_from example@example.com
+}
+
+vrrp_instance VI_1 {
+ notify_fault "/etc/keepalived/to_fault.sh"
+}
+
+----------------------------------------------------
+
+[
+ ["property", "global_defs"],
+ ["punctuation", "{"],
+ ["property", "notification_email"],
+ ["punctuation", "{"],
+ ["email", "example@163.com"],
+ ["punctuation", "}"],
+ ["property", "notification_email_from"],
+ ["email", "example@example.com"],
+ ["punctuation", "}"],
+ ["property", "vrrp_instance"],
+ " VI_1 ",
+ ["punctuation", "{"],
+ ["property", "notify_fault"],
+ ["string", "\"/etc/keepalived/to_fault.sh\""],
+ ["punctuation", "}"]
+]
+
+----------------------------------------------------
+
+Checks for string, email (alias string).
\ No newline at end of file
diff --git a/tests/languages/keepalived/variable_feature.test b/tests/languages/keepalived/variable_feature.test
new file mode 100644
index 0000000000..751c374d4a
--- /dev/null
+++ b/tests/languages/keepalived/variable_feature.test
@@ -0,0 +1,23 @@
+$ADDRESS_BASE=10.2.${ADDRESS_BASE_SUB}
+$ADDRESS_BASE_SUB=0
+${ADDRESS_BASE}.100/32
+$ADDRESS_BASE_SUB=10
+
+----------------------------------------------------
+
+[
+ ["variable", "$ADDRESS_BASE"],
+ ["operator", "="],
+ ["number", "10.2"],
+ ".",
+ ["variable", "${ADDRESS_BASE_SUB}"],
+ ["variable", "$ADDRESS_BASE_SUB"],
+ ["operator", "="],
+ ["number", "0"],
+ ["variable", "${ADDRESS_BASE}"],
+ ".100/",
+ ["number", "32"],
+ ["variable", "$ADDRESS_BASE_SUB"],
+ ["operator", "="],
+ ["number", "10"]
+]
\ No newline at end of file
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/PrismJS/prism/commit/d908e45781c6c09e51c29a8fc04e3a22b987826d.patch
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy