" Vim syntax file
" Language:		Fvwm{1,2} configuration file
" Maintainer:		Gautam Iyer <gi1242@users.sourceforge.net>
" Previous Maintainer:	Haakon Riiser <hakonrk@fys.uio.no>
" Last Change:		Sat 04 Nov 2006 11:28:37 PM PST
"
" Thanks to David Necas (Yeti) for adding Fvwm 2.4 support.
"
" 2006-05-09 gi1242: Rewrote fvwm2 syntax completely. Also since fvwm1 is now
" mostly obsolete, made the syntax file pick fvwm2 syntax by default.

if exists("b:current_syntax")
    finish
endif

" Fvwm configuration files are case insensitive
syn case ignore

" Identifiers in Fvwm can contain most characters, so we only
" include the most common ones here.
setlocal iskeyword=_,-,+,.,a-z,A-Z,48-57

" Syntax items common to fvwm1 and fvwm2 config files
syn cluster fvwmConstants	contains=fvwmEnvVar,fvwmNumber
syn match   fvwmEnvVar		"\$\w\+"
syn match   fvwmNumber		'\v<(\d+|0x[0-9a-f]+)>' 

syn match   fvwmModConf		nextgroup=fvwmModArg	"\v^\s*\*\a+"
syn region  fvwmModArg		contained contains=fvwmString,fvwmRGBValue
				\ start='.' skip='\\$' end='$'

syn region  fvwmString		contains=fvwmBackslash start='"'
				\ matchgroup=fvwmBackslash skip='\v\\"' end='"'
syn region  fvwmString		contains=fvwmBackslash start='`'
				\ matchgroup=fvwmBackslash skip='\v\\`' end='`'
syn region  fvwmString		contains=fvwmBackslash start="'"
				\ matchgroup=fvwmBackslash skip="\v\\'" end="'"
