Edgewall Software

source: contrib/vim/syntax/genshi.vim

Last change on this file was 490, checked in by mgood, 17 years ago

Vim: more fixes for Python expression coloring inside HTML tags

File size: 3.2 KB
Line 
1" Vim syntax file
2" Language:     Genshi
3" Maintainer:   Matt Good <matt@matt-good.net>
4" Last Change:  Sun Jan  1, 2006
5" Filenames:    *.html,*.htm,*.xml
6"
7" This syntax file covers the Genshi XML template language.
8" Based on Karl Guertin's Kid syntax file
9
10if !exists('b:genshi_type')
11  if expand('%:e') =~ 'htm[l]\?'
12    let b:genshi_type = 'html'
13  else
14    let b:genshi_type = 'xml'
15  endif
16endif
17if 'html' == b:genshi_type
18    doau Syntax xhtml
19elseif 'xml' == b:genshi_type
20    doau Syntax xml
21endif
22
23unlet b:current_syntax
24let python_highlight_builtins = 1
25syn include @pythonCode syntax/python.vim
26syn case match
27
28syn keyword genshiFunctions XML ET defined value_of contained
29
30syn clear pythonString
31syn region pythonString start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+
32    \ contains=pythonEscape matchgroup=Normal
33syn region pythonString start=+[uU]\="""+ end=+"""+
34    \ contains=pythonEscape matchgroup=Normal
35syn region pythonString start=+[uU]\='''+ end=+'''+
36    \ contains=pythonEscape matchgroup=Normal
37
38" The python string highlighting just doesn't work when the python is in an
39" attr, hence this method.
40syn region npythonString start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+
41    \ contains=pythonEscape matchgroup=Normal
42hi def link   npythonString    String
43
44
45syn match genshiAttr containedin=htmlTag,xmlTag contained
46    \ nextgroup=genshiPythonAttr
47    \ +[^<]\<py:\(attrs\|choose\|content\|def\|for\|if\|match\|otherwise\|replace\|strip\|when\|with\)\>+hs=s+1
48
49syn region genshiTag start=+<py:+he=e-3 end=+>+
50    \ contains=genshiTagName,genshiTagAttr,genshiPythonAttr
51syn region genshiEndTag start=+</py:+he=e-3 end=+>+
52    \ contains=genshiTagName
53syn match genshiTagName contained
54    \ '\<py:\(choose\|def\|for\|if\|match\|otherwise\|when\|with\)\>'
55syn keyword genshiTagAttr contained each function path test vars
56
57syn match genshiDelims '\${' contained
58syn match genshiDelims '}' contained
59syn match genshiDelims '<?python' contained
60syn match genshiDelims '?>' contained
61
62syn match genshiXmlError "&\%(\S\+;\)\@!\|<\%(?\)\@!\|?\@<!>" contained
63
64syn region genshiPython start="<?python" end="?>"
65    \ contains=genshiFunctions,@pythonCode,genshiDelims,npythonString,
66    \          genshiXmlError
67    \ transparent keepend
68syn region genshiPython start="\${" end="}"
69    \ contains=genshiFunctions,@pythonCode,genshiDelims,npythonString,
70    \          genshiXmlError
71    \ transparent keepend
72    \ containedin=htmlString,xmlString,htmlHead,javaScript,
73    \             htmlBold,htmlBoldUnderline,htmlBoldItalic,
74    \             htmlUnderline,htmlUnderlineItalic,htmlItalic,
75    \             htmlBoldUnderlineItalic,htmlH1,htmlH2,htmlH3,
76    \             htmlH4,htmlH5,htmlTitle,htmlLink
77
78syn region genshiPythonAttr start=+\%(=\)"+ end=+"+
79    \ contains=genshiFunctions,genshiPython,genshiDelims
80    \ transparent keepend contained
81syn region genshiPython start=+"+hs=s+1, end=+"+he=e-1
82    \ contains=genshiFunctions,@pythonCode,genshiXmlError
83    \ transparent contained
84
85hi link   genshiAttr       PreProc
86hi link   genshiTagAttr    PreProc
87hi link   genshiTag        Function
88hi link   genshiEndTag     Identifier
89hi link   genshiTagName    PreProc
90hi link   genshiDelims     Delimiter
91hi link   genshiXmlError   Error
92hi link   genshiFunctions  Keyword
93
94let b:current_syntax = "genshi"
Note: See TracBrowser for help on using the repository browser.