codekingpro/portable-devtools
114k
1"""2 pygments.lexers.graphics3 ~~~~~~~~~~~~~~~~~~~~~~~~4 5 Lexers for computer graphics and plotting related languages.6 7 :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.8 :license: BSD, see LICENSE for details.9"""10 11from pygments.lexer import RegexLexer, words, include, bygroups, using, \12 this, default13from pygments.token import Text, Comment, Operator, Keyword, Name, \14 Number, Punctuation, String, Whitespace15 16__all__ = ['GLShaderLexer', 'PostScriptLexer', 'AsymptoteLexer', 'GnuplotLexer',17 'PovrayLexer', 'HLSLShaderLexer']18 19 20class GLShaderLexer(RegexLexer):21 """22 GLSL (OpenGL Shader) lexer.23 """24 name = 'GLSL'25 aliases = ['glsl']26 filenames = ['*.vert', '*.frag', '*.geo']27 mimetypes = ['text/x-glslsrc']28 url = 'https://www.khronos.org/api/opengl'29 version_added = '1.1'30 31 tokens = {32 'root': [33 (r'#(?:.*\\\n)*.*$', Comment.Preproc),34 (r'//.*$', Comment.Single),35 (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),36 (r'\+|-|~|!=?|\*|/|%|<<|>>|<=?|>=?|==?|&&?|\^|\|\|?',37 Operator),38 (r'[?:]', Operator), # quick hack for ternary39 (r'\bdefined\b', Operator),40 (r'[;{}(),\[\]]', Punctuation),41 # FIXME when e is present, no decimal point needed42 (r'[+-]?\d*\.\d+([eE][-+]?\d+)?', Number.Float),43 (r'[+-]?\d+\.\d*([eE][-+]?\d+)?', Number.Float),44 (r'0[xX][0-9a-fA-F]*', Number.Hex),45 (r'0[0-7]*', Number.Oct),46 (r'[1-9][0-9]*', Number.Integer),47 (words((48 # Storage qualifiers49 'attribute', 'const', 'uniform', 'varying',50 'buffer', 'shared', 'in', 'out',51 # Layout qualifiers52 'layout',53 # Interpolation qualifiers54 'flat', 'smooth', 'noperspective',55 # Auxiliary qualifiers56 'centroid', 'sample', 'patch',57 # Parameter qualifiers. Some double as Storage qualifiers58 'inout',59 # Precision qualifiers60 'lowp', 'mediump', 'highp', 'precision',61 # Invariance qualifiers62 'invariant',63 # Precise qualifiers64 'precise',65 # Memory qualifiers66 'coherent', 'volatile', 'restrict', 'readonly', 'writeonly',67 # Statements68 'break', 'continue', 'do', 'for', 'while', 'switch',69 'case', 'default', 'if', 'else', 'subroutine',70 'discard', 'return', 'struct'),71 prefix=r'\b', suffix=r'\b'),72 Keyword),73 (words((74 # Boolean values75 'true', 'false'),76 prefix=r'\b', suffix=r'\b'),77 Keyword.Constant),78 (words((79 # Miscellaneous types80 'void', 'atomic_uint',81 # Floating-point scalars and vectors82 'float', 'vec2', 'vec3', 'vec4',83 'double', 'dvec2', 'dvec3', 'dvec4',84 # Integer scalars and vectors85 'int', 'ivec2', 'ivec3', 'ivec4',86 'uint', 'uvec2', 'uvec3', 'uvec4',87 # Boolean scalars and vectors88 'bool', 'bvec2', 'bvec3', 'bvec4',89 # Matrices90 'mat2', 'mat3', 'mat4', 'dmat2', 'dmat3', 'dmat4',91 'mat2x2', 'mat2x3', 'mat2x4', 'dmat2x2', 'dmat2x3', 'dmat2x4',92 'mat3x2', 'mat3x3', 'mat3x4', 'dmat3x2', 'dmat3x3',93 'dmat3x4', 'mat4x2', 'mat4x3', 'mat4x4', 'dmat4x2', 'dmat4x3', 'dmat4x4',94 # Floating-point samplers95 'sampler1D', 'sampler2D', 'sampler3D', 'samplerCube',96 'sampler1DArray', 'sampler2DArray', 'samplerCubeArray',97 'sampler2DRect', 'samplerBuffer',98 'sampler2DMS', 'sampler2DMSArray',99 # Shadow samplers100 'sampler1DShadow', 'sampler2DShadow', 'samplerCubeShadow',101 'sampler1DArrayShadow', 'sampler2DArrayShadow',102 'samplerCubeArrayShadow', 'sampler2DRectShadow',103 # Signed integer samplers104 'isampler1D', 'isampler2D', 'isampler3D', 'isamplerCube',105 'isampler1DArray', 'isampler2DArray', 'isamplerCubeArray',106 'isampler2DRect', 'isamplerBuffer',107 'isampler2DMS', 'isampler2DMSArray',108 # Unsigned integer samplers109 'usampler1D', 'usampler2D', 'usampler3D', 'usamplerCube',110 'usampler1DArray', 'usampler2DArray', 'usamplerCubeArray',111 'usampler2DRect', 'usamplerBuffer',112 'usampler2DMS', 'usampler2DMSArray',113 # Floating-point image types114 'image1D', 'image2D', 'image3D', 'imageCube',115 'image1DArray', 'image2DArray', 'imageCubeArray',116 'image2DRect', 'imageBuffer',117 'image2DMS', 'image2DMSArray',118 # Signed integer image types119 'iimage1D', 'iimage2D', 'iimage3D', 'iimageCube',120 'iimage1DArray', 'iimage2DArray', 'iimageCubeArray',121 'iimage2DRect', 'iimageBuffer',122 'iimage2DMS', 'iimage2DMSArray',123 # Unsigned integer image types124 'uimage1D', 'uimage2D', 'uimage3D', 'uimageCube',125 'uimage1DArray', 'uimage2DArray', 'uimageCubeArray',126 'uimage2DRect', 'uimageBuffer',127 'uimage2DMS', 'uimage2DMSArray'),128 prefix=r'\b', suffix=r'\b'),129 Keyword.Type),130 (words((131 # Reserved for future use.132 'common', 'partition', 'active', 'asm', 'class',133 'union', 'enum', 'typedef', 'template', 'this',134 'resource', 'goto', 'inline', 'noinline', 'public',135 'static', 'extern', 'external', 'interface', 'long',136 'short', 'half', 'fixed', 'unsigned', 'superp', 'input',137 'output', 'hvec2', 'hvec3', 'hvec4', 'fvec2', 'fvec3',138 'fvec4', 'sampler3DRect', 'filter', 'sizeof', 'cast',139 'namespace', 'using'),140 prefix=r'\b', suffix=r'\b'),141 Keyword.Reserved),142 # All names beginning with "gl_" are reserved.143 (r'gl_\w*', Name.Builtin),144 (r'[a-zA-Z_]\w*', Name),145 (r'\.', Punctuation),146 (r'\s+', Whitespace),147 ],148 }149 150 151class HLSLShaderLexer(RegexLexer):152 """153 HLSL (Microsoft Direct3D Shader) lexer.154 """155 name = 'HLSL'156 aliases = ['hlsl']157 filenames = ['*.hlsl', '*.hlsli']158 mimetypes = ['text/x-hlsl']159 url = 'https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl'160 version_added = '2.3'161 162 tokens = {163 'root': [164 (r'#(?:.*\\\n)*.*$', Comment.Preproc),165 (r'//.*$', Comment.Single),166 (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),167 (r'\+|-|~|!=?|\*|/|%|<<|>>|<=?|>=?|==?|&&?|\^|\|\|?',168 Operator),169 (r'[?:]', Operator), # quick hack for ternary170 (r'\bdefined\b', Operator),171 (r'[;{}(),.\[\]]', Punctuation),172 # FIXME when e is present, no decimal point needed173 (r'[+-]?\d*\.\d+([eE][-+]?\d+)?f?', Number.Float),174 (r'[+-]?\d+\.\d*([eE][-+]?\d+)?f?', Number.Float),175 (r'0[xX][0-9a-fA-F]*', Number.Hex),176 (r'0[0-7]*', Number.Oct),177 (r'[1-9][0-9]*', Number.Integer),178 (r'"', String, 'string'),179 (words((180 'asm','asm_fragment','break','case','cbuffer','centroid','class',181 'column_major','compile','compile_fragment','const','continue',182 'default','discard','do','else','export','extern','for','fxgroup',183 'globallycoherent','groupshared','if','in','inline','inout',184 'interface','line','lineadj','linear','namespace','nointerpolation',185 'noperspective','NULL','out','packoffset','pass','pixelfragment',186 'point','precise','return','register','row_major','sample',187 'sampler','shared','stateblock','stateblock_state','static',188 'struct','switch','tbuffer','technique','technique10',189 'technique11','texture','typedef','triangle','triangleadj',190 'uniform','vertexfragment','volatile','while'),191 prefix=r'\b', suffix=r'\b'),192 Keyword),193 (words(('true','false'), prefix=r'\b', suffix=r'\b'),194 Keyword.Constant),195 (words((196 'auto','catch','char','const_cast','delete','dynamic_cast','enum',197 'explicit','friend','goto','long','mutable','new','operator',198 'private','protected','public','reinterpret_cast','short','signed',199 'sizeof','static_cast','template','this','throw','try','typename',200 'union','unsigned','using','virtual'),201 prefix=r'\b', suffix=r'\b'),202 Keyword.Reserved),203 (words((204 'dword','matrix','snorm','string','unorm','unsigned','void','vector',205 'BlendState','Buffer','ByteAddressBuffer','ComputeShader',206 'DepthStencilState','DepthStencilView','DomainShader',207 'GeometryShader','HullShader','InputPatch','LineStream',208 'OutputPatch','PixelShader','PointStream','RasterizerState',209 'RenderTargetView','RasterizerOrderedBuffer',210 'RasterizerOrderedByteAddressBuffer',211 'RasterizerOrderedStructuredBuffer','RasterizerOrderedTexture1D',212 'RasterizerOrderedTexture1DArray','RasterizerOrderedTexture2D',213 'RasterizerOrderedTexture2DArray','RasterizerOrderedTexture3D',214 'RWBuffer','RWByteAddressBuffer','RWStructuredBuffer',215 'RWTexture1D','RWTexture1DArray','RWTexture2D','RWTexture2DArray',216 'RWTexture3D','SamplerState','SamplerComparisonState',217 'StructuredBuffer','Texture1D','Texture1DArray','Texture2D',218 'Texture2DArray','Texture2DMS','Texture2DMSArray','Texture3D',219 'TextureCube','TextureCubeArray','TriangleStream','VertexShader'),220 prefix=r'\b', suffix=r'\b'),221 Keyword.Type),222 (words((223 'bool','double','float','int','half','min16float','min10float',224 'min16int','min12int','min16uint','uint'),225 prefix=r'\b', suffix=r'([1-4](x[1-4])?)?\b'),226 Keyword.Type), # vector and matrix types227 (words((228 'abort','abs','acos','all','AllMemoryBarrier',229 'AllMemoryBarrierWithGroupSync','any','AppendStructuredBuffer',230 'asdouble','asfloat','asin','asint','asuint','asuint','atan',231 'atan2','ceil','CheckAccessFullyMapped','clamp','clip',232 'CompileShader','ConsumeStructuredBuffer','cos','cosh','countbits',233 'cross','D3DCOLORtoUBYTE4','ddx','ddx_coarse','ddx_fine','ddy',234 'ddy_coarse','ddy_fine','degrees','determinant',235 'DeviceMemoryBarrier','DeviceMemoryBarrierWithGroupSync','distance',236 'dot','dst','errorf','EvaluateAttributeAtCentroid',237 'EvaluateAttributeAtSample','EvaluateAttributeSnapped','exp',238 'exp2','f16tof32','f32tof16','faceforward','firstbithigh',239 'firstbitlow','floor','fma','fmod','frac','frexp','fwidth',240 'GetRenderTargetSampleCount','GetRenderTargetSamplePosition',241 'GlobalOrderedCountIncrement','GroupMemoryBarrier',242 'GroupMemoryBarrierWithGroupSync','InterlockedAdd','InterlockedAnd',243 'InterlockedCompareExchange','InterlockedCompareStore',244 'InterlockedExchange','InterlockedMax','InterlockedMin',245 'InterlockedOr','InterlockedXor','isfinite','isinf','isnan',246 'ldexp','length','lerp','lit','log','log10','log2','mad','max',247 'min','modf','msad4','mul','noise','normalize','pow','printf',248 'Process2DQuadTessFactorsAvg','Process2DQuadTessFactorsMax',249 'Process2DQuadTessFactorsMin','ProcessIsolineTessFactors',250 'ProcessQuadTessFactorsAvg','ProcessQuadTessFactorsMax',251 'ProcessQuadTessFactorsMin','ProcessTriTessFactorsAvg',252 'ProcessTriTessFactorsMax','ProcessTriTessFactorsMin',253 'QuadReadLaneAt','QuadSwapX','QuadSwapY','radians','rcp',254 'reflect','refract','reversebits','round','rsqrt','saturate',255 'sign','sin','sincos','sinh','smoothstep','sqrt','step','tan',256 'tanh','tex1D','tex1D','tex1Dbias','tex1Dgrad','tex1Dlod',257 'tex1Dproj','tex2D','tex2D','tex2Dbias','tex2Dgrad','tex2Dlod',258 'tex2Dproj','tex3D','tex3D','tex3Dbias','tex3Dgrad','tex3Dlod',259 'tex3Dproj','texCUBE','texCUBE','texCUBEbias','texCUBEgrad',260 'texCUBElod','texCUBEproj','transpose','trunc','WaveAllBitAnd',261 'WaveAllMax','WaveAllMin','WaveAllBitOr','WaveAllBitXor',262 'WaveAllEqual','WaveAllProduct','WaveAllSum','WaveAllTrue',263 'WaveAnyTrue','WaveBallot','WaveGetLaneCount','WaveGetLaneIndex',264 'WaveGetOrderedIndex','WaveIsHelperLane','WaveOnce',265 'WavePrefixProduct','WavePrefixSum','WaveReadFirstLane',266 'WaveReadLaneAt'),267 prefix=r'\b', suffix=r'\b'),268 Name.Builtin), # built-in functions269 (words((270 'SV_ClipDistance','SV_ClipDistance0','SV_ClipDistance1',271 'SV_Culldistance','SV_CullDistance0','SV_CullDistance1',272 'SV_Coverage','SV_Depth','SV_DepthGreaterEqual',273 'SV_DepthLessEqual','SV_DispatchThreadID','SV_DomainLocation',274 'SV_GroupID','SV_GroupIndex','SV_GroupThreadID','SV_GSInstanceID',275 'SV_InnerCoverage','SV_InsideTessFactor','SV_InstanceID',276 'SV_IsFrontFace','SV_OutputControlPointID','SV_Position',277 'SV_PrimitiveID','SV_RenderTargetArrayIndex','SV_SampleIndex',278 'SV_StencilRef','SV_TessFactor','SV_VertexID',279 'SV_ViewportArrayIndex'),280 prefix=r'\b', suffix=r'\b'),281 Name.Decorator), # system-value semantics282 (r'\bSV_Target[0-7]?\b', Name.Decorator),283 (words((284 'allow_uav_condition','branch','call','domain','earlydepthstencil',285 'fastopt','flatten','forcecase','instance','loop','maxtessfactor',286 'numthreads','outputcontrolpoints','outputtopology','partitioning',287 'patchconstantfunc','unroll'),288 prefix=r'\b', suffix=r'\b'),289 Name.Decorator), # attributes290 (r'[a-zA-Z_]\w*', Name),291 (r'\\$', Comment.Preproc), # backslash at end of line -- usually macro continuation292 (r'\s+', Whitespace),293 ],294 'string': [295 (r'"', String, '#pop'),296 (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|'297 r'u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})', String.Escape),298 (r'[^\\"\n]+', String), # all other characters299 (r'\\\n', String), # line continuation300 (r'\\', String), # stray backslash301 ],302 }303 304 305class PostScriptLexer(RegexLexer):306 """307 Lexer for PostScript files.308 """309 name = 'PostScript'310 url = 'https://en.wikipedia.org/wiki/PostScript'311 aliases = ['postscript', 'postscr']312 filenames = ['*.ps', '*.eps']313 mimetypes = ['application/postscript']314 version_added = '1.4'315 316 delimiter = r'()<>\[\]{}/%\s'317 delimiter_end = rf'(?=[{delimiter}])'318 319 valid_name_chars = rf'[^{delimiter}]'320 valid_name = rf"{valid_name_chars}+{delimiter_end}"321 322 tokens = {323 'root': [324 # All comment types325 (r'^%!.+$', Comment.Preproc),326 (r'%%.*$', Comment.Special),327 (r'(^%.*\n){2,}', Comment.Multiline),328 (r'%.*$', Comment.Single),329 330 # String literals are awkward; enter separate state.331 (r'\(', String, 'stringliteral'),332 333 (r'[{}<>\[\]]', Punctuation),334 335 # Numbers336 (r'<[0-9A-Fa-f]+>' + delimiter_end, Number.Hex),337 # Slight abuse: use Oct to signify any explicit base system338 (r'[0-9]+\#(\-|\+)?([0-9]+\.?|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)'339 r'((e|E)[0-9]+)?' + delimiter_end, Number.Oct),340 (r'(\-|\+)?([0-9]+\.?|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)((e|E)[0-9]+)?'341 + delimiter_end, Number.Float),342 (r'(\-|\+)?[0-9]+' + delimiter_end, Number.Integer),343 344 # References345 (rf'\/{valid_name}', Name.Variable),346 347 # Names348 (valid_name, Name.Function), # Anything else is executed349 350 # These keywords taken from351 # <http://www.math.ubc.ca/~cass/graphics/manual/pdf/a1.pdf>352 # Is there an authoritative list anywhere that doesn't involve353 # trawling documentation?354 355 (r'(false|true)' + delimiter_end, Keyword.Constant),356 357 # Conditionals / flow control358 (r'(eq|ne|g[et]|l[et]|and|or|not|if(?:else)?|for(?:all)?)'359 + delimiter_end, Keyword.Reserved),360 361 (words((362 'abs', 'add', 'aload', 'arc', 'arcn', 'array', 'atan', 'begin',363 'bind', 'ceiling', 'charpath', 'clip', 'closepath', 'concat',364 'concatmatrix', 'copy', 'cos', 'currentlinewidth', 'currentmatrix',365 'currentpoint', 'curveto', 'cvi', 'cvs', 'def', 'defaultmatrix',366 'dict', 'dictstackoverflow', 'div', 'dtransform', 'dup', 'end',367 'exch', 'exec', 'exit', 'exp', 'fill', 'findfont', 'floor', 'get',368 'getinterval', 'grestore', 'gsave', 'gt', 'identmatrix', 'idiv',369 'idtransform', 'index', 'invertmatrix', 'itransform', 'length',370 'lineto', 'ln', 'load', 'log', 'loop', 'matrix', 'mod', 'moveto',371 'mul', 'neg', 'newpath', 'pathforall', 'pathbbox', 'pop', 'print',372 'pstack', 'put', 'quit', 'rand', 'rangecheck', 'rcurveto', 'repeat',373 'restore', 'rlineto', 'rmoveto', 'roll', 'rotate', 'round', 'run',374 'save', 'scale', 'scalefont', 'setdash', 'setfont', 'setgray',375 'setlinecap', 'setlinejoin', 'setlinewidth', 'setmatrix',376 'setrgbcolor', 'shfill', 'show', 'showpage', 'sin', 'sqrt',377 'stack', 'stringwidth', 'stroke', 'strokepath', 'sub', 'syntaxerror',378 'transform', 'translate', 'truncate', 'typecheck', 'undefined',379 'undefinedfilename', 'undefinedresult'), suffix=delimiter_end),380 Name.Builtin),381 382 (r'\s+', Whitespace),383 ],384 385 'stringliteral': [386 (r'[^()\\]+', String),387 (r'\\', String.Escape, 'escape'),388 (r'\(', String, '#push'),389 (r'\)', String, '#pop'),390 ],391 392 'escape': [393 (r'[0-8]{3}|n|r|t|b|f|\\|\(|\)', String.Escape, '#pop'),394 default('#pop'),395 ],396 }397 398 399class AsymptoteLexer(RegexLexer):400 """401 For Asymptote source code.402 """403 name = 'Asymptote'404 url = 'http://asymptote.sf.net/'405 aliases = ['asymptote', 'asy']406 filenames = ['*.asy']407 mimetypes = ['text/x-asymptote']408 version_added = '1.2'409 410 #: optional Comment or Whitespace411 _ws = r'(?:\s|//.*?\n|/\*.*?\*/)+'412 413 tokens = {414 'whitespace': [415 (r'\n', Whitespace),416 (r'\s+', Whitespace),417 (r'(\\)(\n)', bygroups(Text, Whitespace)), # line continuation418 (r'//(\n|(.|\n)*?[^\\]\n)', Comment),419 (r'/(\\\n)?\*(.|\n)*?\*(\\\n)?/', Comment),420 ],421 'statements': [422 # simple string (TeX friendly)423 (r'"(\\\\|\\[^\\]|[^"\\])*"', String),424 # C style string (with character escapes)425 (r"'", String, 'string'),426 (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?', Number.Float),427 (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float),428 (r'0x[0-9a-fA-F]+[Ll]?', Number.Hex),429 (r'0[0-7]+[Ll]?', Number.Oct),430 (r'\d+[Ll]?', Number.Integer),431 (r'[~!%^&*+=|?:<>/-]', Operator),432 (r'[()\[\],.]', Punctuation),433 (r'\b(case)(.+?)(:)', bygroups(Keyword, using(this), Text)),434 (r'(and|controls|tension|atleast|curl|if|else|while|for|do|'435 r'return|break|continue|struct|typedef|new|access|import|'436 r'unravel|from|include|quote|static|public|private|restricted|'437 r'this|explicit|true|false|null|cycle|newframe|operator)\b', Keyword),438 # Since an asy-type-name can be also an asy-function-name,439 # in the following we test if the string " [a-zA-Z]" follows440 # the Keyword.Type.441 # Of course it is not perfect !442 (r'(Braid|FitResult|Label|Legend|TreeNode|abscissa|arc|arrowhead|'443 r'binarytree|binarytreeNode|block|bool|bool3|bounds|bqe|circle|'444 r'conic|coord|coordsys|cputime|ellipse|file|filltype|frame|grid3|'445 r'guide|horner|hsv|hyperbola|indexedTransform|int|inversion|key|'446 r'light|line|linefit|marginT|marker|mass|object|pair|parabola|path|'447 r'path3|pen|picture|point|position|projection|real|revolution|'448 r'scaleT|scientific|segment|side|slice|splitface|string|surface|'449 r'tensionSpecifier|ticklocate|ticksgridT|tickvalues|transform|'450 r'transformation|tree|triangle|trilinear|triple|vector|'451 r'vertex|void)(?=\s+[a-zA-Z])', Keyword.Type),452 # Now the asy-type-name which are not asy-function-name453 # except yours !454 # Perhaps useless455 (r'(Braid|FitResult|TreeNode|abscissa|arrowhead|block|bool|bool3|'456 r'bounds|coord|frame|guide|horner|int|linefit|marginT|pair|pen|'457 r'picture|position|real|revolution|slice|splitface|ticksgridT|'458 r'tickvalues|tree|triple|vertex|void)\b', Keyword.Type),459 (r'[a-zA-Z_]\w*:(?!:)', Name.Label),460 (r'[a-zA-Z_]\w*', Name),461 ],462 'root': [463 include('whitespace'),464 # functions465 (r'((?:[\w*\s])+?(?:\s|\*))' # return arguments466 r'([a-zA-Z_]\w*)' # method name467 r'(\s*\([^;]*?\))' # signature468 r'(' + _ws + r')(\{)',469 bygroups(using(this), Name.Function, using(this), using(this),470 Punctuation),471 'function'),472 # function declarations473 (r'((?:[\w*\s])+?(?:\s|\*))' # return arguments474 r'([a-zA-Z_]\w*)' # method name475 r'(\s*\([^;]*?\))' # signature476 r'(' + _ws + r')(;)',477 bygroups(using(this), Name.Function, using(this), using(this),478 Punctuation)),479 default('statement'),480 ],481 'statement': [482 include('whitespace'),483 include('statements'),484 ('[{}]', Punctuation),485 (';', Punctuation, '#pop'),486 ],487 'function': [488 include('whitespace'),489 include('statements'),490 (';', Punctuation),491 (r'\{', Punctuation, '#push'),492 (r'\}', Punctuation, '#pop'),493 ],494 'string': [495 (r"'", String, '#pop'),496 (r'\\([\\abfnrtv"\'?]|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),497 (r'\n', String),498 (r"[^\\'\n]+", String), # all other characters499 (r'\\\n', String),500 (r'\\n', String), # line continuation501 (r'\\', String), # stray backslash502 ],503 }504 505 def get_tokens_unprocessed(self, text):506 from pygments.lexers._asy_builtins import ASYFUNCNAME, ASYVARNAME507 for index, token, value in \508 RegexLexer.get_tokens_unprocessed(self, text):509 if token is Name and value in ASYFUNCNAME:510 token = Name.Function511 elif token is Name and value in ASYVARNAME:512 token = Name.Variable513 yield index, token, value514 515 516def _shortened(word):517 dpos = word.find('$')518 return '|'.join(word[:dpos] + word[dpos+1:i] + r'\b'519 for i in range(len(word), dpos, -1))520 521 522def _shortened_many(*words):523 return '|'.join(map(_shortened, words))524 525 526class GnuplotLexer(RegexLexer):527 """528 For Gnuplot plotting scripts.529 """530 531 name = 'Gnuplot'532 url = 'http://gnuplot.info/'533 aliases = ['gnuplot']534 filenames = ['*.plot', '*.plt']535 mimetypes = ['text/x-gnuplot']536 version_added = '0.11'537 538 tokens = {539 'root': [540 include('whitespace'),541 (_shortened('bi$nd'), Keyword, 'bind'),542 (_shortened_many('ex$it', 'q$uit'), Keyword, 'quit'),543 (_shortened('f$it'), Keyword, 'fit'),544 (r'(if)(\s*)(\()', bygroups(Keyword, Text, Punctuation), 'if'),545 (r'else\b', Keyword),546 (_shortened('pa$use'), Keyword, 'pause'),547 (_shortened_many('p$lot', 'rep$lot', 'sp$lot'), Keyword, 'plot'),548 (_shortened('sa$ve'), Keyword, 'save'),549 (_shortened('se$t'), Keyword, ('genericargs', 'optionarg')),550 (_shortened_many('sh$ow', 'uns$et'),551 Keyword, ('noargs', 'optionarg')),552 (_shortened_many('low$er', 'ra$ise', 'ca$ll', 'cd$', 'cl$ear',553 'h$elp', '\\?$', 'hi$story', 'l$oad', 'pr$int',554 'pwd$', 're$read', 'res$et', 'scr$eendump',555 'she$ll', 'sy$stem', 'up$date'),556 Keyword, 'genericargs'),557 (_shortened_many('pwd$', 're$read', 'res$et', 'scr$eendump',558 'she$ll', 'test$'),559 Keyword, 'noargs'),560 (r'([a-zA-Z_]\w*)(\s*)(=)',561 bygroups(Name.Variable, Whitespace, Operator), 'genericargs'),562 (r'([a-zA-Z_]\w*)(\s*)(\()(.*?)(\))(\s*)(=)',563 bygroups(Name.Function, Whitespace, Punctuation,564 Text, Punctuation, Whitespace, Operator), 'genericargs'),565 (r'@[a-zA-Z_]\w*', Name.Constant), # macros566 (r';', Keyword),567 ],568 'comment': [569 (r'[^\\\n]+', Comment),570 (r'\\\n', Comment),571 (r'\\', Comment),572 # don't add the newline to the Comment token573 default('#pop'),574 ],575 'whitespace': [576 ('#', Comment, 'comment'),577 (r'[ \t\v\f]+', Whitespace),578 ],579 'noargs': [580 include('whitespace'),581 # semicolon and newline end the argument list582 (r';', Punctuation, '#pop'),583 (r'\n', Whitespace, '#pop'),584 ],585 'dqstring': [586 (r'"', String, '#pop'),587 (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),588 (r'[^\\"\n]+', String), # all other characters589 (r'\\\n', String), # line continuation590 (r'\\', String), # stray backslash591 (r'\n', Whitespace, '#pop'), # newline ends the string too592 ],593 'sqstring': [594 (r"''", String), # escaped single quote595 (r"'", String, '#pop'),596 (r"[^\\'\n]+", String), # all other characters597 (r'\\\n', String), # line continuation598 (r'\\', String), # normal backslash599 (r'\n', Whitespace, '#pop'), # newline ends the string too600 ],601 'genericargs': [602 include('noargs'),603 (r'"', String, 'dqstring'),604 (r"'", String, 'sqstring'),605 (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+', Number.Float),606 (r'(\d+\.\d*|\.\d+)', Number.Float),607 (r'-?\d+', Number.Integer),608 ('[,.~!%^&*+=|?:<>/-]', Operator),609 (r'[{}()\[\]]', Punctuation),610 (r'(eq|ne)\b', Operator.Word),611 (r'([a-zA-Z_]\w*)(\s*)(\()',612 bygroups(Name.Function, Text, Punctuation)),613 (r'[a-zA-Z_]\w*', Name),614 (r'@[a-zA-Z_]\w*', Name.Constant), # macros615 (r'(\\)(\n)', bygroups(Text, Whitespace)),616 ],617 'optionarg': [618 include('whitespace'),619 (_shortened_many(620 "a$ll", "an$gles", "ar$row", "au$toscale", "b$ars", "bor$der",621 "box$width", "cl$abel", "c$lip", "cn$trparam", "co$ntour", "da$ta",622 "data$file", "dg$rid3d", "du$mmy", "enc$oding", "dec$imalsign",623 "fit$", "font$path", "fo$rmat", "fu$nction", "fu$nctions", "g$rid",624 "hid$den3d", "his$torysize", "is$osamples", "k$ey", "keyt$itle",625 "la$bel", "li$nestyle", "ls$", "loa$dpath", "loc$ale", "log$scale",626 "mac$ros", "map$ping", "map$ping3d", "mar$gin", "lmar$gin",627 "rmar$gin", "tmar$gin", "bmar$gin", "mo$use", "multi$plot",628 "mxt$ics", "nomxt$ics", "mx2t$ics", "nomx2t$ics", "myt$ics",629 "nomyt$ics", "my2t$ics", "nomy2t$ics", "mzt$ics", "nomzt$ics",630 "mcbt$ics", "nomcbt$ics", "of$fsets", "or$igin", "o$utput",631 "pa$rametric", "pm$3d", "pal$ette", "colorb$ox", "p$lot",632 "poi$ntsize", "pol$ar", "pr$int", "obj$ect", "sa$mples", "si$ze",633 "st$yle", "su$rface", "table$", "t$erminal", "termo$ptions", "ti$cs",634 "ticsc$ale", "ticsl$evel", "timef$mt", "tim$estamp", "tit$le",635 "v$ariables", "ve$rsion", "vi$ew", "xyp$lane", "xda$ta", "x2da$ta",636 "yda$ta", "y2da$ta", "zda$ta", "cbda$ta", "xl$abel", "x2l$abel",637 "yl$abel", "y2l$abel", "zl$abel", "cbl$abel", "xti$cs", "noxti$cs",638 "x2ti$cs", "nox2ti$cs", "yti$cs", "noyti$cs", "y2ti$cs", "noy2ti$cs",639 "zti$cs", "nozti$cs", "cbti$cs", "nocbti$cs", "xdti$cs", "noxdti$cs",640 "x2dti$cs", "nox2dti$cs", "ydti$cs", "noydti$cs", "y2dti$cs",641 "noy2dti$cs", "zdti$cs", "nozdti$cs", "cbdti$cs", "nocbdti$cs",642 "xmti$cs", "noxmti$cs", "x2mti$cs", "nox2mti$cs", "ymti$cs",643 "noymti$cs", "y2mti$cs", "noy2mti$cs", "zmti$cs", "nozmti$cs",644 "cbmti$cs", "nocbmti$cs", "xr$ange", "x2r$ange", "yr$ange",645 "y2r$ange", "zr$ange", "cbr$ange", "rr$ange", "tr$ange", "ur$ange",646 "vr$ange", "xzeroa$xis", "x2zeroa$xis", "yzeroa$xis", "y2zeroa$xis",647 "zzeroa$xis", "zeroa$xis", "z$ero"), Name.Builtin, '#pop'),648 ],649 'bind': [650 ('!', Keyword, '#pop'),651 (_shortened('all$windows'), Name.Builtin),652 include('genericargs'),653 ],654 'quit': [655 (r'gnuplot\b', Keyword),656 include('noargs'),657 ],658 'fit': [659 (r'via\b', Name.Builtin),660 include('plot'),661 ],662 'if': [663 (r'\)', Punctuation, '#pop'),664 include('genericargs'),665 ],666 'pause': [667 (r'(mouse|any|button1|button2|button3)\b', Name.Builtin),668 (_shortened('key$press'), Name.Builtin),669 include('genericargs'),670 ],671 'plot': [672 (_shortened_many('ax$es', 'axi$s', 'bin$ary', 'ev$ery', 'i$ndex',673 'mat$rix', 's$mooth', 'thru$', 't$itle',674 'not$itle', 'u$sing', 'w$ith'),675 Name.Builtin),676 include('genericargs'),677 ],678 'save': [679 (_shortened_many('f$unctions', 's$et', 't$erminal', 'v$ariables'),680 Name.Builtin),681 include('genericargs'),682 ],683 }684 685 686class PovrayLexer(RegexLexer):687 """688 For Persistence of Vision Raytracer files.689 """690 name = 'POVRay'691 url = 'http://www.povray.org/'692 aliases = ['pov']693 filenames = ['*.pov', '*.inc']694 mimetypes = ['text/x-povray']695 version_added = '0.11'696 697 tokens = {698 'root': [699 (r'/\*[\w\W]*?\*/', Comment.Multiline),700 (r'//.*$', Comment.Single),701 (r'(?s)"(?:\\.|[^"\\])+"', String.Double),702 (words((703 'break', 'case', 'debug', 'declare', 'default', 'define', 'else',704 'elseif', 'end', 'error', 'fclose', 'fopen', 'for', 'if', 'ifdef',705 'ifndef', 'include', 'local', 'macro', 'range', 'read', 'render',706 'statistics', 'switch', 'undef', 'version', 'warning', 'while',707 'write'), prefix=r'#', suffix=r'\b'),708 Comment.Preproc),709 (words((710 'aa_level', 'aa_threshold', 'abs', 'acos', 'acosh', 'adaptive', 'adc_bailout',711 'agate', 'agate_turb', 'all', 'alpha', 'ambient', 'ambient_light', 'angle',712 'aperture', 'arc_angle', 'area_light', 'asc', 'asin', 'asinh', 'assumed_gamma',713 'atan', 'atan2', 'atanh', 'atmosphere', 'atmospheric_attenuation',714 'attenuating', 'average', 'background', 'black_hole', 'blue', 'blur_samples',715 'bounded_by', 'box_mapping', 'bozo', 'break', 'brick', 'brick_size',716 'brightness', 'brilliance', 'bumps', 'bumpy1', 'bumpy2', 'bumpy3', 'bump_map',717 'bump_size', 'case', 'caustics', 'ceil', 'checker', 'chr', 'clipped_by', 'clock',718 'color', 'color_map', 'colour', 'colour_map', 'component', 'composite', 'concat',719 'confidence', 'conic_sweep', 'constant', 'control0', 'control1', 'cos', 'cosh',720 'count', 'crackle', 'crand', 'cube', 'cubic_spline', 'cylindrical_mapping',721 'debug', 'declare', 'default', 'degrees', 'dents', 'diffuse', 'direction',722 'distance', 'distance_maximum', 'div', 'dust', 'dust_type', 'eccentricity',723 'else', 'emitting', 'end', 'error', 'error_bound', 'exp', 'exponent',724 'fade_distance', 'fade_power', 'falloff', 'falloff_angle', 'false',725 'file_exists', 'filter', 'finish', 'fisheye', 'flatness', 'flip', 'floor',726 'focal_point', 'fog', 'fog_alt', 'fog_offset', 'fog_type', 'frequency', 'gif',727 'global_settings', 'glowing', 'gradient', 'granite', 'gray_threshold',728 'green', 'halo', 'hexagon', 'hf_gray_16', 'hierarchy', 'hollow', 'hypercomplex',729 'if', 'ifdef', 'iff', 'image_map', 'incidence', 'include', 'int', 'interpolate',730 'inverse', 'ior', 'irid', 'irid_wavelength', 'jitter', 'lambda', 'leopard',731 'linear', 'linear_spline', 'linear_sweep', 'location', 'log', 'looks_like',732 'look_at', 'low_error_factor', 'mandel', 'map_type', 'marble', 'material_map',733 'matrix', 'max', 'max_intersections', 'max_iteration', 'max_trace_level',734 'max_value', 'metallic', 'min', 'minimum_reuse', 'mod', 'mortar',735 'nearest_count', 'no', 'normal', 'normal_map', 'no_shadow', 'number_of_waves',736 'octaves', 'off', 'offset', 'omega', 'omnimax', 'on', 'once', 'onion', 'open',737 'orthographic', 'panoramic', 'pattern1', 'pattern2', 'pattern3',738 'perspective', 'pgm', 'phase', 'phong', 'phong_size', 'pi', 'pigment',739 'pigment_map', 'planar_mapping', 'png', 'point_at', 'pot', 'pow', 'ppm',740 'precision', 'pwr', 'quadratic_spline', 'quaternion', 'quick_color',741 'quick_colour', 'quilted', 'radial', 'radians', 'radiosity', 'radius', 'rainbow',742 'ramp_wave', 'rand', 'range', 'reciprocal', 'recursion_limit', 'red',743 'reflection', 'refraction', 'render', 'repeat', 'rgb', 'rgbf', 'rgbft', 'rgbt',744 'right', 'ripples', 'rotate', 'roughness', 'samples', 'scale', 'scallop_wave',745 'scattering', 'seed', 'shadowless', 'sin', 'sine_wave', 'sinh', 'sky', 'sky_sphere',746 'slice', 'slope_map', 'smooth', 'specular', 'spherical_mapping', 'spiral',747 'spiral1', 'spiral2', 'spotlight', 'spotted', 'sqr', 'sqrt', 'statistics', 'str',748 'strcmp', 'strength', 'strlen', 'strlwr', 'strupr', 'sturm', 'substr', 'switch', 'sys',749 't', 'tan', 'tanh', 'test_camera_1', 'test_camera_2', 'test_camera_3',750 'test_camera_4', 'texture', 'texture_map', 'tga', 'thickness', 'threshold',751 'tightness', 'tile2', 'tiles', 'track', 'transform', 'translate', 'transmit',752 'triangle_wave', 'true', 'ttf', 'turbulence', 'turb_depth', 'type',753 'ultra_wide_angle', 'up', 'use_color', 'use_colour', 'use_index', 'u_steps',754 'val', 'variance', 'vaxis_rotate', 'vcross', 'vdot', 'version', 'vlength',755 'vnormalize', 'volume_object', 'volume_rendered', 'vol_with_light',756 'vrotate', 'v_steps', 'warning', 'warp', 'water_level', 'waves', 'while', 'width',757 'wood', 'wrinkles', 'yes'), prefix=r'\b', suffix=r'\b'),758 Keyword),759 (words((760 'bicubic_patch', 'blob', 'box', 'camera', 'cone', 'cubic', 'cylinder', 'difference',761 'disc', 'height_field', 'intersection', 'julia_fractal', 'lathe',762 'light_source', 'merge', 'mesh', 'object', 'plane', 'poly', 'polygon', 'prism',763 'quadric', 'quartic', 'smooth_triangle', 'sor', 'sphere', 'superellipsoid',764 'text', 'torus', 'triangle', 'union'), suffix=r'\b'),765 Name.Builtin),766 (r'\b(x|y|z|u|v)\b', Name.Builtin.Pseudo),767 (r'[a-zA-Z_]\w*', Name),768 (r'[0-9]*\.[0-9]+', Number.Float),769 (r'[0-9]+', Number.Integer),770 (r'[\[\](){}<>;,]', Punctuation),771 (r'[-+*/=.|&]|<=|>=|!=', Operator),772 (r'"(\\\\|\\[^\\]|[^"\\])*"', String),773 (r'\s+', Whitespace),774 ]775 }776 777 def analyse_text(text):778 """POVRAY is similar to JSON/C, but the combination of camera and779 light_source is probably not very likely elsewhere. HLSL or GLSL780 are similar (GLSL even has #version), but they miss #declare, and781 light_source/camera are not keywords anywhere else -- it's fair782 to assume though that any POVRAY scene must have a camera and783 lightsource."""784 result = 0785 if '#version' in text:786 result += 0.05787 if '#declare' in text:788 result += 0.05789 if 'camera' in text:790 result += 0.05791 if 'light_source' in text:792 result += 0.1793 794 return result795 