Re: [xwt-users] vim syntax file

Rod Martin <[email protected]> (by way of Rod Martin <[email protected]>) Mon, 17 Nov 2003 08:32:51 -0500
Newsgroups gmane.comp.java.xwt.users
Organization Benshaw
Message-ID <[email protected]>
Well, here's a vim syntax file that should do the highlighting for the new
keywords in Nitrogen.  It no longer needs to import javascript.vim.  It does
highlight the properties and functions that I mentioned in the previous
email. (I'm not sure that it should.)

One major problem is that it is unreliable with large files.  Sometimes not
all the highlighting gets done.  It will probably have to do with the
grouphere and groupthere lines.  (Lines 253 & 255)

Rod

On Friday 14 November 2003 9:46 am, Rod Martin wrote:
> Ok, I'm getting close to a finished syntax file here.  I just have a few
> questions:
>
> Do the constructor/prototype properties or toSource/toString/valueOf
> functions do anything in xwt (for the date and string objects in
> particular)? Are the constant properties (PI, E, etc) of the JS Math object
> in xwt.math?
>
> Rod
>
>
> _______________________________________________
> users mailing list
> [email protected]
> http://lists.xwt.org/listinfo/users

_______________________________________________
users mailing list
[email protected]
http://lists.xwt.org/listinfo/users
xwt.vim (text/plain, 18.8 KB)
" Vim syntax file
" Language:	XWT
" Maintainer:	Rod Martin <[email protected]>
" Last Change:	Tue Nov 11 16:05:50 EST 2003
" Filenames:	*.xwt

" CREDITS:
"   Adapted from xml.vim by Paul Siegmann and javascript.vim by Claudio Fleiner
"
" REFERENCES:
"   [1] http://www.xwt.org/reference.html
"
" NOTE:
"   1) empty tag delimiters "/>" inside attribute values (strings)
"      confuse syntax highlighting.
"   2) for large files, folding can be pretty slow, especially when
"      loading a file the first time and viewoptions contains 'folds'
"      so that folds of previous sessions are applied.
"      Don't use 'foldmethod=syntax' in this case.
"   3) I left the CDATA and DTD stuff from xml.vim in but commented just in case...

if !exists("main_syntax")
    if version < 600
        syntax clear
    elseif exists("b:current_syntax")
        finish
    endif
    let main_syntax = 'xwt'
endif

let s:xwt_cpo_save = &cpo
set cpo&vim

syn case match

" mark illegal characters
syn match   xwtError "[<&]"

syn keyword xwtTodo         contained TODO FIXME XXX

syn cluster xwtPrimitive        contains=xwtStringD,xwtStringS,xwtSpecial,xwtSpecialCharacter,xwtNumber,xwtHexColor,xwtNull
syn region  xwtStringD          start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=xwtSpecial,@htmlPreproc
syn region  xwtStringS          start=+'+  skip=+\\\\\|\\'+  end=+'+  contains=xwtSpecial,@htmlPreproc
syn match   xwtSpecial          "\\\d\d\d\|\\."
syn match   xwtSpecialCharacter "'\\.'"
syn match   xwtNumber           "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
syn match   xwtHexColor         +"#[0-9A-Fa-f]\{3,8}"+ 
syn keyword xwtNull             null NULL Null

syn cluster xwtComments contains=xwtLineComment,xwtComment,xwtComment2,xwtHeaderComments
syn match   xwtLineComment      "\/\/.*$" contains=xwtTodo
syn match   xwtCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
syn region  xwtCommentString    start=+"+  skip=+\\\\\|\\"+  end=+"+ end=+\*/+me=s-1,he=s-1 contains=xwtSpecial,xwtCommentSkip,@htmlPreproc
syn region  xwtComment2String   start=+"+  skip=+\\\\\|\\"+  end=+$\|"+  contains=xwtSpecial,@htmlPreproc
syn region  xwtComment          start="/\*"  end="\*/" contains=xwtCommentString,xwtCharacter,xwtNumber,xwtTodo
syn region  xwtComment2         start=+<!--+ end=+-->+ contains=xwtTodo
" FIXME: The start= regex isn't very efficient, but I couldn't get anything else to work
syn region  xwtHeaderComments
    \ start=+\(<xwt>\_.\)\@<=\_.+     
    \ end=+\(<static\|<template\|<import\|<preapply\|<redirect\|<postapply\)\@=+
    \ contains=xwtTodo
    \ extend

"if main_syntax == "xwt"
"  syn sync ccomment @xwtComments
"endif


" =====  ECMAScript Stuff ===================================================================================

syn cluster javaScript contains=javaScriptConditional,javaScriptRepeat,javaScriptBranch,javaScriptOperator,javaScriptType,
    \ javaScriptStatement,javaScriptFunction,javaScriptBoolean,javaScriptBraces,
    \ javaScriptParen

syn keyword javaScriptConditional      if else
syn keyword javaScriptRepeat           while for
syn keyword javaScriptBranch           break continue switch case default
syn keyword javaScriptOperator         new in
syn keyword javaScriptType             this var
syn keyword javaScriptStatement        return with
syn keyword javaScriptFunction         function
syn keyword javaScriptBoolean          true false
syn match   javaScriptBraces           "[{}]"

" catch errors caused by wrong parenthesis
syn match   javaScriptInParen     contained "[{}]"
syn region  javaScriptParen       transparent start="(" end=")" contains=javaScriptParen,javaScript.*,
    \ xwtError,jSArrayFunction,jSArrayKeyword,@xwtPrimitive,@xwt
syn match   javaScrParenError  ")"

syn region  javaScriptMath   start=+math+ end=+\(\.\w\+\)\?+ contains=jSMathProperty,jSMathFunction,jSMathKeyword
syn keyword jSMathKeyword    contained math
syn keyword jSMathProperty   contained E LN10 LN2 LOG10E LOG2E PI SQRT1_2 SQRT2
syn keyword jSMathFunction   contained abs acos asin atan atan2 ceil cos exp floor log max min pow random round sin sqrt tan
syn region  javaScriptDate   start=+date+ end=+\(\.\w\+\)\?+ contains=jSDateKeyword,jSDateFunction
syn keyword jSDateKeyword    contained date
syn keyword jSDateFunction   contained getDate getDay getFullYear getHours getMilliseconds getMinutes getMonth getSeconds getTime
syn keyword jSDateFunction   contained getTimezoneOffset getUTCDate getUTCDay getUTCFullYear getUTCHours getUTCMilliseconds
syn keyword jSDateFunction   contained getUTCMinutes getUTCMonth getUTCSeconds
syn keyword jSDateFunction   contained setDate setDay setFullYear setHours setMilliseconds setMinutes setMonth setSeconds setTime
syn keyword jSDateFunction   contained setTimezoneOffset setUTCDate setUTCDay setUTCFullYear setUTCHours setUTCMilliseconds
syn keyword jSDateFunction   contained setUTCMinutes setUTCMonth setUTCSeconds
syn keyword jSDateFunction   contained toGMTString toLocaleString toUTCString toString toSource valueOf
syn region  javaScriptString start=+string+ end=+\(\.\w\+\)\?+ contains=jSStringKeyword,jSStringFunction
syn keyword jSStringKeyword  contained string 
syn keyword jSStringFunction contained charAt charCodeAt concat fromCharCode indexOf lastIndexOf replace search slice split substr
syn keyword jSStringFunction contained substring toLowerCase toSource toString toUpperCase valueOf
syn keyword jSArrayFunction  contained concat join pop push shift slice splice sort toSource toString unshift valueOf
syn keyword jSArrayKeyword   contained length



" =====  XML-ish Stuff ======================================================================================

syn cluster xwtXML contains=xwtTag,xwtEndTag,xwtEntity

" punctuation (within attributes) e.g. <tag xwt:foo.attribute ...>
syn match   xwtAttribPunct +[:.]+ contained display

" attribute, everything before the '='
" PROVIDES: @xwtAttribHook
" EXAMPLE: <tag foo.attribute = "value">
"               ^^^^^^^^^^^^^
syn match xwtAttrib +[-'"<]\@<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>\(['">]\@!\|$\)+ 
    \ contained contains=xwtAttribPunct,@xwtAttribHook display

" namespace spec
" PROVIDES: @xwtNamespaceHook
" EXAMPLE: <xsl:for-each select = "lola">
"           ^^^
if exists("g:xwt_namespace_transparent")
    syn match   xwtNamespace +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+ contained contains=@xwtNamespaceHook transparent display
else
    syn match   xwtNamespace +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+ contained contains=@xwtNamespaceHook display
endif

" tag name
" PROVIDES: @xwtTagHook
" EXAMPLE: <tag foo.attribute = "value">
"           ^^^
syn match   xwtTagName +[<]\@<=[^ /!?<>"']\++ contained contains=xwtNamespace,xwtAttribPunct,@xwtTagHook display

" start tag
" use matchgroup=xwtTag to skip over the leading '<'
" PROVIDES: @xwtStartTagHook
" EXAMPLE: <tag id="whoops">
"          s^^^^^^^^^^^^^^^e
syn region   xwtTag matchgroup=xwtTag start=+<[^ /!?<>"']\@=+ matchgroup=xwtTag end=+>+ contained
    \ contains=xwtError,xwtTagName,xwtAttrib,xwtEqual,xwtStringD,xwtStringS,@xwtStartTagHook

" end tag name
" PROVIDES: @xwtTagHook
" EXAMPLE: </tag>
"            ^^^
syn match   xwtEndTagName +\(</\)\@<=[^ /!?<>"']\++ contained contains=xwtNamespace,xwtAttribPunct,@xwtTagHook display

" highlight the end tag
" PROVIDES: @xwtTagHook
" (should we provide a separate @xwtEndTagHook ?)
" EXAMPLE: </tag>
"          ^^^^^^
syn region   xwtEndTag matchgroup=xwtEndTag start=+</[^ /!?<>"']\@=+ matchgroup=xwtEndTag end=+>+ contained
    \ contains=xwtError,xwtEndTagName,@xwtTagHook

" &entities;
syn match   xwtEntity                 "&[^; \t]*;" contains=xwtEntityPunct
syn match   xwtEntityPunct  contained "[&.;]"

" tag elements with syntax-folding.
" NOTE: NO HIGHLIGHING -- highlighing is done by contained elements
" PROVIDES: @xwtRegionHook
" EXAMPLE:
" <tag id="whoops">
"   <!-- comment -->
"   <another.tag></another.tag>
"   <empty.tag/>
"   some data
" </tag>
syn region   xwtRegion start=+<\z([^ /!?<>"']\+\)+ skip=+<!--\_.\{-}-->+ end=+</\z1\_\s\{-}>+ matchgroup=xwtEndTag end=+/>+ fold
    \ contains=xwtRegion,xwtReadTrap,xwtWriteTrap,xwtObject,jSArrayFunction,jSArrayKeyword,
    \ @xwtPrimitive,@xwtXML,@xwt,@javaScript,@xwtComments,@xwtRegionHook
    \ keepend
    \ extend



" =====  XWT-Specific Stuff  ======================================================================================

syn cluster xwt contains=xwtReadTrap,xwtWriteTrap,xwtEventProperty,xwtRootBoxProperty,xwtObject,xwtFunction,xwtArg,@xwtBox

" The '+=' of a read/write trap
syn match  xwtReadTrap             "\(+=\)\(\s*function\s*(\s*)\)\@="        contained
syn match  xwtWriteTrap            "\(+=\)\(\s*function\s*(\s*\w\+\s*)\)\@=" contained

syn cluster xwtBox             contains=xwtBoxRef,xwtBoxRefName,xwtBoxProperty
" In a box reference '$foo',  '$' is the xwtBoxRef and 'foo' is the xwtBoxRefName
syn match   xwtBoxRef          "\$\(\w\+\)\@=" contained
syn match   xwtBoxRefName      "\$\@<=\(\w\+\)" contained
syn keyword xwtBoxProperty     contained fill stroke image tile fixedaspect text path font
syn keyword xwtBoxProperty     contained shrink hshrink vshrink width height cols rows colspan rowspan align invisible
syn keyword xwtBoxProperty     contained absolute x y globalx globaly minwidth maxwidth minheight maxheight
syn keyword xwtBoxProperty     contained numchildren redirect childadded childremoved
syn keyword xwtBoxProperty     contained cursor mousex mousey static mouseinside root thisbox indexof

syn match   xwtEventProperty   +Press[123]\|Release[123]\|Click[123]\|DoubleClick[123]+ contained
syn keyword xwtEventProperty   contained Enter Leave Move KeyPressed KeyReleased SizeChange PosChange

syn keyword xwtRootBoxProperty contained Focused Maximized Minimized Close icon titlebar toback tofront

syn region  xwtArg             start=+arguments+ end=+\(\.\w\+\)\?+ contains=xwtArgKeyword,xwtBoxProperty
syn keyword xwtArgKeyword      contained arguments length trapee trapname cascade callee

syn region  xwtObject          start=+xwt+ end=+\(\.\w\+\)\?+ contains=xwtObjectKeyword,xwtFunction
    \ ,xwtLog,xwtUI,xwtFS,xwtRPC,xwtThread,xwtStream,xwtCrypto,javaScriptMath,javaScriptDate,javaScriptString
syn keyword xwtObjectKeyword   contained xwt box origin
syn keyword xwtFunction        contained apply clone graft regexp

syn region  xwtLog             start=+log+ end=+\(\.\w\+\)\?+ contains=xwtLogKeyword,xwtLogFunction
syn keyword xwtLogKeyword      contained log
syn keyword xwtLogFunction     contained print dump
syn region  xwtUI              start=+ui+ end=+\(\.\w\+\)\?+ contains=xwtUIKeyword,xwtUIFunction,xwtKey,xwtScreen,xwtMouse
syn keyword xwtUIKeyword       contained ui clipboard maxdim frame window
syn keyword xwtUIFunction      contained browser
syn region  xwtKey             start=+key+ end=+\(\.\w\+\)\?+ contains=xwtKeyKeyword,xwtAlt
syn keyword xwtKeyKeyword      contained key control shift 
syn region  xwtAlt             start=+alt+ end=+\(\.\w\+\)\?+ contains=xwtAltKeyword
syn keyword xwtAltKeyword      contained alt name
syn region  xwtScreen          start=+screen+ end=+\(\.\w\+\)\?+ contains=xwtScreenKeyword
syn keyword xwtScreenKeyword   contained screen width height
syn region  xwtMouse           start=+mouse+ end=+\(\.\w\+\)\?+ contains=xwtMouseKeyword
syn keyword xwtMouseKeyword    contained mouse button
syn region  xwtFS              start=+fs+ end=+\(\.\w\+\)\?+ contains=xwtFSKeyword
syn keyword xwtFSKeyword       contained fs home temp 
syn region  xwtRPC             start=+rpc+ end=+\(\.\w\+\)\?+ contains=xwtRPCKeyword,xwtRPCFunction
syn keyword xwtRPCKeyword      contained rpc
syn keyword xwtRPCFunction     contained xml soap
syn region  xwtThread          start=+thread+ end=+\(\.\w\+\)\?+ contains=xwtThreadKeyword,xwtThreadFunction
syn keyword xwtThreadKeyword   contained thread 
syn keyword xwtThreadFunction  contained yield sleep 
syn region  xwtStream          start=+stream+ end=+\(\.\w\+\)\?+ contains=xwtStreamKeyword,xwtStreamFunction,xwtParse
syn keyword xwtStreamKeyword   contained stream 
syn keyword xwtStreamFunction  contained unzip uncab cache watch fromURL 
syn region  xwtParse           start=+parse+ end=+\(\.\w\+\)\?+ contains=xwtParseKeyword,xwtParseFunction
syn keyword xwtParseKeyword    contained parse 
syn keyword xwtParseFunction   contained html xml utf8 
syn region  xwtCrypto          start=+crypto+ end=+\(\.\w\+\)\?+ contains=xwtCryptoKeyword,xwtCryptoFunction
syn keyword xwtCryptoKeyword   contained crypto 
syn keyword xwtCryptoFunction  contained rsa rc4 md5 sha1 


" ================================================================================================================

syn sync match xwtSync grouphere   xwtRegion  +\_.\(<[^ /!?<>"']\+\)\@=+
" syn sync match xwtSync grouphere  xwtRegion "<[^ /!?<>"']*>"
syn sync match xwtSync groupthere  xwtRegion  +</[^ /!?<>"']\+>+

"syn sync minlines=100


" ====  Highlighting  ==============================================================================================

" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_javascript_syn_inits")
    if version < 508
        let did_javascript_syn_inits = 1
        command -nargs=+ HiLink hi link <args>
    else
        command -nargs=+ HiLink hi def link <args>
    endif

    HiLink xwtError		        Error
    HiLink xwtTodo                      Todo
                 
    HiLink xwtStringD		        String
    HiLink xwtStringS		        String
                 
    HiLink xwtSpecial                   Special
"    HiLink xwtSpecialCharacter          javaScriptSpecial
    HiLink xwtSpecialCharacter          Special
    HiLink xwtCharacter                 Character
"    HiLink xwtNumber                    javaScriptValue
    HiLink xwtNumber                    Number
    HiLink xwtHexColor                  Number
    HiLink xwtNull                      Special
                 
    HiLink xwtLineComment               Comment
    HiLink xwtComment                   Comment
    HiLink xwtComment2                  Comment
    HiLink xwtHeaderComments            Comment


    HiLink javaScriptConditional        Conditional
    HiLink javaScriptRepeat             Repeat
    HiLink javaScriptBranch             Conditional
    HiLink javaScriptOperator           Operator
    HiLink javaScriptType               Type
    HiLink javaScriptStatement          Statement
    HiLink javaScriptFunction           Function
    HiLink javaScriptBraces             Function
    HiLink javaScriptError              Error
"    HiLink javaScrParenError            javaScriptError
"    HiLink javaScriptInParen            javaScriptError
    HiLink javaScrParenError            Error
    HiLink javaScriptInParen            Error
    HiLink javaScriptBoolean            Boolean

    HiLink jSMathKeyword                Keyword
    HiLink jSMathProperty               Keyword
    HiLink jSMathFunction               Function
    HiLink jSDateKeyword                Keyword
    HiLink jSDateFunction               Function
    HiLink jSStringKeyword              Keyword
    HiLink jSStringFunction             Function
    HiLink jSArrayKeyword               Keyword
    HiLink jSArrayFunction              Function

    HiLink xwtTag		        Function
    HiLink xwtTagName		        Statement
    HiLink xwtEndTag		        Function
    HiLink xwtEndTagName                Statement
    if !exists("g:xwt_namespace_transparent")
        HiLink xwtNamespace	        Tag
    endif
    HiLink xwtEntity		        Statement
    HiLink xwtEntityPunct	        Statement
    HiLink xwtAttribPunct	        Normal
    HiLink xwtAttrib		        Identifier


    HiLink xwtReadTrap                  Special
    HiLink xwtWriteTrap                 Underlined

    HiLink xwtBoxRef                    Special     
    HiLink xwtBoxRefName                Keyword     
    HiLink xwtBoxProperty               Keyword     
    HiLink xwtRootBoxProperty           Keyword     
    HiLink xwtEventProperty             Keyword     

    HiLink xwtObjectKeyword             Keyword
    HiLink xwtFunction                  Function
    HiLink xwtArgKeyword                Keyword
    HiLink xwtLogKeyword                Keyword 
    HiLink xwtLogFunction               Function
    HiLink xwtUIKeyword                 Keyword 
    HiLink xwtUIFunction                Function
    HiLink xwtKeyKeyword                Keyword 
    HiLink xwtAltKeyword                Keyword 
    HiLink xwtScreenKeyword             Keyword 
    HiLink xwtMouseKeyword              Keyword 
    HiLink xwtFSKeyword                 Keyword 
    HiLink xwtRPCKeyword                Keyword 
    HiLink xwtRPCFunction               Function
    HiLink xwtThreadKeyword             Keyword 
    HiLink xwtThreadFunction            Function
    HiLink xwtStreamKeyword             Keyword 
    HiLink xwtStreamFunction            Function
    HiLink xwtParseKeyword              Keyword 
    HiLink xwtParseFunction             Function
    HiLink xwtCryptoKeyword             Keyword 
    HiLink xwtCryptoFunction            Function

    "HiLink xwtProcessingDelim	        Comment
    "HiLink xwtProcessing	        Type

    "HiLink xwtCdata		        String
    "HiLink xwtCdataCdata	        Statement
    "HiLink xwtCdataStart	        Type
    "HiLink xwtCdataEnd	                Type

    "HiLink xwtDocTypeDecl	        Function
    "HiLink xwtDocTypeKeyword	        Statement
    "HiLink xwtInlineDTD	        Function

    delcommand HiLink
endif


let b:current_syntax = "xwt"
if main_syntax == 'xwt'
  unlet main_syntax
endif

let &cpo = s:xwt_cpo_save
unlet s:xwt_cpo_save

" vim: ts=8

"  ====  Extra CData and DTD stuff (might need later) ==============================================================

" CData sections
"
" PROVIDES: @xwtCdataHook
"
"syn region    xwtCdata
"    \ start=+<!\[CDATA\[+
"    \ end=+]]>+
"    \ contains=xwtCdataStart,xwtCdataEnd,@xwtCdataHook
"    \ keepend
"    \ extend

" using the following line instead leads to corrupt folding at CDATA regions
" syn match    xwtCdata      +<!\[CDATA\[\_.\{-}]]>+  contains=xwtCdataStart,xwtCdataEnd,@xwtCdataHook
"syn match    xwtCdataStart +<!\[CDATA\[+  contained contains=xwtCdataCdata
"syn keyword  xwtCdataCdata CDATA          contained
"syn match    xwtCdataEnd   +]]>+          contained


" Processing instructions
" This allows "?>" inside strings -- good idea?
"syn region  xwtProcessing matchgroup=xwtProcessingDelim start="<?" end="?>" contains=xwtAttrib,xwtEqual,xwtString


" DTD -- we use dtd.vim here
"syn region  xwtDocType matchgroup=xwtDocTypeDecl
"    \ start="<!DOCTYPE"he=s+2,rs=s+2 end=">"
"    \ fold
"    \ contains=xwtDocTypeKeyword,xwtInlineDTD,xwtString
"syn keyword xwtDocTypeKeyword contained DOCTYPE PUBLIC SYSTEM
"syn region  xwtInlineDTD contained matchgroup=xwtDocTypeDecl start="\[" end="]" contains=@xwtDTD
"syn include @xwtDTD <sfile>:p:h/dtd.vim
"unlet b:current_syntax


" synchronizing
" TODO !!! to be improved !!!

"syn sync match xwtSyncDT grouphere  xwtDocType +\_.\(<!DOCTYPE\)\@=+
" syn sync match xwtSyncDT groupthere  NONE       +]>+