summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/pdf.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/pdf.vim')
-rw-r--r--runtime/syntax/pdf.vim73
1 files changed, 73 insertions, 0 deletions
diff --git a/runtime/syntax/pdf.vim b/runtime/syntax/pdf.vim
new file mode 100644
index 0000000..86d80da
--- /dev/null
+++ b/runtime/syntax/pdf.vim
@@ -0,0 +1,73 @@
+" Vim syntax file
+" Language: PDF
+" Maintainer: Tim Pope <vimNOSPAM@tpope.info>
+" Last Change: 2007 Dec 16
+
+if exists("b:current_syntax")
+ finish
+endif
+
+if !exists("main_syntax")
+ let main_syntax = 'pdf'
+endif
+
+syn include @pdfXML syntax/xml.vim
+
+syn case match
+
+syn cluster pdfObjects contains=pdfBoolean,pdfConstant,pdfNumber,pdfFloat,pdfName,pdfHexString,pdfString,pdfArray,pdfHash,pdfReference,pdfComment
+syn keyword pdfBoolean true false contained
+syn keyword pdfConstant null contained
+syn match pdfNumber "[+-]\=\<\d\+\>"
+syn match pdfFloat "[+-]\=\<\%(\d\+\.\|\d*\.\d\+\)\>" contained
+
+syn match pdfNameError "#\X\|#\x\X\|#00" contained containedin=pdfName
+syn match pdfSpecialChar "#\x\x" contained containedin=pdfName
+syn match pdfName "/[^[:space:]\[\](){}<>/]*" contained
+syn match pdfHexError "[^[:space:][:xdigit:]<>]" contained
+"syn match pdfHexString "<\s*\x[^<>]*\x\s*>" contained contains=pdfHexError
+"syn match pdfHexString "<\s*\x\=\s*>" contained
+syn region pdfHexString matchgroup=pdfDelimiter start="<<\@!" end=">" contained contains=pdfHexError
+syn match pdfStringError "\\." contained containedin=pdfString
+syn match pdfSpecialChar "\\\%(\o\{1,3\}\|[nrtbf()\\]\)" contained containedin=pdfString
+syn region pdfString matchgroup=pdfDelimiter start="\\\@<!(" end="\\\@<!)" contains=pdfString
+
+syn region pdfArray matchgroup=pdfOperator start="\[" end="\]" contains=@pdfObjects contained
+syn region pdfHash matchgroup=pdfOperator start="<<" end=">>" contains=@pdfObjects contained
+syn match pdfReference "\<\d\+\s\+\d\+\s\+R\>"
+"syn keyword pdfOperator R contained containedin=pdfReference
+
+syn region pdfObject matchgroup=pdfType start="\<obj\>" end="\<endobj\>" contains=@pdfObjects
+syn region pdfObject matchgroup=pdfType start="\<obj\r\=\n" end="\<endobj\>" contains=@pdfObjects fold
+
+" Do these twice. The ones with only newlines are foldable
+syn region pdfStream matchgroup=pdfType start="\<stream\r\=\n" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject
+syn region pdfXMLStream matchgroup=pdfType start="\<stream\r\=\n\_s*\%(<?\)\@=" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject contains=@pdfXML
+syn region pdfStream matchgroup=pdfType start="\<stream\n" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject fold
+syn region pdfXMLStream matchgroup=pdfType start="\<stream\n\_s*\%(<?\)\@=" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject contains=@pdfXML fold
+
+syn region pdfPreProc start="\<xref\%(\r\|\n\|\r\n\)" end="^trailer\%(\r\|\n\|\r\n\)" skipwhite skipempty nextgroup=pdfHash contains=pdfNumber fold
+syn keyword pdfPreProc startxref
+syn match pdfComment "%.*\%(\r\|\n\)" contains=pdfPreProc
+syn match pdfPreProc "^%\%(%EOF\|PDF-\d\.\d\)\(\r\|\n\)"
+
+hi def link pdfOperator Operator
+hi def link pdfNumber Number
+hi def link pdfFloat Float
+hi def link pdfBoolean Boolean
+hi def link pdfConstant Constant
+hi def link pdfName Identifier
+hi def link pdfNameError pdfStringError
+hi def link pdfHexString pdfString
+hi def link pdfHexError pdfStringError
+hi def link pdfString String
+hi def link pdfStringError Error
+hi def link pdfSpecialChar SpecialChar
+hi def link pdfDelimiter Delimiter
+hi def link pdfType Type
+hi def link pdfReference Tag
+hi def link pdfStream NonText
+hi def link pdfPreProc PreProc
+hi def link pdfComment Comment
+
+let b:current_syntax = "pdf"