<?xml version="1.0" encoding="UTF-8"?> <language id="conkyrc" _name="Conky" version="2.0" _section="Others"> <metadata> <!-- This syntax highlighting will apply for any file with the sequence "conky" in the file name (or extension), I recommend to use you_config_name.conky for config files or alternatively conky_your_config_name Unfortunately this will also trigger the syntax highlighting for this document, you can always manually set this one back to XML. If you have a favourite custom format you can change the globs property to your personal preference. --> <property name="globs">*conky*</property> <property name="block-comment-start">--[[</property> <property name="block-comment-end">]]</property> </metadata> <styles> <style id="config-keyword" _name="Config keywords" map-to="def:keyword"/> <style id="text-keyword" _name="Text keywords" map-to="def:type"/> <style id="comment" _name="Comment" map-to="def:comment"/> <style id="escaped-char" _name="Escaped Character" map-to="def:special-char"/> <style id="path" _name="Paths and URLs" map-to="def:string"/> <style id="boolean" _name="Boolean" map-to="def:boolean"/> <style id="argument" _name="Arguments" map-to="def:preprocessor"/> <style id="brackets" _name="Text Variable Brackets ${ ... }" map-to="def:identifier"/> <style id="decimal" _name="Decimal" map-to="def:decimal"/> </styles> <definitions> <!-- ======================================================================================= --> <!-- Keep in mind gedit does not like < and >, use < and > instead! --> <!-- Use `ref="id:*"` to include all children of `id` instead of `id` itself --> <!-- ========================== Container contexts and structure =========================== --> <!-- "root structure" this is where it all begins --> <context id="conkyrc" class="no-spell-check"> <include> <!-- Generic global stuff --> <!-- Comments --> <context ref="config-block-comment"/> <context ref="config-line-comment"/> <!-- end: Comments --> <!-- The settings block --> <context> <start>(?:(conky)\.(config)(?:\s|\n)*(=)(?:\s|\n)*(\{))</start> <end>\}</end> <include> <!-- Keyword mark highlighter --> <context sub-pattern="1" where="start" style-ref="config-keyword"/> <context sub-pattern="2" where="start" style-ref="text-keyword"/> <!-- end: Keyword mark highlighter --> <!-- Equals highlighter --> <context sub-pattern="3" where="start" style-ref="brackets"/> <!-- end: Equals highlighter --> <!-- Brackets highlighter --> <context sub-pattern="4" where="start" style-ref="brackets"/> <context sub-pattern="0" where="end" style-ref="brackets"/> <!-- end: Brackets highlighter --> <!-- Comments --> <context ref="config-block-comment"/> <context ref="config-line-comment"/> <!-- end: Comments --> <!-- key=val pair --> <context ref="config-option"/> <!-- end: key=val --> </include> </context> <!-- end: settings block --> <!-- The text block --> <context id="conky-text"> <start>(?:(conky)\.(text)(?:\s|\n)*(=)(?:\s|\n)*)</start> <end>(?=.|$)</end><!-- End at anything as we only have one child --> <include> <!-- Keyword mark highlighter --> <context sub-pattern="1" where="start" style-ref="config-keyword"/> <context sub-pattern="2" where="start" style-ref="text-keyword"/> <!-- end: Keyword mark highlighter --> <!-- Equals highlighter --> <context sub-pattern="3" where="start" style-ref="brackets"/> <!-- end: Equals highlighter --> <!-- Literal Sub-String --> <!-- This is just a literal string, really --> <context ref="lua-lit-string"/> </include> </context> <!-- end: Text block --> </include> </context> <!-- end: root context --> <!-- ================================== Import groups ================================== --> <!-- Container for generic includes --> <!--<context id="generic-container"> <include> </include> </context>--> <!-- end: Generic container --> <!-- ======================== Component contexts and structure ========================= --> <!-- Block comment, lua syntax --> <!-- Note: this will only highlight block comments outside the conky.text section --> <context id="config-block-comment" style-ref="comment" class="comment" class-disabled="no-spell-check"> <start>--\[(=*)\[</start><end>]\%{1@start}]</end> <include> <context ref="def:in-comment"/> </include> </context> <!-- end: Block comment, lua syntax --> <!-- Line comment, lua syntax --> <!-- Note: this will only highlight line comments outside the conky.text section --> <context id="config-line-comment" style-ref="comment" class-disabled="no-spell-check"> <start>\-\-</start><end>$</end> </context> <!-- end: Line comment, lua syntax --> <!-- Line comment, conky text syntax --> <!-- Note: this will only highlight line comments **inside** the conky.text section --> <context id="text-comment" style-ref="comment" class-disabled="no-spell-check"> <start>#</start><end>$</end> </context> <!-- end: Line comment, conky syntax--> <!-- String --> <context id="lua-string" style-ref="argument" style-inside="true" end-at-line-end="true" class="string"> <start>('|")</start><end>\%{0@start}</end> <include> <!-- Quote mark highlighter --> <context sub-pattern="0" where="start" style-ref="brackets"/> <context sub-pattern="0" where="end" style-ref="brackets"/> <!-- end: Quote mark highlighter --> <!-- Known patterns --> <!-- Escaped Char (also prevents the context ending prematurely) --> <context ref="lua-escape"/> <context ref="path"/> <context ref="hex-colors"/> <context ref="predefined-colors"/> <!-- end: Known patterns --> </include> </context> <!-- end: String value --> <!-- Literal string --> <context id="lua-lit-string" once-only="true"> <start>\[\[</start><end>\]\]</end> <include> <!-- Quote mark highlighter --> <context sub-pattern="0" where="start" style-ref="brackets"/> <context sub-pattern="0" where="end" style-ref="brackets"/> <!-- end: Quote mark highlighter --> <!-- Literal Sub-String --> <!-- We use this to stop premature end of parent --> <context> <start>\[\[</start><end>\]\]</end> <!-- Recursive --> <include><context ref="lua-lit-string:*"/></include> </context> <!-- end: Literal Sub-String --> <!-- Stuff specific to literal strings (e.g. templates and conky.text) --> <!-- TODO: Find a clean way to separate template and text lit-strings --> <context ref="text-escape"/> <context ref="template-escape"/> <context ref="text-comment"/> <context ref="bracket-var"/> <context ref="text-var"/> </include> </context> <!-- end: Literal string --> <!-- Escaped char --> <!-- conky.text escapes --> <context id="text-escape" style-ref="escaped-char"> <!-- NOTE: Conky doesn't currently escape double backslash --> <match>\\(?:#|$)</match> </context> <!-- template definition escapes --> <context id="template-escape" style-ref="escaped-char"> <match>\\[n\\ 0-9]</match> </context> <!-- lua string escapes --> <context id="lua-escape" style-ref="escaped-char"> <match>\\[abfnrtv\\"'\[\]]</match> </context> <!-- end: Escaped char --> <!-- File paths and URLs, starting with https://, http://, ~/ or / --> <context id="path" style-ref="path" class="string"> <match>(?<=\'|\ )(?:\~\/|\/|htt(?:p|ps)\:\/\/){1}[^\s\}\']*</match> </context> <!-- end: File paths and URLs --> <!-- Custom colors (hex) --> <context id="hex-colors" style-ref="decimal"> <match>(?:[\da-fA-F]{6})</match> </context> <!-- end: Custom colors --> <!-- Predefined colors --> <!-- Colors parsed by `XParsecolor()` (see /usr/share/X11/rgb.txt (or possibly /usr/lib)) --> <context id="predefined-colors" style-ref="decimal"> <keyword>red</keyword> <keyword>green</keyword> <keyword>yellow</keyword> <keyword>blue</keyword> <keyword>magenta</keyword> <keyword>cyan</keyword> <keyword>black</keyword> <keyword>white</keyword> </context> <!-- end: Predefined colors --> <!-- Numbers --> <context id="number" style-ref="decimal"> <match>(?<=[\ \=]|\dx)([\+\-]{0,1}\d+)([\.\,]{1}\d+)?</match> </context> <!-- end: Numbers --> <!-- Boolean values --> <context id="boolean" style-ref="boolean"> <keyword>false</keyword> <keyword>true</keyword> <keyword>yes</keyword> <keyword>no</keyword> </context> <!-- end: Boolean values --> <!-- ======================================================================================= --> <!-- key=val pair --> <context id="config-option"> <start>[A-Za-z0-9_]+</start> <!-- ended by value --> <include> <!-- Keyword highlight --> <context sub-pattern="0" where="start" style-ref="config-keyword"/> <!-- end: Keyword highlight --> <!-- value --> <context end-parent="true"> <start>=</start><end>(?:,|(?=\}))</end> <include> <!-- Equals highlight --> <context sub-pattern="0" where="start" style-ref="brackets"/> <!-- end: Equals highlight --> <!-- Value types --> <context ref="lua-string"/> <context ref="lua-lit-string"/> <context ref="number"/> <context ref="boolean"/> <!-- end: Value types --> <!-- Comments --> <context ref="config-block-comment"/> <context ref="config-line-comment"/> <!-- end: Comments --> </include> </context> <!-- end: value --> <!-- Comments --> <context ref="config-block-comment"/> <context ref="config-line-comment"/> <!-- end: Comments --> </include> </context> <!-- end: key=val --> <!-- TextVariables --> <!-- Bracket style --> <context id="bracket-var" style-ref="argument" style-inside="true"> <start>(?:(\$\{)(?:\s|\n|$)*([a-z][a-z0-9_]*))</start> <end>\}</end> <include> <!-- Brackets highlighter --> <context sub-pattern="1" where="start" style-ref="brackets"/> <context sub-pattern="0" where="end" style-ref="brackets"/> <!-- end: Brackets highlighter --> <!-- Variable/keyword highlighter --> <context sub-pattern="2" where="start" style-ref="text-keyword"/> <!-- Special patterns --> <context ref="number"/> <context ref="boolean"/> <context ref="path"/> <context ref="hex-colors"/> <context ref="predefined-colors"/> <!-- end: Special patterns --> <!-- Inherit from lit-String --> <context ref="lua-lit-string:*"/> </include> </context> <!-- non-bracket style --> <context id="text-var" style-ref="text-keyword" style-inside="true"> <start>(?:(\$)(?!\{))</start> <end>(?:(?=[^A-Za-z0-9_])|$)</end> <include> <!-- Dollar highlighter --> <context sub-pattern="1" where="start" style-ref="brackets"/> <!-- end: Dollar highlighter --> </include> </context> <!-- end: TextVariables --> </definitions> </language>