File indexing completed on 2024-05-19 04:03:43
0001 <?xml version="1.0" encoding="UTF-8"?> 0002 <!DOCTYPE language 0003 [ 0004 <!ENTITY varname "(([+!?](?!=))?[^:#=\s+!?]*)++"> 0005 ]> 0006 <!-- Makefile syntaxfile v0.9 by Per Wigren <wigren@home.se> --> 0007 <!-- Modified by Joseph Wenninger <jowenn@kde.org> --> 0008 <!-- Modified by Rui Santana <santana.rui@gmail.com> --> 0009 <!-- v2.0 by Andreas Nordal <andreas.nordal@gmail.com> --> 0010 <!-- small priority to allow for example Makefile.cpp to be detected as cpp file --> 0011 <!-- v2.1 by Alex Turbov <i.zaufi@gmail.com> 0012 improve comments handling --> 0013 <!-- v4 by Alex Richardson <arichardson.kde@gmail.com> 0014 added bmake support --> 0015 <!-- v10 by Peter J. Mello <admin@petermello.net> 0016 Add recognition of POSIX 2013 '::=' operator for variable assignment --> 0017 <language name="Makefile" section="Other" 0018 version="17" kateversion="5.79" 0019 extensions="GNUmakefile;Makefile;makefile;GNUmakefile.*;Makefile.*;makefile.*;*.mk" 0020 mimetype="text/x-makefile" priority="11" 0021 author="Per Wigren (wigren@home.se)" license=""> 0022 0023 <!-- https://www.gnu.org/software/make/manual/make.pdf --> 0024 <!-- https://www.gnu.org/software/make/manual/html_node/Quick-Reference.html --> 0025 0026 <highlighting> 0027 <list name="keywords"> 0028 <item>include</item> 0029 <item>-include</item> 0030 <item>sinclude</item> 0031 <item>override</item> 0032 <item>define</item> 0033 <item>undefine</item> 0034 <item>endef</item> 0035 <item>export</item> 0036 <item>unexport</item> 0037 <item>private</item> 0038 <item>vpath</item> 0039 </list> 0040 <list name="special_keywords"> 0041 <item>export</item> 0042 <item>unexport</item> 0043 <item>override</item> 0044 <item>private</item> 0045 </list> 0046 <!-- https://www.gnu.org/software/make/manual/html_node/Conditional-Syntax.html --> 0047 <list name="gmake_if_keywords"> 0048 <item>ifeq</item> 0049 <item>ifneq</item> 0050 <item>ifdef</item> 0051 <item>ifndef</item> 0052 </list> 0053 <list name="gmake_else_keywords"><item>else</item></list> 0054 <list name="gmake_endif_keywords"><item>endif</item></list> 0055 <!-- bmake statements: https://www.freebsd.org/cgi/man.cgi?make(1)#INCLUDE_STATEMENTS,_CONDITIONALS_AND_FOR_LOOPS --> 0056 <list name="bmake_if_keywords"> 0057 <item>.if</item> 0058 <item>.ifdef</item> 0059 <item>.ifndef</item> 0060 <item>.ifmake</item> 0061 <item>.ifnmake</item> 0062 </list> 0063 <list name="bmake_else_keywords"> 0064 <item>.elif</item> 0065 <item>.elifdef</item> 0066 <item>.elifndef</item> 0067 <item>.elifmake</item> 0068 <item>.elifnmake</item> 0069 <item>.else</item> <!-- TODO: anything following .else should be highlighted as an error --> 0070 </list> 0071 <list name="bmake_endif_keywords"><item>.endif</item></list> 0072 0073 <list name="bmake_expressions"> 0074 <item>defined</item> 0075 <item>empty</item> 0076 <item>exists</item> 0077 <item>target</item> 0078 <item>commands</item> 0079 </list> 0080 0081 <list name="bmake_include_stmt"> 0082 <item>.include</item> 0083 <item>.-include</item> 0084 <item>.sinclude</item> 0085 <!-- For compat bmake also handles include but this is already highlighted. <item>include</item> --> 0086 </list> 0087 <list name="bmake_message_stmt"> 0088 <item>.info</item> 0089 <item>.warning</item> 0090 <item>.error</item> 0091 </list> 0092 <!-- Use single element list here so that .for/.endfor also shows up in code completion --> 0093 <list name="bmake_for_stmt"><item>.for</item></list> 0094 <list name="bmake_endfor_stmt"><item>.endfor</item></list> 0095 0096 <!-- https://www.freebsd.org/cgi/man.cgi?make(1)#SPECIAL_TARGETS --> 0097 <list name="bmake_special_targets"> 0098 <item>.BEGIN</item> 0099 <item>.DEFAULT</item> 0100 <item>.END</item> 0101 <item>.ERROR</item> 0102 <item>.IGNORE</item> 0103 <item>.INTERRUPT</item> 0104 <item>.MAIN</item> 0105 <item>.MAKEFLAGS</item> 0106 <item>.NOPATH</item> 0107 <item>.NOTPARALLEL</item> 0108 <item>.NO_PARALLEL</item> 0109 <item>.OBJDIR</item> 0110 <item>.ORDER</item> 0111 <item>.PATH</item> 0112 <item>.PHONY</item> 0113 <item>.PRECIOUS</item> 0114 <item>.SHELL</item> 0115 <item>.SILENT</item> 0116 <item>.STALE</item> 0117 <item>.SUFFIXES</item> 0118 </list> 0119 <!-- https://www.freebsd.org/cgi/man.cgi?make(1)#SPECIAL_SOURCES_(ATTRIBUTES) --> 0120 <list name="bmake_special_sources"> 0121 <item>.EXEC</item> 0122 <item>.IGNORE</item> 0123 <item>.MADE</item> 0124 <item>.MAKE</item> 0125 <item>.META</item> 0126 <item>.NOMETA</item> 0127 <item>.NOMETA_CMP</item> 0128 <item>.NOPATH</item> 0129 <item>.NOTMAIN</item> 0130 <item>.OPTIONAL</item> 0131 <item>.PHONY</item> 0132 <item>.PRECIOUS</item> 0133 <item>.RECURSIVE</item> 0134 <item>.SILENT</item> 0135 <item>.USE</item> 0136 <item>.USEBEFORE</item> 0137 <item>.WAIT</item> 0138 </list> 0139 0140 <list name="bmake_other_stmts"> 0141 <item>.unexport-env</item> 0142 <item>.unexport</item> 0143 <item>.undef</item> 0144 <item>.export-env</item> 0145 <item>.export</item> 0146 </list> 0147 0148 <list name = "functions"> 0149 <item>call</item> 0150 <item>subst</item> 0151 <item>patsubst</item> 0152 <item>strip</item> 0153 <item>findstring</item> 0154 <item>filter</item> 0155 <item>filter-out</item> 0156 <item>sort</item> 0157 <item>word</item> 0158 <item>wordlist</item> 0159 <item>words</item> 0160 <item>firstword</item> 0161 <item>lastword</item> 0162 <item>dir</item> 0163 <item>notdir</item> 0164 <item>suffix</item> 0165 <item>basename</item> 0166 <item>addsuffix</item> 0167 <item>addprefix</item> 0168 <item>join</item> 0169 <item>wildcard</item> 0170 <item>realpath</item> 0171 <item>abspath</item> 0172 <item>if</item> 0173 <item>or</item> 0174 <item>and</item> 0175 <item>foreach</item> 0176 <item>value</item> 0177 <item>eval</item> 0178 <item>origin</item> 0179 <item>flavor</item> 0180 <item>shell</item> 0181 <item>error</item> 0182 <item>warning</item> 0183 <item>info</item> 0184 </list> 0185 <contexts> 0186 <context name="normal" attribute="Normal" lineEndContext="#stay" fallthroughContext="strings_and_vars"> 0187 <DetectSpaces/> 0188 <DetectChar attribute="Comment" context="Comment" char="#"/> 0189 0190 <!-- first because a variable can have the same name as a keyword --> 0191 <RegExpr attribute="Variable" context="assign" String="&varname;(?=\s*([+!?]|::?:?)?=)" firstNonSpace="true"/> 0192 0193 <keyword attribute="ControlFlow" String="bmake_if_keywords" context="bmake_conditional" beginRegion="bmake_if" firstNonSpace="true"/> 0194 <!--TODO: trailing non-space after .else should be highlighted as an error --> 0195 <keyword attribute="ControlFlow" String="bmake_else_keywords" context="bmake_conditional" endRegion="bmake_if" beginRegion="bmake_if" firstNonSpace="true"/> 0196 <keyword attribute="ControlFlow" String="bmake_endif_keywords" context="#stay" endRegion="bmake_if" firstNonSpace="true"/> 0197 0198 <keyword attribute="ControlFlow" String="gmake_if_keywords" context="strings_and_vars" beginRegion="gmake_if" firstNonSpace="true" weakDeliminator=":"/> 0199 <!--TODO: trailing non-space after else should be highlighted as an error --> 0200 <keyword attribute="ControlFlow" String="gmake_else_keywords" context="gmake_else" endRegion="gmake_if" beginRegion="gmake_if" firstNonSpace="true" weakDeliminator=":"/> 0201 <keyword attribute="ControlFlow" String="gmake_endif_keywords" context="#stay" endRegion="gmake_if" firstNonSpace="true" weakDeliminator=":"/> 0202 0203 <WordDetect attribute="Keyword" context="define" String="define" firstNonSpace="true" weakDeliminator=":"/> 0204 <WordDetect attribute="Keyword" context="override" String="override" firstNonSpace="true" weakDeliminator=":"/> 0205 <WordDetect attribute="Keyword" context="export" String="export" firstNonSpace="true" weakDeliminator=":"/> 0206 <WordDetect attribute="Keyword" context="export" String="unexport" firstNonSpace="true" weakDeliminator=":"/> 0207 <WordDetect attribute="Keyword" context="export" String="undefine" firstNonSpace="true" weakDeliminator=":"/> 0208 <keyword attribute="Keyword" context="strings_and_vars" String="keywords" firstNonSpace="true" weakDeliminator=":"/> 0209 0210 <keyword attribute="Keyword" context="bmake_other_stmts" String="bmake_other_stmts" firstNonSpace="true"/> 0211 <keyword attribute="SpecialTarget" context="bmake_special_target" String="bmake_special_targets" firstNonSpace="true"/> 0212 <RegExpr attribute="SpecialTarget" context="prereq" String="\.PATH\.[^:]*:" firstNonSpace="true"/> 0213 <keyword attribute="Keyword" context="bmake_include" String="bmake_include_stmt" firstNonSpace="true"/> 0214 <keyword attribute="Keyword" context="bmake_message" String="bmake_message_stmt" firstNonSpace="true"/> 0215 <keyword attribute="Keyword" context="bmake_for_loop" String="bmake_for_stmt" firstNonSpace="true" beginRegion="for"/> 0216 <keyword attribute="Keyword" context="strings_and_vars" String="bmake_endfor_stmt" firstNonSpace="true" endRegion="for"/> 0217 0218 <RegExpr attribute="Section" context="prereq" String="^\.[^.][^:]*:" column="0"/> 0219 <RegExpr attribute="Target" context="target" String="^([^:\\&]|\\([:\\#&]|(?=[^:\\#&])))*+(?=[^:]*+:|\\$)" column="0"/> 0220 0221 <AnyChar attribute="Operator" context="silent" String="@-" firstNonSpace="1"/> 0222 <DetectIdentifier/> 0223 </context> 0224 0225 <context name="target" attribute="Target" lineEndContext="#pop"> 0226 <StringDetect attribute="TargetSeparator" context="#pop!prereq" String="::"/> 0227 <DetectChar attribute="TargetSeparator" context="#pop!prereq" char=":"/> 0228 <DetectChar attribute="Operator" context="dollar" char="$"/> 0229 <LineContinue attribute="Operator" context="#pop"/> 0230 <StringDetect attribute="TargetSeparator" context="#pop!prereq" String="&::"/> 0231 <StringDetect attribute="TargetSeparator" context="#pop!prereq" String="&:"/> 0232 <StringDetect attribute="Target" String="\:"/> 0233 <DetectIdentifier attribute="Target"/> 0234 </context> 0235 0236 <context name="strings_and_vars" attribute="Normal" lineEndContext="#pop"> 0237 <DetectChar attribute="Operator" context="dollar" char="$"/> 0238 <DetectChar attribute="String" context="string"" char="""/> 0239 <DetectChar attribute="String" context="string'" char="'"/> 0240 <DetectChar attribute="Comment" context="Comment" char="#"/> 0241 </context> 0242 0243 <context name="gmake_else" attribute="Normal" lineEndContext="#pop"> 0244 <DetectSpaces attribute="Normal"/> 0245 <keyword attribute="ControlFlow" String="gmake_if_keywords" context="#stay"/> 0246 <IncludeRules context="strings_and_vars"/> 0247 <Detect2Chars attribute="Special" context="#stay" char="\" char1="#"/> 0248 <Detect2Chars attribute="Special" context="#stay" char="\" char1="\"/> 0249 <!-- NOTE: Allow highlighting any variable name (see bug #417379), for example: 0250 else ifdef foo 0251 else ifeq (bar, foo) 0252 --> 0253 <DetectIdentifier attribute="Normal"/> 0254 </context> 0255 0256 <context name="bmake_include" attribute="Normal" lineEndContext="#pop"> 0257 <DetectSpaces /> 0258 <RangeDetect char="<" char1=">" context="#stay" attribute="Include" /> 0259 <RangeDetect char=""" char1=""" context="#stay" attribute="Include" /> 0260 </context> 0261 0262 0263 <context name="bmake_conditional" attribute="Normal" lineEndContext="#pop"> 0264 <DetectSpaces/> 0265 <IncludeRules context="strings_and_vars"/> 0266 <keyword attribute="Builtin" context="bmake_expression" String="bmake_expressions"/> 0267 <Detect2Chars attribute="RealOperator" context="#stay" char="&" char1="&"/> 0268 <Detect2Chars attribute="RealOperator" context="#stay" char="|" char1="|"/> 0269 <Detect2Chars attribute="RealOperator" context="#stay" char="!" char1="="/> 0270 <Detect2Chars attribute="RealOperator" context="#stay" char="=" char1="="/> 0271 <DetectChar attribute="RealOperator" context="#stay" char="!"/> 0272 <HlCHex attribute="Number" context="#stay"/> 0273 <Int attribute="Number" context="#stay"/> 0274 <DetectIdentifier attribute="Variable" context="#stay"/> 0275 <LineContinue attribute="Operator" context="#stay"/> 0276 </context> 0277 0278 <context name="bmake_for_loop" attribute="Variable" lineEndContext="#pop"> 0279 <DetectSpaces/> 0280 <IncludeRules context="strings_and_vars"/> 0281 <WordDetect attribute="RealOperator" context="#stay" String="in" /> 0282 </context> 0283 0284 <context name="bmake_other_stmts" attribute="Variable" lineEndContext="#pop"> 0285 <DetectSpaces/> 0286 <IncludeRules context="strings_and_vars"/> 0287 </context> 0288 0289 <context name="bmake_expression" attribute="Variable" lineEndContext="#pop"> 0290 <DetectSpaces/> 0291 <IncludeRules context="strings_and_vars"/> 0292 <DetectChar attribute="Normal" context="#stay" char="("/> 0293 <DetectChar attribute="Normal" context="#pop" char=")"/> 0294 <DetectIdentifier attribute="Variable"/> 0295 </context> 0296 0297 <context name="bmake_special_target" attribute="Error" lineEndContext="rule"> 0298 <!-- anything but spaces before the : should be an error --> 0299 <DetectSpaces attribute="Normal" /> 0300 <DetectChar attribute="SpecialTarget" context="#pop!prereq" char=":"/> 0301 </context> 0302 0303 <context name="bmake_message" attribute="String" lineEndContext="#pop"> 0304 <DetectChar attribute="Operator" context="dollar" char="$"/> 0305 </context> 0306 0307 <context name="prereq" attribute="Prereq" lineEndContext="rule" fallthroughContext="#pop!prereq2"> 0308 <DetectSpaces/> 0309 <keyword attribute="Keyword" context="export" String="special_keywords" weakDeliminator=".@,+%-/^*?="/> 0310 <RegExpr attribute="Variable" context="assign" String="[a-zA-Z_]+(?=\s*([+!?]|::?:?)?=)|"/> 0311 </context> 0312 <context name="prereq2" attribute="Prereq" lineEndContext="rule"> 0313 <DetectSpaces/> 0314 <keyword attribute="SpecialPrereq" context="#stay" String="bmake_special_sources"/> 0315 <DetectIdentifier/> 0316 <LineContinue attribute="Operator" context="#stay"/> 0317 <DetectChar attribute="Operator" context="dollar" char="$"/> 0318 <Detect2Chars attribute="Special" context="#stay" char="\" char1="#"/> 0319 <Detect2Chars attribute="Special" context="#stay" char="\" char1="\"/> 0320 <DetectChar attribute="Comment" context="Comment" char="#"/> 0321 <DetectChar attribute="Operator" context="inline-rule" char=";"/> 0322 </context> 0323 0324 <context name="inline-rule" attribute="Normal" lineEndContext="#pop!rule" fallthroughContext="#pop!inline-rule-cmd"> 0325 <DetectSpaces/> 0326 <LineContinue attribute="Operator" context="#stay"/> 0327 <AnyChar attribute="Operator" context="silent" String="@-"/> 0328 </context> 0329 <context name="inline-rule-cmd" attribute="Normal" lineEndContext="#pop!rule"> 0330 <DetectSpaces/> 0331 <DetectIdentifier/> 0332 <DetectChar attribute="String" context="string"" char="""/> 0333 <DetectChar attribute="String" context="string'" char="'"/> 0334 <DetectChar attribute="Operator" context="dollar" char="$"/> 0335 <Detect2Chars attribute="Special" context="#stay" char="\" char1="#"/> 0336 <Detect2Chars attribute="Special" context="#stay" char="\" char1="\"/> 0337 <AnyChar attribute="Operator" context="silent" String="@-" firstNonSpace="1"/> 0338 <DetectChar attribute="Comment" context="Comment" char="#"/> 0339 <LineContinue attribute="Operator" context="#stay"/> 0340 </context> 0341 0342 <context name="rule" attribute="Normal" lineEndContext="#stay"> 0343 <DetectChar char="	" column="0"/> 0344 <DetectChar attribute="Comment" context="Comment" char="#"/> 0345 <!-- pop if there is a leading non-tab, 0346 and in particular, mark leading spaces as errors --> 0347 <RegExpr attribute="Error" context="#pop#pop#pop" String="^ ++(?!#)" column="0"/> 0348 <RegExpr context="#pop#pop#pop" String="^(?=\s*#)|^[^#\t]" lookAhead="1" column="0"/> 0349 <DetectSpaces/> 0350 <DetectIdentifier/> 0351 <DetectChar attribute="String" context="string"" char="""/> 0352 <DetectChar attribute="String" context="string'" char="'"/> 0353 <DetectChar attribute="Operator" context="dollar" char="$"/> 0354 <LineContinue attribute="Operator" context="rule_continuation"/> 0355 <Detect2Chars attribute="Special" context="#stay" char="\" char1="#"/> 0356 <Detect2Chars attribute="Special" context="#stay" char="\" char1="\"/> 0357 <AnyChar attribute="Operator" context="silent" String="@-" firstNonSpace="1"/> 0358 </context> 0359 <context name="rule_continuation" attribute="Normal" lineEndContext="#stay" fallthroughContext="#pop"> 0360 <DetectSpaces context="#pop"/> 0361 </context> 0362 0363 <context name="silent" attribute="Silent" lineEndContext="#pop"> 0364 <LineContinue attribute="Operator" context="#stay"/> 0365 <DetectSpaces/> 0366 <DetectIdentifier/> 0367 <DetectChar attribute="String" context="string"" char="""/> 0368 <DetectChar attribute="String" context="string'" char="'"/> 0369 <DetectChar attribute="Operator" context="dollar" char="$"/> 0370 <Detect2Chars attribute="Special" context="#stay" char="\" char1="#"/> 0371 <Detect2Chars attribute="Special" context="#stay" char="\" char1="\"/> 0372 <DetectChar attribute="Comment" context="Comment" char="#"/> 0373 </context> 0374 0375 <context name="string"" attribute="String" lineEndContext="#pop"> 0376 <LineContinue attribute="Operator" context="#stay"/> 0377 <DetectChar attribute="String" context="#pop" char="""/> 0378 <DetectChar attribute="Operator" context="dollar" char="$"/> 0379 </context> 0380 0381 <context name="string'" attribute="String" lineEndContext="#pop"> 0382 <LineContinue attribute="String" context="#stay"/> 0383 <DetectChar attribute="String" context="#pop" char="'"/> 0384 <DetectChar attribute="Operator" context="dollar" char="$"/> 0385 </context> 0386 0387 <context name="assign" attribute="Operator" lineEndContext="#pop"> 0388 <DetectSpaces attribute="Normal"/> 0389 <DetectChar attribute="Operator" context="value" char="="/> 0390 </context> 0391 0392 <context name="value" attribute="String" lineEndContext="#pop#pop"> 0393 <LineContinue attribute="Operator"/> 0394 <DetectChar attribute="Operator" context="dollar" char="$"/> 0395 <RegExpr attribute="Special" context="#pop#pop" String="@[-_\d\w]*@"/> 0396 <Detect2Chars attribute="String" char="\" char1="#"/> 0397 <DetectChar attribute="Comment" context="#pop#pop!Comment" char="#"/> 0398 <RegExpr attribute="String" String="[^$@\\#]+"/> 0399 </context> 0400 0401 <context name="dollar" attribute="Operator" lineEndContext="#pop"> 0402 <DetectChar attribute="Operator" context="call(" char="("/> 0403 <DetectChar attribute="Operator" context="call{" char="{"/> 0404 <RegExpr attribute="Operator" context="#pop" String="."/> 0405 </context> 0406 0407 <context name="call(" attribute="Variable" lineEndContext="#stay" fallthroughContext="callVar("> 0408 <keyword attribute="Keyword" context="callFunc(" String="functions"/> 0409 </context> 0410 0411 <context name="call{" attribute="Variable" lineEndContext="#stay" fallthroughContext="callVar{"> 0412 <keyword attribute="Keyword" context="callFunc{" String="functions"/> 0413 </context> 0414 0415 <context name="callVar(" attribute="Variable" lineEndContext="#stay"> 0416 <DetectChar attribute="Operator" char=")" context="#pop#pop#pop"/> 0417 <DetectChar attribute="Operator" context="dollar" char="$"/> 0418 <DetectSpaces attribute="Error" context="#stay"/> 0419 <DetectChar attribute="RealOperator" context="SubstitutionRefs" char=":"/> 0420 <AnyChar attribute="Error" context="#stay" String="=#"/> 0421 </context> 0422 0423 <context name="callVar{" attribute="Variable" lineEndContext="#stay"> 0424 <DetectChar attribute="Operator" char="}" context="#pop#pop#pop"/> 0425 <DetectChar attribute="Operator" context="dollar" char="$"/> 0426 <DetectSpaces attribute="Error" context="#stay"/> 0427 <!-- Handle bmake Variable modifiers: ${variable[:modifier[:...]]} --> 0428 <Detect2Chars context="#stay" char="\" char1=":"/> 0429 <!-- other modifiers --> 0430 <DetectChar attribute="RealOperator" context="bmake_var_modifier" char=":"/> 0431 <AnyChar attribute="Error" context="#stay" String="=#"/> 0432 </context> 0433 0434 <context name="override" attribute="Normal" lineEndContext="#pop" fallthroughContext="#pop!export"> 0435 <DetectSpaces/> 0436 <WordDetect attribute="Keyword" context="#pop!define" String="define"/> 0437 <WordDetect attribute="Keyword" context="#pop!export" String="undefine"/> 0438 </context> 0439 0440 <context name="define" attribute="Normal" lineEndContext="define_body"> 0441 <DetectSpaces/> 0442 <DetectChar attribute="Comment" context="Comment" char="#"/> 0443 <RegExpr attribute="Variable" context="define_op" String="&varname;"/> 0444 </context> 0445 <context name="define_op" attribute="Operator" lineEndContext="#pop!define_body"> 0446 <DetectSpaces attribute="Normal"/> 0447 <DetectChar attribute="Comment" context="Comment" char="#"/> 0448 </context> 0449 <context name="define_body" attribute="String" lineEndContext="#stay"> 0450 <DetectSpaces attribute="String"/> 0451 <WordDetect attribute="Keyword" context="#pop#pop" String="endef" firstNonSpace="true"/> 0452 <DetectIdentifier attribute="String"/> 0453 <LineContinue attribute="Operator"/> 0454 <DetectChar attribute="Operator" context="dollar" char="$"/> 0455 <RegExpr attribute="Special" String="@[-_\d\w]*@"/> 0456 </context> 0457 0458 <context name="export" attribute="Variable" lineEndContext="#pop" fallthroughContext="#pop!assign"> 0459 <DetectSpaces/> 0460 <DetectIdentifier/> 0461 </context> 0462 0463 <context name="bmake_var_modifier_arg" attribute="VarModifier" lineEndContext="#pop"> 0464 <DetectChar attribute="Operator" context="dollar" char="$"/> 0465 <Detect2Chars context="#stay" char="\" char1="}"/> 0466 <DetectChar attribute="Operator" char="}" context="#pop#pop#pop#pop"/> 0467 <Detect2Chars context="#stay" char="\" char1=":"/> 0468 <DetectChar attribute="RealOperator" context="#pop!bmake_var_modifier" char=":"/> 0469 </context> 0470 0471 <!-- TODO: once all modifiers are properly handled change fallthroughContext to "expect}" --> 0472 <context name="bmake_var_modifier" attribute="VarModifier" lineEndContext="#pop" fallthroughContext="#pop!bmake_var_modifier_arg"> 0473 <DetectChar attribute="Operator" context="dollar" char="$"/> 0474 0475 <!-- 0476 TODO :?true_string:false_string 0477 TODO :old_string=new_string This is the AT&T System V UNIX style variable substitution. 0478 TODO :@temp@string@ This is the loop expansion mechanism from the OSF Development Environment (ODE) make. 0479 TODO :!cmd! The output of running cmd is the value. 0480 TODO :[range] 0481 --> 0482 <!-- Modifiers without arguments:--> 0483 <!-- :Ox Randomize words in variable. --> 0484 <Detect2Chars attribute="Builtin" context="#pop!expect}" char="O" char1="x"/> 0485 <!-- 0486 :E Replaces each word in the variable with its suffix. 0487 :H Replaces each word in the variable with everything but the last component. 0488 :O Order every word in variable alphabetically. 0489 :Q Quotes every shell meta-character in the variable 0490 :R Replaces each word in the variable with everything but its suffix. 0491 :T Replaces each word in the variable with its last component. 0492 :u Remove adjacent duplicate words (like uniq(1)). 0493 :L The name of the variable is the value. 0494 :P The path of the node which has the same name as the variable is the value. 0495 --> 0496 <AnyChar attribute="Builtin" context="#pop!expect}" String="EHOQRTuLP"/> 0497 <!-- :sh If the variable is non-empty it is run as a command and the output becomes the new value. --> 0498 <Detect2Chars attribute="Builtin" context="#pop!expect}" char="s" char1="h"/> 0499 <!-- :tA Attempt to convert variable to an absolute path using realpath(3),--> 0500 <Detect2Chars attribute="Builtin" context="#pop!expect}" char="t" char1="A"/> 0501 <!-- :tl Converts variable to lower-case letters.--> 0502 <Detect2Chars attribute="Builtin" context="#pop!expect}" char="t" char1="L"/> 0503 <!-- :gmtime The value is a format string for strftime(3), using the current gmtime(3). --> 0504 <StringDetect attribute="Builtin" String="gmtime" context="#pop!expect}" /> 0505 <!-- :hash Compute a 32bit hash of the value and encode it as hex digits. --> 0506 <StringDetect attribute="Builtin" String="hash" context="#pop!expect}" /> 0507 <!-- :localtime The value is a format string for strftime(3), using the current localtime(3). --> 0508 <StringDetect attribute="Builtin" String="localtime" context="#pop!expect}" /> 0509 <!--Now the modifiers with arguments:--> 0510 <!-- 0511 :Mpattern Select only those words that match pattern. 0512 :Npattern This is identical to `:M', but selects all words which do not match pattern. 0513 :Dnewval If the variable is defined newval is the value. 0514 :Unewval If the variable is undefined newval is the value. 0515 --> 0516 <!-- TODO: add new context to highligh old_string and new_string differently 0517 :S/old_string/new_string/[1gW] 0518 :C/pattern/replacement/[1gW] 0519 --> 0520 <AnyChar attribute="Builtin" context="#pop!bmake_var_modifier_arg" String="MNDUSC"/> 0521 <!-- ::=str The variable is assigned the value str after substitution. --> 0522 <Detect2Chars attribute="Builtin" context="#pop!bmake_var_modifier_arg" char=":" char1="="/> 0523 <!-- ::?=str As for ::= but only if the variable does not already have a value. --> 0524 <StringDetect attribute="Builtin" String=":?=" context="#pop!bmake_var_modifier_arg" /> 0525 <!-- ::+=str Append str to the variable. --> 0526 <StringDetect attribute="Builtin" String=":+=" context="#pop!bmake_var_modifier_arg" /> 0527 <!-- ::!=cmd Assign the output of cmd to the variable. --> 0528 <StringDetect attribute="Builtin" String=":!=" context="#pop!bmake_var_modifier_arg" /> 0529 <!-- :tu Converts variable to upper-case letters. --> 0530 <Detect2Chars attribute="Builtin" context="#pop!bmake_var_modifier_arg" char="t" char1="u"/> 0531 <!-- :tW Causes the value to be treated as a single word. See also `:[*]'. --> 0532 <Detect2Chars attribute="Builtin" context="#pop!bmake_var_modifier_arg" char="t" char1="W"/> 0533 <!-- :tw Causes the value to be treated as a sequence of words delimited by white space. See also `:[@]'.--> 0534 <Detect2Chars attribute="Builtin" context="#pop!bmake_var_modifier_arg" char="t" char1="w"/> 0535 <!-- :tsc Words in the variable are normally separated by a space on 0536 expansion. This modifier sets the separator to the character c. If 0537 c is omitted, then no separator is used. The common escapes 0538 (including octal numeric codes), work as expected. --> 0539 <Detect2Chars attribute="Builtin" context="#pop!bmake_var_modifier_arg" char="t" char1="s"/> 0540 0541 <IncludeRules context="bmake_var_modifier_arg"/> 0542 </context> 0543 0544 <context name="expect}" attribute="Error" lineEndContext="#pop#pop#pop#pop"> 0545 <Detect2Chars context="#stay" char="\" char1="}"/> 0546 <DetectChar attribute="Operator" char="}" context="#pop#pop#pop#pop"/> 0547 </context> 0548 0549 <context name="callFunc(" attribute="FuncParam" lineEndContext="#stay"> 0550 <DetectChar attribute="Operator" char=")" context="#pop#pop#pop"/> 0551 <DetectChar attribute="FuncParam" char="(" context="callFuncSub("/> 0552 <IncludeRules context="callFuncCommon"/> 0553 </context> 0554 <context name="callFuncSub(" attribute="FuncParam" lineEndContext="#stay"> 0555 <DetectChar attribute="FuncParam" char=")" context="#pop"/> 0556 <DetectChar attribute="FuncParam" char="(" context="callFuncSub("/> 0557 <IncludeRules context="callFuncCommon"/> 0558 </context> 0559 0560 <context name="callFunc{" attribute="FuncParam" lineEndContext="#stay"> 0561 <DetectChar attribute="Operator" char="}" context="#pop#pop#pop"/> 0562 <DetectChar attribute="FuncParam" char="{" context="callFuncSub{"/> 0563 <IncludeRules context="callFuncCommon"/> 0564 </context> 0565 <context name="callFuncSub{" attribute="FuncParam" lineEndContext="#stay"> 0566 <DetectChar attribute="FuncParam" char="}" context="#pop"/> 0567 <DetectChar attribute="FuncParam" char="{" context="callFuncSub{"/> 0568 <IncludeRules context="callFuncCommon"/> 0569 </context> 0570 0571 <context name="callFuncCommon" attribute="FuncParam" lineEndContext="#stay"> 0572 <DetectChar attribute="Operator" context="dollar" char="$"/> 0573 <DetectChar attribute="Keyword" context="#stay" char=","/> 0574 <DetectChar attribute="String" context="string"" char="""/> 0575 <DetectChar attribute="String" context="string'" char="'"/> 0576 </context> 0577 0578 <!-- $(var:pattern=replacement) --> 0579 <context name="SubstitutionRefs" attribute="VarModifier" lineEndContext="#stay"> 0580 <DetectChar attribute="RealOperator" context="#pop!SubstitutionRefsReplacement" char="="/> 0581 <IncludeRules context="SubstitutionRefsReplacement"/> 0582 </context> 0583 <context name="SubstitutionRefsReplacement" attribute="VarModifier" lineEndContext="#stay"> 0584 <DetectChar attribute="Operator" char=")" context="#pop#pop#pop#pop"/> 0585 <DetectChar attribute="Operator" context="dollar" char="$"/> 0586 </context> 0587 0588 <context attribute="Comment" lineEndContext="#pop" name="Comment"> 0589 <LineContinue attribute="Comment" context="#stay" /> 0590 <IncludeRules context="##Comments" /> 0591 </context> 0592 0593 </contexts> 0594 <itemDatas> 0595 <itemData name="Normal" defStyleNum="dsNormal" spellChecking="0"/> 0596 <itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="0"/> 0597 <itemData name="Comment" defStyleNum="dsComment"/> 0598 <itemData name="String" defStyleNum="dsString" spellChecking="0"/> 0599 <itemData name="Variable" defStyleNum="dsDataType" spellChecking="0"/> 0600 <itemData name="Target" defStyleNum="dsDecVal" spellChecking="0"/> 0601 <itemData name="Section" defStyleNum="dsOthers" spellChecking="0"/> 0602 <itemData name="Prereq" defStyleNum="dsDataType" spellChecking="0"/> 0603 <itemData name="FuncParam" defStyleNum="dsString" spellChecking="0"/> 0604 <itemData name="Operator" defStyleNum="dsChar" spellChecking="0"/> 0605 <itemData name="Silent" defStyleNum="dsFunction" spellChecking="0"/> 0606 <itemData name="Special" defStyleNum="dsFloat" spellChecking="0"/> 0607 <itemData name="Error" defStyleNum="dsError" spellChecking="0"/> 0608 <itemData name="Builtin" defStyleNum="dsBuiltIn" spellChecking="0"/> 0609 <itemData name="Number" defStyleNum="dsDecVal" spellChecking="0"/> 0610 <itemData name="Include" defStyleNum="dsImport" spellChecking="0"/> 0611 <itemData name="ControlFlow" defStyleNum="dsControlFlow" spellChecking="0"/> 0612 <itemData name="VarModifier" defStyleNum="dsSpecialString" spellChecking="0"/> 0613 <itemData name="RealOperator" defStyleNum="dsKeyword" spellChecking="0"/> 0614 <itemData name="SpecialTarget" defStyleNum="dsOthers" spellChecking="0" bold="1"/> 0615 <itemData name="SpecialPrereq" defStyleNum="dsDataType" spellChecking="0" bold="1"/> 0616 <itemData name="TargetSeparator" defStyleNum="dsDecVal" spellChecking="0"/> 0617 </itemDatas> 0618 </highlighting> 0619 <general> 0620 <comments> 0621 <comment name = "singleLine" start = "#"/> 0622 </comments> 0623 <!-- '-' is not a deliminator in function filter-out --> 0624 <keywords casesensitive="1" weakDeliminator = ".-"/> 0625 </general> 0626 </language> 0627 <!-- kate: syntax XML; space-indent on; indent-width 2; replace-tabs on; -->