-- vim: set ft=lua ts=2 sw=2 et : -- Language definition for PDF files -- Author: Roland Hieber -- Date: 2013-11-22 -- Known Bugs: -- * Does not highlight files with MacOS (CR-only) line endings -- * Does not (yet) highlight inside streams due to limitations in the library -- Description="Highlighting definitions for the Portable Document Format (PDF)" IgnoreCase=false -- File Structure PreProcessor={ Prefix=[[%PDF-[0-9]\.[0-9]|%%EOF|xref|startxref|trailer]] } -- Comments. But do not match file structure elements. Comments={ { Block=false, Delimiter={ [[%(?!PDF-[0-9]\.[0-9]|%EOF)]] }, }, } -- Numbers: 0.45, +1.34, -.4, 123, 4., and so on. Digits=[[ [-+]?\.[0-9]+|[-+]?[0-9]+\.?[0-9]* ]] -- Strings: (string), and streams Strings={ DelimiterPairs= { { Open=[[ \( ]], Close=[[ \) ]] }, { Open=[[ < ]], Close=[[ > ]] }, { Open=[[ ^stream ]], Close=[[ ^endstream ]], Raw=true }, } } -- Note: we highlight dictionary and array syntax as "keywords", so we have to -- include them in Identifiers. This definition basically matches the allowed -- characters for Names. Also, we do not want to match Numbers, Streams, -- References and file structure elements as identifiers Identifiers=[[ (?!%PDF-[0-9]\.[0-9]|%%EOF|xref|startxref|trailer|[0-9]+\s+[0-9]+\s+(R|obj)|[-+]?\.[0-9]+|[-+]?[0-9]+\.?[0-9]*)[^\s\[\]\(\){}<>/%]+ ]] Keywords={ -- Indirect Objects { Id=1, Regex=[[ [0-9]+\s+[0-9]+\s+(obj|R)|endobj]], Group=0 }, -- Arrays and Dictionaries { Id=2, Regex=[[ \[|\]|<<|>> ]], }, -- Names { Id=3, Regex=[[ /[^\s\[\]\(\){}<>/%]+ ]], }, -- Constants { Id=4, --List={"true", "false", "null"}, Regex=[[ true|false|null ]], }, }