xref: /vim-8.2.3635/runtime/syntax/pdf.vim (revision 01a6c216)
1" Vim syntax file
2" Language:	PDF
3" Maintainer:	Tim Pope <[email protected]>
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"
74