Got tired of trying to find existing solutions, so I wrote a highlighter for KATE.
You put this in ~/.kde/share/apps/katepart/syntax/blitzmax.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE language SYSTEM "language.dtd"> <language name="BlitzMax" version="1.0" kateversion="2.3" section="Sources" extensions="*.bmx" mimetype="" author="Noel Cower" license="LGPL"> <highlighting> <list name="keywords"> <item>Matrix</item> <item>Plane</item> <item>Quaternion</item> <item>Rectangle</item> <item>Vector2</item> <item>Vector3</item> <item>TBankStream</item> <item>TBank</item> <item>Abs</item> <item>Abstract</item> <item>And</item> <item>Asc</item> <item>Assert</item> <item>Byte</item> <item>Case</item> <item>Catch</item> <item>Chr</item> <item>Const</item> <item>Continue</item> <item>Default</item> <item>DefData</item> <item>Delete</item> <item>Double</item> <item>EachIn</item> <item>Else</item> <item>ElseIf</item> <item>End</item> <item>EndExtern</item> <item>EndFunction</item> <item>EndIf</item> <item>EndMethod</item> <item>EndRem</item> <item>EndSelect</item> <item>EndTry</item> <item>EndType</item> <item>EndWhile</item> <item>Exit</item> <item>Extends</item> <item>Extern</item> <item>False</item> <item>Field</item> <item>Final</item> <item>Float</item> <item>For</item> <item>Forever</item> <item>Framework</item> <item>Function</item> <item>Global</item> <item>Goto</item> <item>If</item> <item>Import</item> <item>Incbin</item> <item>IncbinLen</item> <item>IncbinPtr</item> <item>Include</item> <item>Int</item> <item>Len</item> <item>Local</item> <item>Long</item> <item>Max</item> <item>Method</item> <item>Min</item> <item>Mod</item> <item>Module</item> <item>ModuleInfo</item> <item>New</item> <item>Next</item> <item>Not</item> <item>Null</item> <item>Object</item> <item>Or</item> <item>Pi</item> <item>Private</item> <item>Ptr</item> <item>Public</item> <item>ReadData</item> <item>Release</item> <item>Rem</item> <item>Repeat</item> <item>RestoreData</item> <item>Return</item> <item>Sar</item> <item>Select</item> <item>Self</item> <item>Sgn</item> <item>Shl</item> <item>Short</item> <item>Shr</item> <item>SizeOf</item> <item>Step</item> <item>Strict</item> <item>String</item> <item>Super</item> <item>SuperStrict</item> <item>Then</item> <item>Throw</item> <item>To</item> <item>True</item> <item>Try</item> <item>Type</item> <item>Until</item> <item>Var</item> <item>Varptr</item> <item>Wend</item> <item>While</item> <item>EmitEventHook</item> <item>TEvent</item> <item>FlipHook</item> <item>TLink</item> <item>TList</item> <item>TListEnum</item> <item>BaseLuaInterface</item> <item>TPixmap</item> <item>TPixmapLoader</item> <item>TCStream</item> <item>TIO</item> <item>TStream</item> <item>TStreamException</item> <item>TStreamFactory</item> <item>TStreamReadException</item> <item>TStreamWrapper</item> <item>TStreamWriteException</item> <item>XmlAttr</item> <item>XmlDocument</item> <item>XmlNode</item> </list> <list name="functions"> <item>Cotangent</item> <item>DegreeToRad</item> <item>NearestPower</item> <item>RadToDegree</item> <item>ReturnedY</item> <item>Slope</item> <item>YIntercept</item> <item>AllocChannel</item> <item>ChannelPlaying</item> <item>CueSound</item> <item>LoadSound</item> <item>PauseChannel</item> <item>PlaySound</item> <item>ResumeChannel</item> <item>SetChannelDepth</item> <item>SetChannelPan</item> <item>SetChannelRate</item> <item>SetChannelVolume</item> <item>StopChannel</item> <item>CreateAudioSample</item> <item>CreateStaticAudioSample</item> <item>LoadAudioSample</item> <item>CreateBankStream</item> <item>BankBuf</item> <item>BankCapacity</item> <item>BankSize</item> <item>CopyBank</item> <item>CreateBank</item> <item>CreateStaticBank</item> <item>LoadBank</item> <item>PeekByte</item> <item>PeekDouble</item> <item>PeekFloat</item> <item>PeekInt</item> <item>PeekLong</item> <item>PeekShort</item> <item>PokeByte</item> <item>PokeDouble</item> <item>PokeFloat</item> <item>PokeInt</item> <item>PokeLong</item> <item>PokeShort</item> <item>ReadBank</item> <item>ResizeBank</item> <item>SaveBank</item> <item>WriteBank</item> <item>Bin</item> <item>Hex</item> <item>Instr</item> <item>Left</item> <item>LongBin</item> <item>LongHex</item> <item>Lower</item> <item>LSet</item> <item>Mid</item> <item>Replace</item> <item>Right</item> <item>RSet</item> <item>Trim</item> <item>Upper</item> <item>AppArgs</item> <item>AppDir</item> <item>AppFile</item> <item>AppTitle</item> <item>LaunchDir</item> <item>DebugLog</item> <item>DebugStop</item> <item>GCCollect</item> <item>GCMemAlloced</item> <item>GCSetMode</item> <item>HandleFromObject</item> <item>HandleToObject</item> <item>MemAlloc</item> <item>MemClear</item> <item>MemCopy</item> <item>MemExtend</item> <item>MemFree</item> <item>MemMove</item> <item>OnEnd</item> <item>ReadStdin</item> <item>RuntimeError</item> <item>WriteStderr</item> <item>WriteStdout</item> <item>bglAdjustTexSize</item> <item>bglCreateContext</item> <item>bglDeleteContext</item> <item>bglDisplayModes</item> <item>bglDrawText</item> <item>bglFixedFontBitmaps</item> <item>bglSetMouseVisible</item> <item>bglSetSwapInterval</item> <item>bglSwapBuffers</item> <item>bglTexFromPixmap</item> <item>BufferedD3D7Max2DDriver</item> <item>D3D7Max2DDriver</item> <item>BigEndianStream</item> <item>LittleEndianStream</item> <item>CreateEvent</item> <item>EmitEvent</item> <item>CurrentEvent</item> <item>EventData</item> <item>EventExtra</item> <item>EventID</item> <item>EventMods</item> <item>EventSource</item> <item>EventSourceHandle</item> <item>EventText</item> <item>EventX</item> <item>EventY</item> <item>PeekEvent</item> <item>PollEvent</item> <item>PostEvent</item> <item>WaitEvent</item> <item>ChangeDir</item> <item>CloseDir</item> <item>CloseFile</item> <item>CreateDir</item> <item>CreateFile</item> <item>CurrentDir</item> <item>DeleteDir</item> <item>DeleteFile</item> <item>ExtractDir</item> <item>ExtractExt</item> <item>FileMode</item> <item>FileSize</item> <item>FileTime</item> <item>FileType</item> <item>LoadDir</item> <item>NextFile</item> <item>OpenFile</item> <item>ReadDir</item> <item>ReadFile</item> <item>RealPath</item> <item>RenameFile</item> <item>SetFileMode</item> <item>StripAll</item> <item>StripDir</item> <item>StripExt</item> <item>StripSlash</item> <item>WriteFile</item> <item>CloseGNetHost</item> <item>CloseGNetObject</item> <item>CloseGNetPeer</item> <item>CreateGNetHost</item> <item>CreateGNetMessage</item> <item>CreateGNetObject</item> <item>GetGNetFloat</item> <item>GetGNetInt</item> <item>GetGNetString</item> <item>GetGNetTarget</item> <item>GNetAccept</item> <item>GNetConnect</item> <item>GNetListen</item> <item>GNetMessageObject</item> <item>GNetMessages</item> <item>GNetObjectLocal</item> <item>GNetObjectRemote</item> <item>GNetObjects</item> <item>GNetObjectState</item> <item>GNetPeers</item> <item>GNetPeerTCPSocket</item> <item>GNetPeerUDPSocket</item> <item>GNetSync</item> <item>GNetTotalBytesIn</item> <item>GNetTotalBytesOut</item> <item>SendGNetMessage</item> <item>SetGNetFloat</item> <item>SetGNetInt</item> <item>SetGNetString</item> <item>SetGNetTarget</item> <item>CloseGraphics</item> <item>CountGraphicsModes</item> <item>CreateGraphics</item> <item>EndGraphics</item> <item>Flip</item> <item>GetGraphicsMode</item> <item>Graphics</item> <item>GraphicsDepth</item> <item>GraphicsFlags</item> <item>GraphicsHeight</item> <item>GraphicsHertz</item> <item>GraphicsModeExists</item> <item>GraphicsModes</item> <item>GraphicsWidth</item> <item>SetGraphics</item> <item>SetGraphicsDriver</item> <item>AddHook</item> <item>AllocHookId</item> <item>RemoveHook</item> <item>RunHooks</item> <item>JoyAxisCaps</item> <item>JoyButtonCaps</item> <item>JoyCount</item> <item>JoyDown</item> <item>JoyHat</item> <item>JoyName</item> <item>JoyPitch</item> <item>JoyR</item> <item>JoyRoll</item> <item>JoyU</item> <item>JoyV</item> <item>JoyWheel</item> <item>JoyX</item> <item>JoyY</item> <item>JoyYaw</item> <item>JoyZ</item> <item>ClearList</item> <item>CountList</item> <item>CreateList</item> <item>ListAddFirst</item> <item>ListAddLast</item> <item>ListContains</item> <item>ListFindLink</item> <item>ListFromArray</item> <item>ListIsEmpty</item> <item>ListRemove</item> <item>ListToArray</item> <item>RemoveLink</item> <item>ReverseList</item> <item>SortList</item> <item>SwapLists</item> <item>ACos</item> <item>ASin</item> <item>ATan</item> <item>ATan2</item> <item>Ceil</item> <item>Cos</item> <item>Cosh</item> <item>Exp</item> <item>Floor</item> <item>Log</item> <item>Log10</item> <item>Sin</item> <item>Sinh</item> <item>Sqr</item> <item>Tan</item> <item>Tanh</item> <item>AutoImageFlags</item> <item>AutoMidHandle</item> <item>Cls</item> <item>CollideImage</item> <item>CollideRect</item> <item>CreateImage</item> <item>DrawImage</item> <item>DrawImageRect</item> <item>DrawLine</item> <item>DrawOval</item> <item>DrawPixmap</item> <item>DrawPoly</item> <item>DrawRect</item> <item>DrawText</item> <item>GetAlpha</item> <item>GetBlend</item> <item>GetClsColor</item> <item>GetColor</item> <item>GetHandle</item> <item>GetImageFont</item> <item>GetLineWidth</item> <item>GetMaskColor</item> <item>GetOrigin</item> <item>GetRotation</item> <item>GetScale</item> <item>GetViewport</item> <item>GrabImage</item> <item>GrabPixmap</item> <item>ImageHeight</item> <item>ImagesCollide</item> <item>ImagesCollide2</item> <item>ImageWidth</item> <item>LoadAnimImage</item> <item>LoadImage</item> <item>LoadImageFont</item> <item>LockImage</item> <item>MidHandleImage</item> <item>Plot</item> <item>ResetCollisions</item> <item>SetAlpha</item> <item>SetBlend</item> <item>SetClsColor</item> <item>SetColor</item> <item>SetHandle</item> <item>SetImageFont</item> <item>SetImageHandle</item> <item>SetLineWidth</item> <item>SetMaskColor</item> <item>SetOrigin</item> <item>SetRotation</item> <item>SetScale</item> <item>SetTransform</item> <item>SetViewport</item> <item>TextHeight</item> <item>TextWidth</item> <item>TileImage</item> <item>UnlockImage</item> <item>GLAdjustTexSize</item> <item>GLDrawText</item> <item>GLGraphics</item> <item>GLGraphicsDriver</item> <item>GLTexFromPixmap</item> <item>GLMax2DDriver</item> <item>ConvertPixmap</item> <item>CopyPixmap</item> <item>CreatePixmap</item> <item>CreateStaticPixmap</item> <item>LoadPixmap</item> <item>MaskPixmap</item> <item>PixmapFormat</item> <item>PixmapHeight</item> <item>PixmapPitch</item> <item>PixmapPixelPtr</item> <item>PixmapWidth</item> <item>PixmapWindow</item> <item>ReadPixel</item> <item>ResizePixmap</item> <item>WritePixel</item> <item>XFlipPixmap</item> <item>YFlipPixmap</item> <item>LoadPixmapPNG</item> <item>SavePixmapPNG</item> <item>AppSuspended</item> <item>AppTerminate</item> <item>FlushKeys</item> <item>FlushMouse</item> <item>GetChar</item> <item>KeyDown</item> <item>KeyHit</item> <item>MouseDown</item> <item>MouseHit</item> <item>MouseX</item> <item>MouseY</item> <item>MouseZ</item> <item>WaitChar</item> <item>WaitKey</item> <item>WaitMouse</item> <item>CreateRamStream</item> <item>Rand</item> <item>Rnd</item> <item>RndDouble</item> <item>RndFloat</item> <item>RndSeed</item> <item>SeedRnd</item> <item>CreateSocketStream</item> <item>SocketStreamSocket</item> <item>BindSocket</item> <item>CloseSocket</item> <item>ConnectSocket</item> <item>CreateTCPSocket</item> <item>CreateUDPSocket</item> <item>DottedIP</item> <item>HostIp</item> <item>HostIps</item> <item>HostName</item> <item>SocketAccept</item> <item>SocketConnected</item> <item>SocketListen</item> <item>SocketLocalIP</item> <item>SocketLocalPort</item> <item>SocketReadAvail</item> <item>SocketRemoteIP</item> <item>SocketRemotePort</item> <item>SQL_Close</item> <item>SQL_Error</item> <item>SQL_Exec</item> <item>SQL_Open</item> <item>StandardIOStream</item> <item>Input</item> <item>Print</item> <item>CasedFileName</item> <item>CloseStream</item> <item>CopyBytes</item> <item>CopyStream</item> <item>Eof</item> <item>FlushStream</item> <item>LoadByteArray</item> <item>LoadString</item> <item>OpenStream</item> <item>ReadByte</item> <item>ReadDouble</item> <item>ReadFloat</item> <item>ReadInt</item> <item>ReadLine</item> <item>ReadLong</item> <item>ReadShort</item> <item>ReadStream</item> <item>ReadString</item> <item>SaveByteArray</item> <item>SaveString</item> <item>SeekStream</item> <item>StreamPos</item> <item>StreamSize</item> <item>WriteByte</item> <item>WriteDouble</item> <item>WriteFloat</item> <item>WriteInt</item> <item>WriteLine</item> <item>WriteLong</item> <item>WriteShort</item> <item>WriteStream</item> <item>WriteString</item> <item>Confirm</item> <item>CurrentDate</item> <item>CurrentTime</item> <item>Delay</item> <item>HideMouse</item> <item>MilliSecs</item> <item>MoveMouse</item> <item>Notify</item> <item>OpenURL</item> <item>PollSystem</item> <item>Proceed</item> <item>RequestDir</item> <item>RequestFile</item> <item>ShowMouse</item> <item>WaitSystem</item> <item>CreateTimer</item> <item>StopTimer</item> <item>TimerTicks</item> <item>WaitTimer</item> <item>compress</item> <item>compress2</item> <item>uncompress</item> </list> <contexts> <context attribute="Normal Text" lineEndContext="#stay" name="Normal"> <RegExpr attribute="Keyword" context="#stay" String="\b(if)([\s]|$)" insensitive="true" beginRegion="IfRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(end( ?)if)([\s]|$)" insensitive="true" endRegion="IfRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(while)([\s]|$)" insensitive="true" beginRegion="WhileRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(wend|(end( ?)while))([\s]|$)" insensitive="true" endRegion="WhileRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(repeat)([\s]|$)" insensitive="true" beginRegion="RepeatRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(until|forever)([\s]|$)" insensitive="true" endRegion="RepeatRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(select)([\s]|$)" insensitive="true" beginRegion="SelectRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(end( ?)select)([\s]|$)" insensitive="true" endRegion="SelectRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(for)([\s]|$)" insensitive="true" beginRegion="ForRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(next)([\s]|$)" insensitive="true" endRegion="ForRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(function)([.\s]|$)" insensitive="true" beginRegion="FunctionRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(end( ?)function)([\s]|$)" insensitive="true" endRegion="FunctionRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(method)([.\s]|$)" insensitive="true" beginRegion="MethodRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(end( ?)method)([\s]|$)" insensitive="true" endRegion="MethodRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(type)([\s]|$)" insensitive="true" beginRegion="StructureRegion"/> <RegExpr attribute="Keyword" context="#stay" String="\b(end( ?)type)([\s]|$)" insensitive="true" endRegion="StructureRegion"/> <RegExpr attribute="Comment" context="#stay" String="\b(rem)([\s]|$)" insensitive="true" beginRegion="CommentRegion"/> <RegExpr attribute="Comment" context="#stay" String="\b(end( ?)rem)([\s]|$)" insensitive="true" endRegion="CommentRegion"/> <keyword attribute="Keyword" context="#stay" String="keywords"/> <keyword attribute="Functions" context="#stay" String="functions"/> <RegExpr attribute="Constant" context="#stay" String="\(const )+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"/> <Float attribute="Number" context="#stay"/> <Int attribute="Number" context="#stay"/> <DetectChar attribute="String" context="String" char=""" /> <DetectChar attribute="Comment" context="Comment1" char="'"/> </context> <context attribute="String" lineEndContext="#pop" name="String"> <DetectChar attribute="String" context="#pop" char="""/> </context> <context attribute="Comment" lineEndContext="#pop" name="Comment1"> <keyword attribute="Number" context="#stay" String="attention" /> </context> </contexts> <itemDatas> <itemData name="Normal Text" defStyleNum="dsNormal"/> <itemData name="Keyword" defStyleNum="dsKeyword"/> <itemData name="Functions" defStyleNum="dsFunction"/> <itemData name="Constant" defStyleNum="dsDataType"/> <itemData name="Number" defStyleNum="dsDecVal"/> <itemData name="String" defStyleNum="dsString"/> <itemData name="Comment" defStyleNum="dsComment"/> <itemData name="Region Marker" defStyleNum="dsRegionMarker"/> </itemDatas> </highlighting> <general> <keywords casesensitive="0" /> <comments> <comment name="singleLine" start="' " /> <comment name="multiLine" start="Rem " end=" EndRem" region="CommentRegion" /> </comments> </general> </language> <!-- // kate: space-indent on; indent-width 2; replace-tabs on; -->
You put this in ~/.kde/share/apps/katepart/syntax/blitzmax.xml