blob: 86d80daa6a6de2cdc1f4662c07f27007de990183 [file] [log] [blame]
Bram Moolenaara7241f52008-06-24 20:39:31 +00001" Vim syntax file
2" Language: PDF
3" Maintainer: Tim Pope <vimNOSPAM@tpope.info>
4" Last Change: 2007 Dec 16
5
6if exists("b:current_syntax")
7 finish
8endif
9
10if !exists("main_syntax")
11 let main_syntax = 'pdf'
12endif
13
14syn include @pdfXML syntax/xml.vim
15
16syn case match
17
18syn cluster pdfObjects contains=pdfBoolean,pdfConstant,pdfNumber,pdfFloat,pdfName,pdfHexString,pdfString,pdfArray,pdfHash,pdfReference,pdfComment
19syn keyword pdfBoolean true false contained
20syn keyword pdfConstant null contained
21syn match pdfNumber "[+-]\=\<\d\+\>"
22syn match pdfFloat "[+-]\=\<\%(\d\+\.\|\d*\.\d\+\)\>" contained
23
24syn match pdfNameError "#\X\|#\x\X\|#00" contained containedin=pdfName
25syn match pdfSpecialChar "#\x\x" contained containedin=pdfName
26syn match pdfName "/[^[:space:]\[\](){}<>/]*" contained
27syn match pdfHexError "[^[:space:][:xdigit:]<>]" contained
28"syn match pdfHexString "<\s*\x[^<>]*\x\s*>" contained contains=pdfHexError
29"syn match pdfHexString "<\s*\x\=\s*>" contained
30syn region pdfHexString matchgroup=pdfDelimiter start="<<\@!" end=">" contained contains=pdfHexError
31syn match pdfStringError "\\." contained containedin=pdfString
32syn match pdfSpecialChar "\\\%(\o\{1,3\}\|[nrtbf()\\]\)" contained containedin=pdfString
33syn region pdfString matchgroup=pdfDelimiter start="\\\@<!(" end="\\\@<!)" contains=pdfString
34
35syn region pdfArray matchgroup=pdfOperator start="\[" end="\]" contains=@pdfObjects contained
36syn region pdfHash matchgroup=pdfOperator start="<<" end=">>" contains=@pdfObjects contained
37syn match pdfReference "\<\d\+\s\+\d\+\s\+R\>"
38"syn keyword pdfOperator R contained containedin=pdfReference
39
40syn region pdfObject matchgroup=pdfType start="\<obj\>" end="\<endobj\>" contains=@pdfObjects
41syn region pdfObject matchgroup=pdfType start="\<obj\r\=\n" end="\<endobj\>" contains=@pdfObjects fold
42
43" Do these twice. The ones with only newlines are foldable
44syn region pdfStream matchgroup=pdfType start="\<stream\r\=\n" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject
45syn region pdfXMLStream matchgroup=pdfType start="\<stream\r\=\n\_s*\%(<?\)\@=" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject contains=@pdfXML
46syn region pdfStream matchgroup=pdfType start="\<stream\n" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject fold
47syn region pdfXMLStream matchgroup=pdfType start="\<stream\n\_s*\%(<?\)\@=" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject contains=@pdfXML fold
48
49syn region pdfPreProc start="\<xref\%(\r\|\n\|\r\n\)" end="^trailer\%(\r\|\n\|\r\n\)" skipwhite skipempty nextgroup=pdfHash contains=pdfNumber fold
50syn keyword pdfPreProc startxref
51syn match pdfComment "%.*\%(\r\|\n\)" contains=pdfPreProc
52syn match pdfPreProc "^%\%(%EOF\|PDF-\d\.\d\)\(\r\|\n\)"
53
54hi def link pdfOperator Operator
55hi def link pdfNumber Number
56hi def link pdfFloat Float
57hi def link pdfBoolean Boolean
58hi def link pdfConstant Constant
59hi def link pdfName Identifier
60hi def link pdfNameError pdfStringError
61hi def link pdfHexString pdfString
62hi def link pdfHexError pdfStringError
63hi def link pdfString String
64hi def link pdfStringError Error
65hi def link pdfSpecialChar SpecialChar
66hi def link pdfDelimiter Delimiter
67hi def link pdfType Type
68hi def link pdfReference Tag
69hi def link pdfStream NonText
70hi def link pdfPreProc PreProc
71hi def link pdfComment Comment
72
73let b:current_syntax = "pdf"