syn match   fvwmBackslash	contained '\\[^"'`]'

syn match   fvwmRGBValue	"#\x\{3}"
syn match   fvwmRGBValue	"#\x\{6}"
syn match   fvwmRGBValue	"#\x\{9}"
syn match   fvwmRGBValue	"#\x\{12}"
syn match   fvwmRGBValue	"rgb:\x\{1,4}/\x\{1,4}/\x\{1,4}"

syn region  fvwmComment		contains=@Spell start="^\s*#" skip='\\$' end='$'

if (exists("b:fvwm_version") && b:fvwm_version == 1)
	    \ || (exists("use_fvwm_1") && use_fvwm_1)

    "
    " Syntax highlighting for Fvwm1 files.
    "

    " Moved from common syntax items
    syn match   fvwmModule	"\<Module\s\+\w\+"he=s+6
    syn keyword fvwmExec	Exec
    syn match   fvwmPath	"\<IconPath\s.*$"lc=8 contains=fvwmEnvVar
    syn match   fvwmPath	"\<ModulePath\s.*$"lc=10 contains=fvwmEnvVar
    syn match   fvwmPath	"\<PixmapPath\s.*$"lc=10 contains=fvwmEnvVar
    syn match   fvwmKey		"\<Key\s\+\w\+"he=s+3

    " fvwm1 specific items
    syn match  fvwmEnvVar	"\$(\w\+)"
    syn match  fvwmWhitespace	contained "\s\+"
    syn region fvwmStyle	oneline keepend
				\ contains=fvwmString,fvwmKeyword,fvwmWhiteSpace
				\ matchgroup=fvwmFunction
				\ start="^\s*Style\>"hs=e-5 end="$"

    syn keyword fvwmFunction	AppsBackingStore AutoRaise BackingStore Beep
				\ BoundaryWidth ButtonStyle CenterOnCirculate
				\ CirculateDown CirculateHit CirculateSkip
				\ CirculateSkipIcons CirculateUp ClickTime
				\ ClickToFocus Close Cursor CursorMove
				\ DecorateTransients Delete Desk DeskTopScale
				\ DeskTopSize Destroy DontMoveOff
				\ EdgeResistance EdgeScroll EndFunction
				\ EndMenu EndPopup Focus Font Function
				\ GotoPage HiBackColor HiForeColor Icon
				\ IconBox IconFont Iconify IconPath Key
				\ Lenience Lower Maximize MenuBackColor
				\ MenuForeColor MenuStippleColor Module
				\ ModulePath Mouse Move MWMBorders MWMButtons
				\ MWMDecorHints MWMFunctionHints
				\ MWMHintOverride MWMMenus NoBorder
				\ NoBoundaryWidth Nop NoPPosition NoTitle
				\ OpaqueMove OpaqueResize Pager PagerBackColor
				\ PagerFont PagerForeColor PagingDefault
				\ PixmapPath Popup Quit Raise RaiseLower
				\ RandomPlacement Refresh Resize Restart
				\ SaveUnders Scroll SloppyFocus SmartPlacement
				\ StartsOnDesk StaysOnTop StdBackColor
				\ StdForeColor Stick Sticky StickyBackColor
				\ StickyForeColor StickyIcons
				\ StubbornIconPlacement StubbornIcons
				\ StubbornPlacement SuppressIcons Title
				\ TogglePage Wait Warp WindowFont WindowList
				\ WindowListSkip WindowsDesk WindowShade
				\ XORvalue

    " These keywords are only used after the "Style" command.  To avoid
    " name collision with several commands, they are contained.
    syn keyword fvwmKeyword	contained
				\ BackColor BorderWidth BoundaryWidth Button
				\ CirculateHit CirculateSkip Color DoubleClick
				\ ForeColor Handles HandleWidth Icon IconTitle
				\ NoBorder NoBoundaryWidth NoButton NoHandles
				\ NoIcon NoIconTitle NoTitle Slippery
				\ StartIconic StartNormal StartsAnyWhere
				\ StartsOnDesk StaysOnTop StaysPut Sticky
				\ Title WindowListHit WindowListSkip

" elseif (exists("b:fvwm_version") && b:fvwm_version == 2)
" 	    \ || (exists("use_fvwm_2") && use_fvwm_2)
else

    "
    " Syntax highlighting for fvwm2 files.
    "
    syn match   fvwmEnvVar	"\${\w\+}"
    syn match   fvwmEnvVar	"\$\[[^]]\+\]"
    syn match   fvwmEnvVar	"\$[$0-9*]"

    syn match   fvwmDef		contains=fvwmMenuString,fvwmWhitespace
				\ '^\s*+\s*".\{-}"'
    syn region  fvwmMenuString	contains=fvwmIcon,fvwmShortcutKey
				\ start='^\s*+\s*\zs"' skip='\v\\\\|\\\"' end='"'
    syn region	fvwmIcon	contained start='\v\%\%@!' end='%'
    syn match   fvwmShortcutKey	contained "&."

    syn keyword fvwmModuleName	FvwmAnimate FvwmAudio FvwmAuto FvwmBacker
				\ FvwmBanner FvwmButtons FvwmCommandS
				\ FvwmConsole FvwmCpp FvwmDebug FvwmDragWell
				\ FvwmEvent FvwmForm FvwmGtk FvwmIconBox
				\ FvwmIconMan FvwmIdent FvwmM4 FvwmPager
				\ FvwmSave FvwmSaveDesk FvwmScript FvwmScroll
				\ FvwmTaskBar FvwmWinList FvwmWharf
    " Obsolete fvwmModuleName: FvwmTheme

    syn keyword fvwmKeyword	AddToMenu ChangeMenuStyle CopyMenuStyle
				\ DestroyMenu DestroyMenuStyle Menu
				\ Popup TearMenuOff Title BugOpts BusyCursor
				\ ClickTime ColorLimit ColormapFocus
				\ DefaultColors DefaultColorset DefaultFont
				\ DefaultIcon DefaultLayers Deschedule Emulate
				\ EscapeFunc FakeClick FakeKeypress GlobalOpts
				\ HilightColor HilightColorset IconFont
				\ PrintInfo Repeat Schedule State WindowFont
				\ XSync XSynchronize AnimatedMove
				\ HideGeometryWindow Layer Lower Move
				\ MoveToDesk MoveThreshold MoveToPage
				\ MoveToScreen OpaqueMoveSize PlaceAgain Raise
				\ RaiseLower ResizeMaximize ResizeMove
				\ ResizeMoveMaximize RestackTransients
				\ SetAnimation SnapAttraction SnapGrid
				\ WindowsDesk XorPixmap XorValue CursorMove
				\ FlipFocus Focus WarpToWindow Close Delete
				\ Destroy Iconify Recapture RecaptureWindow
				\ Refresh RefreshWindow Stick StickAcrossPages
				\ StickAcrossDesks WindowShade
				\ WindowShadeAnimate IgnoreModifiers
				\ EdgeCommand EdgeLeaveCommand GnomeButton
				\ Stroke StrokeFunc FocusStyle DestroyStyle
				\ UpdateStyles AddToDecor BorderStyle
				\ ChangeDecor DestroyDecor UpdateDecor
				\ DesktopName DeskTopSize EdgeResistance
				\ EdgeScroll EdgeThickness EwmhBaseStruts
				\ EWMHNumberOfDesktops GotoDeskAndPage
				\ GotoPage Scroll Xinerama
				\ XineramaPrimaryScreen XineramaSls
				\ XineramaSlsSize XineramaSlsScreens AddToFunc
				\ Beep DestroyFunc Echo Exec ExecUseShell
				\ Function Nop PipeRead Read SetEnv Silent
				\ UnsetEnv Wait DestroyModuleConfig KillModule
				\ Module ModuleSynchronous ModuleTimeout
				\ SendToModule Quit QuitScreen QuitSession
				\ Restart SaveSession SaveQuitSession KeepRc
				\ NoWindow Break CleanupColorsets

    " Conditional commands
    syn keyword fvwmKeyword	nextgroup=fvwmCondition skipwhite
				\ All Any Current Next None Pick PointerWindow
				\ Prev ThisWindow
    syn keyword fvwmKeyword	nextgroup=fvwmDirection skipwhite
				\ Direction
    syn keyword fvwmDirection	contained nextgroup=fvwmDirection skipwhite
				\ FromPointer
    syn keyword fvwmDirection	contained nextgroup=fvwmCondition skipwhite
				\ North Northeast East Southeast South
				\ Southwest West Northwest Center
    syn region	fvwmCondition	contained contains=fvwmCondNames,fvwmString
				\ matchgroup=fvwmKeyword start='(' skip=','
				\ end=')'
    syn keyword fvwmCondNames	contained
				\ AcceptsFocus AnyScreen CirculateHit
				\ CirculateHitIcon CirculateHitShaded Closable
				\ CurrentDesk CurrentGlobalPage
				\ CurrentGlobalPageAnyDesk CurrentPage
				\ CurrentPageAnyDesk CurrentScreen FixedSize
				\ Focused HasHandles HasPointer Iconic
				\ Iconifiable Maximizable Maximized
				\ Overlapped PlacedByButton3 PlacedByFvwm Raised
				\ Shaded Sticky StickyAcrossDesks
				\ StickyAcrossPages Transient Visible
    syn keyword fvwmCondNames	contained skipwhite nextgroup=@fvwmConstants
				\ State Layer

    " Test
    syn keyword fvwmKeyword	nextgroup=fvwmTCond skipwhite
				\ Test
    syn region	fvwmTCond	contained contains=fvwmTCNames,fvwmString
				\ matchgroup=fvwmKeyword start='(' end=')'
    syn keyword	fvwmTCNames	contained
				\ Version EnvIsSet EnvMatch EdgeHasPointer
				\ EdgeIsActive Start Init Restart Exit Quit
				\ ToRestart True False F R W X I
    
    " TestRc
    syn keyword fvwmKeyword	nextgroup=fvwmTRCond skipwhite
				\ TestRc
    syn region	fvwmTRCond	contained contains=fvwmTRNames,fvwmNumber
				\ matchgroup=fvwmKeyword start='(' end=')'
    syn keyword	fvwmTRNames	contained NoMatch Match Error Break

    " Colorsets
    syn keyword fvwmKeyword	nextgroup=fvwmCSArgs	skipwhite
				\ ColorSet
    syn region	fvwmCSArgs	contained transparent contains=fvwmCSNames,@fvwmConstants,fvwmString,fvwmRGBValue,fvwmGradient
		\ start='.' skip='\\$' end='$'
    syn keyword	fvwmCSNames	contained
				\ fg Fore Foreground bg Back Background hi
				\ Hilite Hilight sh Shade Shadow fgsh Pixmap
				\ TiledPixmap AspectPixmap RootTransparent
				\ Shape TiledShape AspectShape Tint fgTint
				\ bgTint Alpha fgAlpha Dither IconTint
				\ IconAlpha NoShape Plain Translucent
    syn match	fvwmCSNames	contained	'\v<Transparent>'
    syn match	fvwmGradient	contained	'\v<[HVDBSCRY]Gradient>'

    " Styles
    syn keyword fvwmKeyword	nextgroup=fvwmStyleArgs skipwhite
				\ Style WindowStyle
    syn region	fvwmStyleArgs	contained transparent contains=fvwmStyleNames,@fvwmConstants,fvwmString,fvwmRGBValue
				\ start='.' skip='\\$' end='$'
    syn keyword	fvwmStyleNames	contained
				\ BorderWidth HandleWidth NoIcon Icon MiniIcon
				\ IconBox IconGrid IconFill IconSize NoTitle
				\ Title TitleAtBottom TitleAtLeft TitleAtRight
				\ TitleAtTop LeftTitleRotatedCW
				\ LeftTitleRotatedCCW RightTitleRotatedCCW
				\ RightTitleRotatedCW TopTitleRotated
				\ TopTitleNotRotated BottomTitleRotated
				\ BottomTitleNotRotated UseTitleDecorRotation
				\ StippledTitle StippledTitleOff
				\ IndexedWindowName ExactWindowName
				\ IndexedIconName ExactIconName Borders
				\ NoHandles Handles WindowListSkip
				\ WindowListHit CirculateSkip CirculateHit
				\ CirculateSkipShaded CirculateHitShaded Layer
				\ StaysOnTop StaysOnBottom StaysPut Sticky
				\ Slippery StickyAcrossPages StickyAcrossDesks
				\ StartIconic StartNormal Color ForeColor
				\ BackColor Colorset HilightFore HilightBack
				\ HilightColorset BorderColorset
				\ HilightBorderColorset IconTitleColorset
				\ HilightIconTitleColorset
				\ IconBackgroundColorset IconTitleRelief
				\ IconBackgroundRelief IconBackgroundPadding
				\ Font IconFont StartsOnDesk StartsOnPage
				\ StartsAnyWhere StartsOnScreen
				\ ManualPlacementHonorsStartsOnPage
				\ ManualPlacementIgnoresStartsOnPage
				\ CaptureHonorsStartsOnPage
				\ CaptureIgnoresStartsOnPage
				\ RecaptureHonorsStartsOnPage
				\ RecaptureIgnoresStartsOnPage
				\ StartsOnPageIncludesTransients
				\ StartsOnPageIgnoresTransients IconTitle
				\ NoIconTitle MwmButtons FvwmButtons MwmBorder
				\ FvwmBorder MwmDecor NoDecorHint MwmFunctions
				\ NoFuncHint HintOverride NoOverride NoButton
				\ Button ResizeHintOverride NoResizeOverride
				\ OLDecor NoOLDecor GNOMEUseHints
				\ GNOMEIgnoreHints StickyIcon SlipperyIcon
				\ StickyAcrossPagesIcon StickyAcrossDesksIcon
				\ ManualPlacement CascadePlacement
				\ MinOverlapPlacement
				\ MinOverlapPercentPlacement
				\ TileManualPlacement TileCascadePlacement
				\ CenterPlacement MinOverlapPlacementPenalties
				\ MinOverlapPercentPlacementPenalties
				\ DecorateTransient NakedTransient
				\ DontRaiseTransient RaiseTransient
				\ DontLowerTransient LowerTransient
				\ DontStackTransientParent
				\ StackTransientParent SkipMapping ShowMapping
				\ ScatterWindowGroups KeepWindowGroupsOnDesk
				\ UseDecor UseStyle NoPPosition UsePPosition
				\ NoUSPosition UseUSPosition
				\ NoTransientPPosition UseTransientPPosition
				\ NoTransientUSPosition UseTransientUSPosition
				\ NoIconPosition UseIconPosition Lenience
				\ NoLenience ClickToFocus SloppyFocus
				\ MouseFocus FocusFollowsMouse NeverFocus
				\ ClickToFocusPassesClickOff
				\ ClickToFocusPassesClick
				\ ClickToFocusRaisesOff ClickToFocusRaises
				\ MouseFocusClickRaises
				\ MouseFocusClickRaisesOff GrabFocus
				\ GrabFocusOff GrabFocusTransientOff
				\ GrabFocusTransient FPFocusClickButtons
				\ FPFocusClickModifiers
				\ FPSortWindowlistByFocus FPClickRaisesFocused
				\ FPClickDecorRaisesFocused
				\ FPClickIconRaisesFocused
				\ FPClickRaisesUnfocused
				\ FPClickDecorRaisesUnfocused
				\ FPClickIconRaisesUnfocused FPClickToFocus
				\ FPClickDecorToFocus FPClickIconToFocus
				\ FPEnterToFocus FPLeaveToUnfocus
				\ FPFocusByProgram FPFocusByFunction
				\ FPFocusByFunctionWarpPointer FPLenient
				\ FPPassFocusClick FPPassRaiseClick
				\ FPIgnoreFocusClickMotion
				\ FPIgnoreRaiseClickMotion
				\ FPAllowFocusClickFunction
				\ FPAllowRaiseClickFunction FPGrabFocus
				\ FPGrabFocusTransient FPOverrideGrabFocus
				\ FPReleaseFocus FPReleaseFocusTransient
				\ FPOverrideReleaseFocus StartsLowered
				\ StartsRaised IgnoreRestack AllowRestack
				\ FixedPosition VariablePosition
				\ FixedUSPosition VariableUSPosition
				\ FixedPPosition VariablePPosition FixedSize
				\ VariableSize FixedUSSize VariableUSSize
				\ FixedPSize VariablePSize Closable
				\ Iconifiable Maximizable
				\ AllowMaximizeFixedSize IconOverride
				\ NoIconOverride NoActiveIconOverride
				\ DepressableBorder FirmBorder MaxWindowSize
				\ IconifyWindowGroups IconifyWindowGroupsOff
				\ ResizeOpaque ResizeOutline BackingStore
				\ BackingStoreOff BackingStoreWindowDefault
				\ Opacity ParentalRelativity SaveUnder
				\ SaveUnderOff WindowShadeShrinks
				\ WindowShadeScrolls WindowShadeSteps
				\ WindowShadeAlwaysLazy WindowShadeBusy
				\ WindowShadeLazy EWMHDonateIcon
				\ EWMHDontDonateIcon EWMHDonateMiniIcon
				\ EWMHDontDonateMiniIcon EWMHMiniIconOverride
				\ EWMHNoMiniIconOverride
				\ EWMHUseStackingOrderHints
				\ EWMHIgnoreStackingOrderHints
				\ EWMHIgnoreStateHints EWMHUseStateHints
				\ EWMHIgnoreStrutHints EWMHUseStrutHints
				\ EWMHMaximizeIgnoreWorkingArea
				\ EWMHMaximizeUseWorkingArea
				\ EWMHMaximizeUseDynamicWorkingArea
				\ EWMHPlacementIgnoreWorkingArea
				\ EWMHPlacementUseWorkingArea
				\ EWMHPlacementUseDynamicWorkingArea
				\ MoveByProgramMethod Unmanaged State

    " Cursor styles
    syn keyword fvwmKeyword	nextgroup=fvwmCursorStyle skipwhite
				\ CursorStyle
    syn case match
    syn keyword fvwmCursorStyle	contained
				\ POSITION TITLE DEFAULT SYS MOVE RESIZE WAIT
				\ MENU SELECT DESTROY TOP RIGHT BOTTOM LEFT
				\ TOP_LEFT TOP_RIGHT BOTTOM_LEFT BOTTOM_RIGHT
				\ TOP_EDGE RIGHT_EDGE BOTTOM_EDGE LEFT_EDGE
				\ ROOT STROKE
    syn case ignore

    " Menu style
    syn keyword fvwmKeyword	nextgroup=fvwmMStyleArgs skipwhite
				\ MenuStyle
    syn region	fvwmMStyleArgs	contained transparent contains=fvwmMStyleNames,@fvwmConstants,fvwmString,fvwmGradient,fvwmRGBValue
				\ start='.' skip='\\$' end='$'
    syn keyword	fvwmMStyleNames	contained
				\ Fvwm Mwm Win BorderWidth Foreground
				\ Background Greyed HilightBack HilightBackOff
				\ ActiveFore ActiveForeOff MenuColorset
				\ ActiveColorset GreyedColorset Hilight3DThick
				\ Hilight3DThin Hilight3DOff
				\ Hilight3DThickness Animation AnimationOff
				\ Font MenuFace PopupDelay PopupOffset
				\ TitleWarp TitleWarpOff TitleUnderlines0
				\ TitleUnderlines1 TitleUnderlines2
				\ SeparatorsLong SeparatorsShort
				\ TrianglesSolid TrianglesRelief
				\ PopupImmediately PopupDelayed
				\ PopdownImmediately PopdownDelayed
				\ PopupActiveArea DoubleClickTime SidePic
				\ SideColor PopupAsRootMenu PopupAsSubmenu
				\ PopupIgnore PopupClose RemoveSubmenus
				\ HoldSubmenus SubmenusRight SubmenusLeft
				\ SelectOnRelease ItemFormat
				\ VerticalItemSpacing VerticalTitleSpacing
				\ AutomaticHotkeys AutomaticHotkeysOff

    " Button style
    syn keyword fvwmKeyword	nextgroup=fvwmBNum	skipwhite
				\ ButtonStyle AddButtonStyle
    syn match	fvwmBNum	contained
				\ nextgroup=fvwmBState,fvwmBStyleArgs skipwhite 
				\ '\v<([0-9]|All|Left|Right|Reset)>'
    syn keyword	fvwmBState	contained nextgroup=fvwmBStyleArgs skipwhite
				\ ActiveUp ActiveDown InactiveUp InactiveDown
				\ Active Inactive ToggledActiveUp
				\ ToggledActiveDown ToggledInactiveUp
				\ ToggledInactiveDown ToggledActive
				\ ToggledInactive AllNormal AllToggled
				\ AllActive AllInactive AllUp AllDown
    syn region	fvwmBStyleArgs	contained contains=fvwmBStyleFlags,fvwmBStyleNames,fvwmGradient,fvwmRGBValue,@fvwmConstants,fvwmString
				\ start='\S' skip='\\$' end='$'
    syn keyword	fvwmBStyleNames	contained
				\ Simple Default Solid Colorset Vector Pixmap
				\ AdjustedPixmap ShrunkPixmap StretchedPixmap
				\ TiledPixmap MiniIcon
    syn keyword fvwmBStyleFlags	contained
				\ Raised Sunk Flat UseTitleStyle
				\ UseBorderStyle

    " Border style
    syn keyword fvwmKeyword	skipwhite nextgroup=fvwmBdState,fvwmBdStyleArgs
				\ BorderStyle
    syn keyword	fvwmBdState	contained skipwhite nextgroup=fvwmBdStyleArgs
				\ Active Inactive
    syn region	fvwmBdStyleArgs	contained contains=fvwmBdStyNames,fvwmBdStyFlags
				\ start='\S' skip='\\$' end='$'
    syn keyword	fvwmBdStyNames	contained
				\ TiledPixmap Colorset
    syn keyword	fvwmBdStyFlags	contained
				\ HiddenHandles NoInset Raised Sunk Flat

    " Title styles
    syn keyword	fvwmKeyword	skipwhite nextgroup=fvwmTState,fvwmTStyleArgs
				\ TitleStyle AddTitleStyle
    syn keyword	fvwmTState	contained skipwhite nextgroup=fvwmTStyleArgs
				\ ActiveUp ActiveDown InactiveUp InactiveDown
				\ Active Inactive ToggledActiveUp
				\ ToggledActiveDown ToggledInactiveUp
				\ ToggledInactiveDown ToggledActive
				\ ToggledInactive AllNormal AllToggled
				\ AllActive AllInactive AllUp AllDown
    syn region	fvwmTStyleArgs	contained contains=fvwmBStyleNames,fvwmTStyleNames,fvwmMPmapNames,fvwmTStyleFlags,fvwmGradient,fvwmRGBValue,@fvwmConstants
				\ start='\S' skip='\\$' end='$'
    syn keyword	fvwmTStyleNames	contained
				\ MultiPixmap
    syn keyword fvwmTStyleNames	contained
				\ LeftJustified Centered RightJustified Height
				\ MinHeight
    syn keyword	fvwmMPmapNames	contained
				\ Main LeftMain RightMain UnderText LeftOfText
				\ RightOfText LeftEnd RightEnd Buttons
				\ LeftButtons RightButtons
    syn keyword	fvwmTStyleFlags	contained
				\ Raised Flat Sunk

    " Button state
    syn keyword fvwmKeyword	nextgroup=fvwmBStateArgs
				\ ButtonState
    syn region	fvwmBStateArgs	contained contains=fvwmBStateTF,fvwmBStateNames
				\ start='.' skip='\\$' end='$'
    syn keyword	fvwmBStateNames	contained ActiveDown Inactive InactiveDown
    syn keyword fvwmBStateTF	contained True False

    " Paths
    syn keyword fvwmKeyword	nextgroup=fvwmPath	skipwhite
				\ IconPath ImagePath LocalePath PixmapPath
				\ ModulePath 
    syn match	fvwmPath	contained contains=fvwmEnvVar '\v.+$'

    " Window list command
    syn keyword fvwmKeyword	nextgroup=fvwmWLArgs skipwhite
				\ WindowList
    syn region	fvwmWLArgs	contained
		\ contains=fvwmCondition,@fvwmConstants,fvwmString,fvwmWLOpts
		\ start='.' skip='\\$' end='$'
    syn keyword fvwmWLOpts	contained
				\ Geometry NoGeometry NoGeometryWithInfo
				\ NoDeskNum NoNumInDeskTitle
				\ NoCurrentDeskTitle MaxLabelWidth width
				\ TitleForAllDesks Function funcname Desk
				\ desknum CurrentDesk NoIcons Icons OnlyIcons
				\ NoNormal Normal OnlyNormal NoSticky Sticky
				\ OnlySticky NoStickyAcrossPages
				\ StickyAcrossPages OnlyStickyAcrossPages
				\ NoStickyAcrossDesks StickyAcrossDesks
				\ OnlyStickyAcrossDesks NoOnTop OnTop
				\ OnlyOnTop NoOnBottom OnBottom OnlyOnBottom
				\ Layer UseListSkip OnlyListSkip NoDeskSort
				\ ReverseOrder CurrentAtEnd IconifiedAtEnd
				\ UseIconName Alphabetic NotAlphabetic
				\ SortByResource SortByClass NoHotkeys
				\ SelectOnRelease

    syn keyword fvwmSpecialFn	StartFunction InitFunction RestartFunction
				\ ExitFunction SessionInitFunction
				\ SessionRestartFunction SessionExitFunction
				\ MissingSubmenuFunction WindowListFunc

    syn keyword fvwmKeyword	skipwhite nextgroup=fvwmKeyWin,fvwmKeyName
				\ Key PointerKey
    syn region	fvwmKeyWin	contained skipwhite nextgroup=fvwmKeyName
				\ start='(' end=')'
    syn case match
    syn match	fvwmKeyName	contained skipwhite nextgroup=fvwmKeyContext
				\ '\v<([a-zA-Z0-9]|F\d+|KP_\d)>'
    syn keyword fvwmKeyName	contained skipwhite nextgroup=fvwmKeyContext
				\ BackSpace Begin Break Cancel Clear Delete
				\ Down End Escape Execute Find Help Home
				\ Insert KP_Add KP_Begin KP_Decimal KP_Delete
				\ KP_Divide KP_Down KP_End KP_Enter KP_Equal
				\ KP_Home KP_Insert KP_Left KP_Multiply
				\ KP_Next KP_Page_Down KP_Page_Up KP_Prior
				\ KP_Right KP_Separator KP_Space KP_Subtract
				\ KP_Tab KP_Up Left Linefeed Menu Mode_switch
				\ Next Num_Lock Page_Down Page_Up Pause Print
				\ Prior Redo Return Right script_switch
				\ Scroll_Lock Select Sys_Req Tab Undo Up space
				\ exclam quotedbl numbersign dollar percent
				\ ampersand apostrophe quoteright parenleft
				\ parenright asterisk plus comma minus period
				\ slash colon semicolon less equal greater
				\ question at bracketleft backslash
				\ bracketright asciicircum underscore grave
				\ quoteleft braceleft bar braceright
				\ asciitilde

    syn match	fvwmKeyContext	contained skipwhite nextgroup=fvwmKeyMods
				\ '\v<[][RWDTS_F<^>vI0-9AM-]+>'
    syn match	fvwmKeyMods	contained '\v[NCSMLA1-5]+'
    syn case ignore

    syn keyword	fvwmKeyword	skipwhite nextgroup=fvwmMouseWin,fvwmMouseButton
				\ Mouse
    syn region	fvwmMouseWin	contained skipwhite nextgroup=fvwmMouseButton
				\ start='(' end=')'
    syn match	fvwmMouseButton	contained skipwhite nextgroup=fvwmKeyContext
				\ '[0-5]'
endif

" Define syntax highlighting groups

"
" Common highlighting groups
"
hi def link fvwmComment		Comment
hi def link fvwmEnvVar		Macro
hi def link fvwmNumber		Number
hi def link fvwmKeyword		Keyword
hi def link fvwmPath		Constant
hi def link fvwmModConf		Macro
hi def link fvwmRGBValue	Constant
hi def link fvwmString		String
hi def link fvwmBackslash	SpecialChar


"
" Highlighting groups for fvwm1 specific items
"
hi def link fvwmExec		fvwmKeyword
hi def link fvwmKey		fvwmKeyword
hi def link fvwmModule		fvwmKeyword
hi def link fvwmFunction	Function

"
" Highlighting groups for fvwm2 specific items
"
hi def link fvwmSpecialFn	Type
hi def link fvwmCursorStyle	fvwmStyleNames
hi def link fvwmStyleNames	Identifier
hi def link fvwmMStyleNames	fvwmStyleNames
hi def link fvwmCSNames		fvwmStyleNames
hi def link fvwmGradient	fvwmStyleNames
hi def link fvwmCondNames	fvwmStyleNames
hi def link fvwmTCNames		fvwmStyleNames
hi def link fvwmTRNames		fvwmStyleNames
hi def link fvwmWLOpts		fvwmStyleNames

hi def link fvwmBNum		Number
hi def link fvwmBState		Type
hi def link fvwmBStyleNames	fvwmStyleNames
hi def link fvwmBStyleFlags	Special

hi def link fvwmBStateTF	Constant
hi def link fvwmBStateNames	fvwmStyleNames

hi def link fvwmBdState		fvwmBState
hi def link fvwmBdStyNames	fvwmStyleNames
hi def link fvwmBdStyFlags	fvwmBStyleFlags

hi def link fvwmTState		fvwmBState
hi def link fvwmTStyleNames	fvwmStyleNames
hi def link fvwmMPmapNames	fvwmBStyleFlags
hi def link fvwmTStyleFlags	fvwmBStyleFlags

hi def link fvwmDirection	fvwmBStyleFlags

hi def link fvwmKeyWin		Constant
hi def link fvwmMouseWin	fvwmKeyWin
hi def link fvwmKeyName		Special
hi def link fvwmKeyContext	fvwmKeyName
hi def link fvwmKeyMods		fvwmKeyName
hi def link fvwmMouseButton	fvwmKeyName

hi def link fvwmMenuString	String
hi def link fvwmIcon		Type
hi def link fvwmShortcutKey	SpecialChar

hi def link fvwmModuleName	Function

let b:current_syntax = "fvwm"
