pygments.rb 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +1 -1
- data/.rubocop.yml +7 -0
- data/CHANGELOG.adoc +4 -0
- data/README.adoc +1 -1
- data/bench.rb +1 -1
- data/lib/pygments/popen.rb +3 -7
- data/lib/pygments/version.rb +1 -1
- data/pygments.rb.gemspec +2 -2
- data/test/test_pygments.rb +0 -19
- data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/AUTHORS +21 -1
- data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/LICENSE +1 -1
- data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/METADATA +19 -11
- data/vendor/pygments-main/Pygments-2.15.1.dist-info/RECORD +614 -0
- data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/WHEEL +1 -1
- data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/entry_points.txt +0 -1
- data/vendor/pygments-main/bin/pygmentize +1 -1
- data/vendor/pygments-main/pygments/__init__.py +20 -22
- data/vendor/pygments-main/pygments/__main__.py +1 -1
- data/vendor/pygments-main/pygments/cmdline.py +74 -8
- data/vendor/pygments-main/pygments/console.py +1 -1
- data/vendor/pygments-main/pygments/filter.py +1 -1
- data/vendor/pygments-main/pygments/filters/__init__.py +6 -3
- data/vendor/pygments-main/pygments/formatter.py +41 -11
- data/vendor/pygments-main/pygments/formatters/__init__.py +21 -16
- data/vendor/pygments-main/pygments/formatters/_mapping.py +5 -65
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
- data/vendor/pygments-main/pygments/formatters/groff.py +170 -0
- data/vendor/pygments-main/pygments/formatters/html.py +54 -32
- data/vendor/pygments-main/pygments/formatters/img.py +9 -5
- data/vendor/pygments-main/pygments/formatters/irc.py +6 -33
- data/vendor/pygments-main/pygments/formatters/latex.py +24 -14
- data/vendor/pygments-main/pygments/formatters/other.py +1 -1
- data/vendor/pygments-main/pygments/formatters/pangomarkup.py +1 -1
- data/vendor/pygments-main/pygments/formatters/rtf.py +1 -1
- data/vendor/pygments-main/pygments/formatters/svg.py +1 -1
- data/vendor/pygments-main/pygments/formatters/terminal.py +1 -3
- data/vendor/pygments-main/pygments/formatters/terminal256.py +2 -4
- data/vendor/pygments-main/pygments/lexer.py +101 -32
- data/vendor/pygments-main/pygments/lexers/__init__.py +50 -29
- data/vendor/pygments-main/pygments/lexers/_ada_builtins.py +103 -0
- data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +21 -6
- data/vendor/pygments-main/pygments/lexers/_css_builtins.py +558 -0
- data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +10 -0
- data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_lilypond_builtins.py +4932 -0
- data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +11 -18
- data/vendor/pygments-main/pygments/lexers/_mapping.py +71 -82
- data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +58 -4
- data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_php_builtins.py +408 -1835
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +70 -8
- data/vendor/pygments-main/pygments/lexers/_qlik_builtins.py +666 -0
- data/vendor/pygments-main/pygments/lexers/_scheme_builtins.py +1609 -0
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3 -3
- data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +9 -18
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +185 -94
- data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/actionscript.py +15 -14
- data/vendor/pygments-main/pygments/lexers/ada.py +144 -0
- data/vendor/pygments-main/pygments/lexers/agile.py +1 -1
- data/vendor/pygments-main/pygments/lexers/algebra.py +72 -9
- data/vendor/pygments-main/pygments/lexers/ambient.py +8 -7
- data/vendor/pygments-main/pygments/lexers/amdgpu.py +4 -3
- data/vendor/pygments-main/pygments/lexers/ampl.py +10 -8
- data/vendor/pygments-main/pygments/lexers/apdlexer.py +164 -20
- data/vendor/pygments-main/pygments/lexers/apl.py +6 -5
- data/vendor/pygments-main/pygments/lexers/archetype.py +23 -21
- data/vendor/pygments-main/pygments/lexers/arrow.py +10 -9
- data/vendor/pygments-main/pygments/lexers/arturo.py +250 -0
- data/vendor/pygments-main/pygments/lexers/asc.py +9 -5
- data/vendor/pygments-main/pygments/lexers/asm.py +68 -63
- data/vendor/pygments-main/pygments/lexers/automation.py +7 -5
- data/vendor/pygments-main/pygments/lexers/bare.py +20 -21
- data/vendor/pygments-main/pygments/lexers/basic.py +45 -41
- data/vendor/pygments-main/pygments/lexers/bdd.py +58 -0
- data/vendor/pygments-main/pygments/lexers/berry.py +99 -0
- data/vendor/pygments-main/pygments/lexers/bibtex.py +6 -6
- data/vendor/pygments-main/pygments/lexers/boa.py +4 -8
- data/vendor/pygments-main/pygments/lexers/business.py +18 -18
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +80 -40
- data/vendor/pygments-main/pygments/lexers/c_like.py +21 -19
- data/vendor/pygments-main/pygments/lexers/capnproto.py +6 -8
- data/vendor/pygments-main/pygments/lexers/carbon.py +96 -0
- data/vendor/pygments-main/pygments/lexers/cddl.py +16 -33
- data/vendor/pygments-main/pygments/lexers/chapel.py +14 -9
- data/vendor/pygments-main/pygments/lexers/clean.py +3 -2
- data/vendor/pygments-main/pygments/lexers/comal.py +80 -0
- data/vendor/pygments-main/pygments/lexers/compiled.py +3 -2
- data/vendor/pygments-main/pygments/lexers/configs.py +235 -120
- data/vendor/pygments-main/pygments/lexers/console.py +5 -4
- data/vendor/pygments-main/pygments/lexers/cplint.py +44 -0
- data/vendor/pygments-main/pygments/lexers/crystal.py +22 -23
- data/vendor/pygments-main/pygments/lexers/csound.py +19 -17
- data/vendor/pygments-main/pygments/lexers/css.py +67 -159
- data/vendor/pygments-main/pygments/lexers/d.py +15 -12
- data/vendor/pygments-main/pygments/lexers/dalvik.py +14 -11
- data/vendor/pygments-main/pygments/lexers/data.py +119 -49
- data/vendor/pygments-main/pygments/lexers/dax.py +136 -0
- data/vendor/pygments-main/pygments/lexers/devicetree.py +9 -8
- data/vendor/pygments-main/pygments/lexers/diff.py +23 -19
- data/vendor/pygments-main/pygments/lexers/dotnet.py +216 -81
- data/vendor/pygments-main/pygments/lexers/dsls.py +86 -64
- data/vendor/pygments-main/pygments/lexers/dylan.py +16 -15
- data/vendor/pygments-main/pygments/lexers/ecl.py +46 -38
- data/vendor/pygments-main/pygments/lexers/eiffel.py +15 -10
- data/vendor/pygments-main/pygments/lexers/elm.py +12 -8
- data/vendor/pygments-main/pygments/lexers/elpi.py +165 -0
- data/vendor/pygments-main/pygments/lexers/email.py +21 -39
- data/vendor/pygments-main/pygments/lexers/erlang.py +21 -22
- data/vendor/pygments-main/pygments/lexers/esoteric.py +28 -30
- data/vendor/pygments-main/pygments/lexers/ezhil.py +10 -9
- data/vendor/pygments-main/pygments/lexers/factor.py +104 -83
- data/vendor/pygments-main/pygments/lexers/fantom.py +31 -29
- data/vendor/pygments-main/pygments/lexers/felix.py +18 -14
- data/vendor/pygments-main/pygments/lexers/fift.py +67 -0
- data/vendor/pygments-main/pygments/lexers/floscript.py +7 -7
- data/vendor/pygments-main/pygments/lexers/forth.py +8 -6
- data/vendor/pygments-main/pygments/lexers/fortran.py +16 -11
- data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -2
- data/vendor/pygments-main/pygments/lexers/freefem.py +7 -10
- data/vendor/pygments-main/pygments/lexers/func.py +108 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +1 -1
- data/vendor/pygments-main/pygments/lexers/futhark.py +12 -17
- data/vendor/pygments-main/pygments/lexers/gcodelexer.py +1 -2
- data/vendor/pygments-main/pygments/lexers/gdscript.py +76 -233
- data/vendor/pygments-main/pygments/lexers/go.py +12 -14
- data/vendor/pygments-main/pygments/lexers/grammar_notation.py +22 -26
- data/vendor/pygments-main/pygments/lexers/graph.py +36 -15
- data/vendor/pygments-main/pygments/lexers/graphics.py +37 -38
- data/vendor/pygments-main/pygments/lexers/graphviz.py +2 -1
- data/vendor/pygments-main/pygments/lexers/gsql.py +39 -27
- data/vendor/pygments-main/pygments/lexers/haskell.py +73 -71
- data/vendor/pygments-main/pygments/lexers/haxe.py +13 -11
- data/vendor/pygments-main/pygments/lexers/hdl.py +31 -34
- data/vendor/pygments-main/pygments/lexers/hexdump.py +21 -21
- data/vendor/pygments-main/pygments/lexers/html.py +11 -19
- data/vendor/pygments-main/pygments/lexers/idl.py +10 -5
- data/vendor/pygments-main/pygments/lexers/igor.py +3 -2
- data/vendor/pygments-main/pygments/lexers/inferno.py +9 -8
- data/vendor/pygments-main/pygments/lexers/installers.py +39 -33
- data/vendor/pygments-main/pygments/lexers/int_fiction.py +35 -20
- data/vendor/pygments-main/pygments/lexers/iolang.py +9 -9
- data/vendor/pygments-main/pygments/lexers/j.py +20 -13
- data/vendor/pygments-main/pygments/lexers/javascript.py +183 -149
- data/vendor/pygments-main/pygments/lexers/jmespath.py +68 -0
- data/vendor/pygments-main/pygments/lexers/jslt.py +4 -3
- data/vendor/pygments-main/pygments/lexers/jsonnet.py +168 -0
- data/vendor/pygments-main/pygments/lexers/julia.py +44 -32
- data/vendor/pygments-main/pygments/lexers/jvm.py +161 -140
- data/vendor/pygments-main/pygments/lexers/kuin.py +93 -59
- data/vendor/pygments-main/pygments/lexers/lilypond.py +226 -0
- data/vendor/pygments-main/pygments/lexers/lisp.py +244 -107
- data/vendor/pygments-main/pygments/lexers/macaulay2.py +1739 -0
- data/vendor/pygments-main/pygments/lexers/make.py +21 -16
- data/vendor/pygments-main/pygments/lexers/markup.py +752 -11
- data/vendor/pygments-main/pygments/lexers/math.py +1 -1
- data/vendor/pygments-main/pygments/lexers/matlab.py +18 -3
- data/vendor/pygments-main/pygments/lexers/maxima.py +85 -0
- data/vendor/pygments-main/pygments/lexers/meson.py +10 -25
- data/vendor/pygments-main/pygments/lexers/mime.py +2 -2
- data/vendor/pygments-main/pygments/lexers/minecraft.py +394 -0
- data/vendor/pygments-main/pygments/lexers/mips.py +128 -0
- data/vendor/pygments-main/pygments/lexers/ml.py +9 -6
- data/vendor/pygments-main/pygments/lexers/modeling.py +12 -8
- data/vendor/pygments-main/pygments/lexers/modula2.py +3 -2
- data/vendor/pygments-main/pygments/lexers/monte.py +3 -2
- data/vendor/pygments-main/pygments/lexers/mosel.py +1 -1
- data/vendor/pygments-main/pygments/lexers/ncl.py +1 -1
- data/vendor/pygments-main/pygments/lexers/nimrod.py +62 -20
- data/vendor/pygments-main/pygments/lexers/nit.py +3 -2
- data/vendor/pygments-main/pygments/lexers/nix.py +5 -5
- data/vendor/pygments-main/pygments/lexers/oberon.py +2 -2
- data/vendor/pygments-main/pygments/lexers/objective.py +6 -4
- data/vendor/pygments-main/pygments/lexers/ooc.py +3 -2
- data/vendor/pygments-main/pygments/lexers/other.py +1 -1
- data/vendor/pygments-main/pygments/lexers/parasail.py +3 -2
- data/vendor/pygments-main/pygments/lexers/parsers.py +23 -21
- data/vendor/pygments-main/pygments/lexers/pascal.py +196 -198
- data/vendor/pygments-main/pygments/lexers/pawn.py +1 -1
- data/vendor/pygments-main/pygments/lexers/perl.py +17 -15
- data/vendor/pygments-main/pygments/lexers/phix.py +364 -0
- data/vendor/pygments-main/pygments/lexers/php.py +35 -20
- data/vendor/pygments-main/pygments/lexers/pointless.py +3 -2
- data/vendor/pygments-main/pygments/lexers/pony.py +1 -1
- data/vendor/pygments-main/pygments/lexers/praat.py +41 -38
- data/vendor/pygments-main/pygments/lexers/procfile.py +2 -3
- data/vendor/pygments-main/pygments/lexers/prolog.py +7 -8
- data/vendor/pygments-main/pygments/lexers/promql.py +5 -12
- data/vendor/pygments-main/pygments/lexers/python.py +145 -119
- data/vendor/pygments-main/pygments/lexers/q.py +188 -0
- data/vendor/pygments-main/pygments/lexers/qlik.py +117 -0
- data/vendor/pygments-main/pygments/lexers/qvt.py +1 -1
- data/vendor/pygments-main/pygments/lexers/r.py +4 -4
- data/vendor/pygments-main/pygments/lexers/rdf.py +3 -3
- data/vendor/pygments-main/pygments/lexers/rebol.py +1 -12
- data/vendor/pygments-main/pygments/lexers/resource.py +1 -1
- data/vendor/pygments-main/pygments/lexers/ride.py +3 -2
- data/vendor/pygments-main/pygments/lexers/rita.py +43 -0
- data/vendor/pygments-main/pygments/lexers/rnc.py +3 -2
- data/vendor/pygments-main/pygments/lexers/roboconf.py +3 -3
- data/vendor/pygments-main/pygments/lexers/robotframework.py +6 -5
- data/vendor/pygments-main/pygments/lexers/ruby.py +24 -24
- data/vendor/pygments-main/pygments/lexers/rust.py +3 -2
- data/vendor/pygments-main/pygments/lexers/sas.py +2 -2
- data/vendor/pygments-main/pygments/lexers/savi.py +170 -0
- data/vendor/pygments-main/pygments/lexers/scdoc.py +4 -7
- data/vendor/pygments-main/pygments/lexers/scripting.py +24 -21
- data/vendor/pygments-main/pygments/lexers/sgf.py +6 -6
- data/vendor/pygments-main/pygments/lexers/shell.py +29 -21
- data/vendor/pygments-main/pygments/lexers/sieve.py +14 -4
- data/vendor/pygments-main/pygments/lexers/slash.py +1 -1
- data/vendor/pygments-main/pygments/lexers/smalltalk.py +5 -3
- data/vendor/pygments-main/pygments/lexers/smithy.py +5 -6
- data/vendor/pygments-main/pygments/lexers/smv.py +1 -1
- data/vendor/pygments-main/pygments/lexers/snobol.py +1 -1
- data/vendor/pygments-main/pygments/lexers/solidity.py +3 -7
- data/vendor/pygments-main/pygments/lexers/sophia.py +103 -0
- data/vendor/pygments-main/pygments/lexers/special.py +2 -5
- data/vendor/pygments-main/pygments/lexers/spice.py +71 -0
- data/vendor/pygments-main/pygments/lexers/sql.py +212 -17
- data/vendor/pygments-main/pygments/lexers/srcinfo.py +62 -0
- data/vendor/pygments-main/pygments/lexers/stata.py +4 -3
- data/vendor/pygments-main/pygments/lexers/supercollider.py +4 -3
- data/vendor/pygments-main/pygments/lexers/tal.py +74 -0
- data/vendor/pygments-main/pygments/lexers/tcl.py +21 -16
- data/vendor/pygments-main/pygments/lexers/teal.py +9 -8
- data/vendor/pygments-main/pygments/lexers/templates.py +62 -29
- data/vendor/pygments-main/pygments/lexers/teraterm.py +12 -20
- data/vendor/pygments-main/pygments/lexers/testing.py +6 -2
- data/vendor/pygments-main/pygments/lexers/text.py +3 -2
- data/vendor/pygments-main/pygments/lexers/textedit.py +41 -7
- data/vendor/pygments-main/pygments/lexers/textfmts.py +7 -5
- data/vendor/pygments-main/pygments/lexers/theorem.py +42 -36
- data/vendor/pygments-main/pygments/lexers/thingsdb.py +2 -4
- data/vendor/pygments-main/pygments/lexers/tlb.py +57 -0
- data/vendor/pygments-main/pygments/lexers/tnt.py +3 -4
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +2 -4
- data/vendor/pygments-main/pygments/lexers/typoscript.py +2 -3
- data/vendor/pygments-main/pygments/lexers/ul4.py +267 -0
- data/vendor/pygments-main/pygments/lexers/unicon.py +1 -1
- data/vendor/pygments-main/pygments/lexers/urbi.py +4 -4
- data/vendor/pygments-main/pygments/lexers/usd.py +2 -1
- data/vendor/pygments-main/pygments/lexers/varnish.py +5 -5
- data/vendor/pygments-main/pygments/lexers/verification.py +4 -3
- data/vendor/pygments-main/pygments/lexers/web.py +1 -1
- data/vendor/pygments-main/pygments/lexers/webassembly.py +5 -5
- data/vendor/pygments-main/pygments/lexers/webidl.py +2 -1
- data/vendor/pygments-main/pygments/lexers/webmisc.py +90 -71
- data/vendor/pygments-main/pygments/lexers/wgsl.py +407 -0
- data/vendor/pygments-main/pygments/lexers/whiley.py +2 -1
- data/vendor/pygments-main/pygments/lexers/wowtoc.py +120 -0
- data/vendor/pygments-main/pygments/lexers/wren.py +99 -0
- data/vendor/pygments-main/pygments/lexers/x10.py +5 -6
- data/vendor/pygments-main/pygments/lexers/xorg.py +3 -2
- data/vendor/pygments-main/pygments/lexers/yang.py +6 -5
- data/vendor/pygments-main/pygments/lexers/zig.py +3 -2
- data/vendor/pygments-main/pygments/modeline.py +1 -1
- data/vendor/pygments-main/pygments/plugin.py +28 -9
- data/vendor/pygments-main/pygments/regexopt.py +1 -1
- data/vendor/pygments-main/pygments/scanner.py +2 -2
- data/vendor/pygments-main/pygments/sphinxext.py +63 -1
- data/vendor/pygments-main/pygments/style.py +7 -1
- data/vendor/pygments-main/pygments/styles/__init__.py +19 -5
- data/vendor/pygments-main/pygments/styles/abap.py +2 -2
- data/vendor/pygments-main/pygments/styles/algol.py +1 -2
- data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
- data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -3
- data/vendor/pygments-main/pygments/styles/borland.py +1 -3
- data/vendor/pygments-main/pygments/styles/bw.py +1 -2
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -3
- data/vendor/pygments-main/pygments/styles/default.py +13 -14
- data/vendor/pygments-main/pygments/styles/dracula.py +102 -0
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
- data/vendor/pygments-main/pygments/styles/friendly_grayscale.py +75 -0
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
- data/vendor/pygments-main/pygments/styles/gh_dark.py +107 -0
- data/vendor/pygments-main/pygments/styles/gruvbox.py +4 -2
- data/vendor/pygments-main/pygments/styles/igor.py +1 -2
- data/vendor/pygments-main/pygments/styles/inkpot.py +3 -2
- data/vendor/pygments-main/pygments/styles/lilypond.py +56 -0
- data/vendor/pygments-main/pygments/styles/lovelace.py +1 -3
- data/vendor/pygments-main/pygments/styles/manni.py +1 -1
- data/vendor/pygments-main/pygments/styles/material.py +1 -2
- data/vendor/pygments-main/pygments/styles/monokai.py +3 -3
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -3
- data/vendor/pygments-main/pygments/styles/native.py +11 -11
- data/vendor/pygments-main/pygments/styles/nord.py +150 -0
- data/vendor/pygments-main/pygments/styles/onedark.py +59 -0
- data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -6
- data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -6
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -3
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
- data/vendor/pygments-main/pygments/styles/rainbow_dash.py +3 -3
- data/vendor/pygments-main/pygments/styles/rrt.py +3 -2
- data/vendor/pygments-main/pygments/styles/sas.py +2 -4
- data/vendor/pygments-main/pygments/styles/solarized.py +1 -1
- data/vendor/pygments-main/pygments/styles/staroffice.py +26 -0
- data/vendor/pygments-main/pygments/styles/stata_dark.py +4 -6
- data/vendor/pygments-main/pygments/styles/stata_light.py +1 -2
- data/vendor/pygments-main/pygments/styles/tango.py +2 -3
- data/vendor/pygments-main/pygments/styles/trac.py +1 -3
- data/vendor/pygments-main/pygments/styles/vim.py +1 -2
- data/vendor/pygments-main/pygments/styles/vs.py +1 -2
- data/vendor/pygments-main/pygments/styles/xcode.py +1 -3
- data/vendor/pygments-main/pygments/styles/zenburn.py +4 -6
- data/vendor/pygments-main/pygments/token.py +2 -1
- data/vendor/pygments-main/pygments/unistring.py +4 -6
- data/vendor/pygments-main/pygments/util.py +27 -5
- metadata +59 -14
- data/vendor/pygments-main/Pygments-2.10.0.dist-info/RECORD +0 -524
- /data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/INSTALLER +0 -0
- /data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/REQUESTED +0 -0
- /data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/top_level.txt +0 -0
@@ -4,28 +4,43 @@
|
|
4
4
|
|
5
5
|
Lexers for Pascal family languages.
|
6
6
|
|
7
|
-
:copyright: Copyright 2006-
|
7
|
+
:copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
|
8
8
|
:license: BSD, see LICENSE for details.
|
9
9
|
"""
|
10
10
|
|
11
11
|
import re
|
12
12
|
|
13
|
-
from pygments.lexer import Lexer
|
14
|
-
using, this, default
|
13
|
+
from pygments.lexer import Lexer
|
15
14
|
from pygments.util import get_bool_opt, get_list_opt
|
16
15
|
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
|
17
|
-
Number, Punctuation, Error
|
16
|
+
Number, Punctuation, Error, Whitespace
|
18
17
|
from pygments.scanner import Scanner
|
19
18
|
|
20
19
|
# compatibility import
|
21
20
|
from pygments.lexers.modula2 import Modula2Lexer
|
22
21
|
|
23
|
-
__all__ = ['DelphiLexer', '
|
22
|
+
__all__ = ['DelphiLexer', 'PortugolLexer']
|
23
|
+
|
24
|
+
|
25
|
+
class PortugolLexer(Lexer):
|
26
|
+
"""For Portugol, a Pascal dialect with keywords in Portuguese."""
|
27
|
+
name = 'Portugol'
|
28
|
+
aliases = ['portugol']
|
29
|
+
filenames = ['*.alg', '*.portugol']
|
30
|
+
mimetypes = []
|
31
|
+
url = "https://www.apoioinformatica.inf.br/produtos/visualg/linguagem"
|
32
|
+
|
33
|
+
def __init__(self, **options):
|
34
|
+
Lexer.__init__(self, **options)
|
35
|
+
self.lexer = DelphiLexer(**options, portugol=True)
|
36
|
+
|
37
|
+
def get_tokens_unprocessed(self, text):
|
38
|
+
return self.lexer.get_tokens_unprocessed(text)
|
24
39
|
|
25
40
|
|
26
41
|
class DelphiLexer(Lexer):
|
27
42
|
"""
|
28
|
-
For
|
43
|
+
For Delphi (Borland Object Pascal),
|
29
44
|
Turbo Pascal and Free Pascal source code.
|
30
45
|
|
31
46
|
Additional options accepted:
|
@@ -297,18 +312,109 @@ class DelphiLexer(Lexer):
|
|
297
312
|
'xlatb', 'xor'
|
298
313
|
}
|
299
314
|
|
315
|
+
PORTUGOL_KEYWORDS = (
|
316
|
+
'aleatorio',
|
317
|
+
'algoritmo',
|
318
|
+
'arquivo',
|
319
|
+
'ate',
|
320
|
+
'caso',
|
321
|
+
'cronometro',
|
322
|
+
'debug',
|
323
|
+
'e',
|
324
|
+
'eco',
|
325
|
+
'enquanto',
|
326
|
+
'entao',
|
327
|
+
'escolha',
|
328
|
+
'escreva',
|
329
|
+
'escreval',
|
330
|
+
'faca',
|
331
|
+
'falso',
|
332
|
+
'fimalgoritmo',
|
333
|
+
'fimenquanto',
|
334
|
+
'fimescolha',
|
335
|
+
'fimfuncao',
|
336
|
+
'fimpara',
|
337
|
+
'fimprocedimento',
|
338
|
+
'fimrepita',
|
339
|
+
'fimse',
|
340
|
+
'funcao',
|
341
|
+
'inicio',
|
342
|
+
'int',
|
343
|
+
'interrompa',
|
344
|
+
'leia',
|
345
|
+
'limpatela',
|
346
|
+
'mod',
|
347
|
+
'nao',
|
348
|
+
'ou',
|
349
|
+
'outrocaso',
|
350
|
+
'para',
|
351
|
+
'passo',
|
352
|
+
'pausa',
|
353
|
+
'procedimento',
|
354
|
+
'repita',
|
355
|
+
'retorne',
|
356
|
+
'se',
|
357
|
+
'senao',
|
358
|
+
'timer',
|
359
|
+
'var',
|
360
|
+
'vetor',
|
361
|
+
'verdadeiro',
|
362
|
+
'xou',
|
363
|
+
'div',
|
364
|
+
'mod',
|
365
|
+
'abs',
|
366
|
+
'arccos',
|
367
|
+
'arcsen',
|
368
|
+
'arctan',
|
369
|
+
'cos',
|
370
|
+
'cotan',
|
371
|
+
'Exp',
|
372
|
+
'grauprad',
|
373
|
+
'int',
|
374
|
+
'log',
|
375
|
+
'logn',
|
376
|
+
'pi',
|
377
|
+
'quad',
|
378
|
+
'radpgrau',
|
379
|
+
'raizq',
|
380
|
+
'rand',
|
381
|
+
'randi',
|
382
|
+
'sen',
|
383
|
+
'Tan',
|
384
|
+
'asc',
|
385
|
+
'carac',
|
386
|
+
'caracpnum',
|
387
|
+
'compr',
|
388
|
+
'copia',
|
389
|
+
'maiusc',
|
390
|
+
'minusc',
|
391
|
+
'numpcarac',
|
392
|
+
'pos',
|
393
|
+
)
|
394
|
+
|
395
|
+
PORTUGOL_BUILTIN_TYPES = {
|
396
|
+
'inteiro', 'real', 'caractere', 'logico'
|
397
|
+
}
|
398
|
+
|
300
399
|
def __init__(self, **options):
|
301
400
|
Lexer.__init__(self, **options)
|
302
401
|
self.keywords = set()
|
303
|
-
if get_bool_opt(options, 'turbopascal', True):
|
304
|
-
self.keywords.update(self.TURBO_PASCAL_KEYWORDS)
|
305
|
-
if get_bool_opt(options, 'delphi', True):
|
306
|
-
self.keywords.update(self.DELPHI_KEYWORDS)
|
307
|
-
if get_bool_opt(options, 'freepascal', True):
|
308
|
-
self.keywords.update(self.FREE_PASCAL_KEYWORDS)
|
309
402
|
self.builtins = set()
|
310
|
-
|
311
|
-
self.
|
403
|
+
if get_bool_opt(options, 'portugol', False):
|
404
|
+
self.keywords.update(self.PORTUGOL_KEYWORDS)
|
405
|
+
self.builtins.update(self.PORTUGOL_BUILTIN_TYPES)
|
406
|
+
self.is_portugol = True
|
407
|
+
else:
|
408
|
+
self.is_portugol = False
|
409
|
+
|
410
|
+
if get_bool_opt(options, 'turbopascal', True):
|
411
|
+
self.keywords.update(self.TURBO_PASCAL_KEYWORDS)
|
412
|
+
if get_bool_opt(options, 'delphi', True):
|
413
|
+
self.keywords.update(self.DELPHI_KEYWORDS)
|
414
|
+
if get_bool_opt(options, 'freepascal', True):
|
415
|
+
self.keywords.update(self.FREE_PASCAL_KEYWORDS)
|
416
|
+
for unit in get_list_opt(options, 'units', list(self.BUILTIN_UNITS)):
|
417
|
+
self.builtins.update(self.BUILTIN_UNITS[unit])
|
312
418
|
|
313
419
|
def get_tokens_unprocessed(self, text):
|
314
420
|
scanner = Scanner(text, re.DOTALL | re.MULTILINE | re.IGNORECASE)
|
@@ -327,15 +433,17 @@ class DelphiLexer(Lexer):
|
|
327
433
|
|
328
434
|
if stack[-1] == 'initial':
|
329
435
|
if scanner.scan(r'\s+'):
|
330
|
-
token =
|
331
|
-
elif scanner.scan(r'\{.*?\}|\(\*.*?\*\)'):
|
436
|
+
token = Whitespace
|
437
|
+
elif not self.is_portugol and scanner.scan(r'\{.*?\}|\(\*.*?\*\)'):
|
332
438
|
if scanner.match.startswith('$'):
|
333
439
|
token = Comment.Preproc
|
334
440
|
else:
|
335
441
|
token = Comment.Multiline
|
336
442
|
elif scanner.scan(r'//.*?$'):
|
337
443
|
token = Comment.Single
|
338
|
-
elif scanner.scan(r'
|
444
|
+
elif self.is_portugol and scanner.scan(r'(<\-)|(>=)|(<=)|%|<|>|-|\+|\*|\=|(<>)|\/|\.|:|,'):
|
445
|
+
token = Operator
|
446
|
+
elif not self.is_portugol and scanner.scan(r'[-+*\/=<>:;,.@\^]'):
|
339
447
|
token = Operator
|
340
448
|
# stop label highlighting on next ";"
|
341
449
|
if collect_labels and scanner.match == ';':
|
@@ -363,37 +471,42 @@ class DelphiLexer(Lexer):
|
|
363
471
|
elif lowercase_name in self.keywords:
|
364
472
|
token = Keyword
|
365
473
|
# if we are in a special block and a
|
366
|
-
# block ending keyword
|
474
|
+
# block ending keyword occurs (and the parenthesis
|
367
475
|
# is balanced) we end the current block context
|
368
|
-
if
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
in_property_block
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
476
|
+
if self.is_portugol:
|
477
|
+
if lowercase_name in ('funcao', 'procedimento'):
|
478
|
+
in_function_block = True
|
479
|
+
next_token_is_function = True
|
480
|
+
else:
|
481
|
+
if (in_function_block or in_property_block) and \
|
482
|
+
lowercase_name in self.BLOCK_KEYWORDS and \
|
483
|
+
brace_balance[0] <= 0 and \
|
484
|
+
brace_balance[1] <= 0:
|
485
|
+
in_function_block = False
|
486
|
+
in_property_block = False
|
487
|
+
brace_balance = [0, 0]
|
488
|
+
block_labels = set()
|
489
|
+
if lowercase_name in ('label', 'goto'):
|
490
|
+
collect_labels = True
|
491
|
+
elif lowercase_name == 'asm':
|
492
|
+
stack.append('asm')
|
493
|
+
elif lowercase_name == 'property':
|
494
|
+
in_property_block = True
|
495
|
+
next_token_is_property = True
|
496
|
+
elif lowercase_name in ('procedure', 'operator',
|
497
|
+
'function', 'constructor',
|
498
|
+
'destructor'):
|
499
|
+
in_function_block = True
|
500
|
+
next_token_is_function = True
|
388
501
|
# we are in a function block and the current name
|
389
502
|
# is in the set of registered modifiers. highlight
|
390
503
|
# it as pseudo keyword
|
391
|
-
elif in_function_block and \
|
504
|
+
elif not self.is_portugol and in_function_block and \
|
392
505
|
lowercase_name in self.FUNCTION_MODIFIERS:
|
393
506
|
token = Keyword.Pseudo
|
394
507
|
# if we are in a property highlight some more
|
395
508
|
# modifiers
|
396
|
-
elif in_property_block and \
|
509
|
+
elif not self.is_portugol and in_property_block and \
|
397
510
|
lowercase_name in ('read', 'write'):
|
398
511
|
token = Keyword.Pseudo
|
399
512
|
next_token_is_function = True
|
@@ -404,40 +517,49 @@ class DelphiLexer(Lexer):
|
|
404
517
|
# Look if the next token is a dot. If yes it's
|
405
518
|
# not a function, but a class name and the
|
406
519
|
# part after the dot a function name
|
407
|
-
if scanner.test(r'\s*\.\s*'):
|
520
|
+
if not self.is_portugol and scanner.test(r'\s*\.\s*'):
|
408
521
|
token = Name.Class
|
409
522
|
# it's not a dot, our job is done
|
410
523
|
else:
|
411
524
|
token = Name.Function
|
412
525
|
next_token_is_function = False
|
526
|
+
|
527
|
+
if self.is_portugol:
|
528
|
+
block_labels.add(scanner.match.lower())
|
529
|
+
|
413
530
|
# same for properties
|
414
|
-
elif next_token_is_property:
|
531
|
+
elif not self.is_portugol and next_token_is_property:
|
415
532
|
token = Name.Property
|
416
533
|
next_token_is_property = False
|
417
534
|
# Highlight this token as label and add it
|
418
535
|
# to the list of known labels
|
419
|
-
elif collect_labels:
|
536
|
+
elif not self.is_portugol and collect_labels:
|
420
537
|
token = Name.Label
|
421
538
|
block_labels.add(scanner.match.lower())
|
422
539
|
# name is in list of known labels
|
423
540
|
elif lowercase_name in block_labels:
|
424
541
|
token = Name.Label
|
425
|
-
elif lowercase_name in self.
|
542
|
+
elif self.is_portugol and lowercase_name in self.PORTUGOL_BUILTIN_TYPES:
|
426
543
|
token = Keyword.Type
|
427
|
-
elif lowercase_name in self.
|
544
|
+
elif not self.is_portugol and lowercase_name in self.BUILTIN_TYPES:
|
545
|
+
token = Keyword.Type
|
546
|
+
elif not self.is_portugol and lowercase_name in self.DIRECTIVES:
|
428
547
|
token = Keyword.Pseudo
|
429
548
|
# builtins are just builtins if the token
|
430
549
|
# before isn't a dot
|
431
|
-
elif not was_dot and lowercase_name in self.builtins:
|
550
|
+
elif not self.is_portugol and not was_dot and lowercase_name in self.builtins:
|
432
551
|
token = Name.Builtin
|
433
552
|
else:
|
434
553
|
token = Name
|
435
|
-
elif scanner.scan(r"
|
554
|
+
elif self.is_portugol and scanner.scan(r"\""):
|
436
555
|
token = String
|
437
556
|
stack.append('string')
|
438
|
-
elif scanner.scan(r'
|
557
|
+
elif not self.is_portugol and scanner.scan(r"'"):
|
558
|
+
token = String
|
559
|
+
stack.append('string')
|
560
|
+
elif not self.is_portugol and scanner.scan(r'\#(\d+|\$[0-9A-Fa-f]+)'):
|
439
561
|
token = String.Char
|
440
|
-
elif scanner.scan(r'\$[0-9A-Fa-f]+'):
|
562
|
+
elif not self.is_portugol and scanner.scan(r'\$[0-9A-Fa-f]+'):
|
441
563
|
token = Number.Hex
|
442
564
|
elif scanner.scan(r'\d+(?![eE]|\.[^.])'):
|
443
565
|
token = Number.Integer
|
@@ -450,20 +572,31 @@ class DelphiLexer(Lexer):
|
|
450
572
|
scanner.get_char()
|
451
573
|
|
452
574
|
elif stack[-1] == 'string':
|
453
|
-
if
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
575
|
+
if self.is_portugol:
|
576
|
+
if scanner.scan(r"''"):
|
577
|
+
token = String.Escape
|
578
|
+
elif scanner.scan(r"\""):
|
579
|
+
token = String
|
580
|
+
stack.pop()
|
581
|
+
elif scanner.scan(r"[^\"]*"):
|
582
|
+
token = String
|
583
|
+
else:
|
584
|
+
scanner.get_char()
|
585
|
+
stack.pop()
|
460
586
|
else:
|
461
|
-
scanner.
|
462
|
-
|
463
|
-
|
464
|
-
|
587
|
+
if scanner.scan(r"''"):
|
588
|
+
token = String.Escape
|
589
|
+
elif scanner.scan(r"'"):
|
590
|
+
token = String
|
591
|
+
stack.pop()
|
592
|
+
elif scanner.scan(r"[^']*"):
|
593
|
+
token = String
|
594
|
+
else:
|
595
|
+
scanner.get_char()
|
596
|
+
stack.pop()
|
597
|
+
elif not self.is_portugol and stack[-1] == 'asm':
|
465
598
|
if scanner.scan(r'\s+'):
|
466
|
-
token =
|
599
|
+
token = Whitespace
|
467
600
|
elif scanner.scan(r'end'):
|
468
601
|
token = Keyword
|
469
602
|
stack.pop()
|
@@ -502,142 +635,7 @@ class DelphiLexer(Lexer):
|
|
502
635
|
stack.pop()
|
503
636
|
|
504
637
|
# save the dot!!!11
|
505
|
-
if scanner.match.strip():
|
638
|
+
if not self.is_portugol and scanner.match.strip():
|
506
639
|
was_dot = scanner.match == '.'
|
507
|
-
yield scanner.start_pos, token, scanner.match or ''
|
508
|
-
|
509
|
-
|
510
|
-
class AdaLexer(RegexLexer):
|
511
|
-
"""
|
512
|
-
For Ada source code.
|
513
|
-
|
514
|
-
.. versionadded:: 1.3
|
515
|
-
"""
|
516
640
|
|
517
|
-
|
518
|
-
aliases = ['ada', 'ada95', 'ada2005']
|
519
|
-
filenames = ['*.adb', '*.ads', '*.ada']
|
520
|
-
mimetypes = ['text/x-ada']
|
521
|
-
|
522
|
-
flags = re.MULTILINE | re.IGNORECASE
|
523
|
-
|
524
|
-
tokens = {
|
525
|
-
'root': [
|
526
|
-
(r'[^\S\n]+', Text),
|
527
|
-
(r'--.*?\n', Comment.Single),
|
528
|
-
(r'[^\S\n]+', Text),
|
529
|
-
(r'function|procedure|entry', Keyword.Declaration, 'subprogram'),
|
530
|
-
(r'(subtype|type)(\s+)(\w+)',
|
531
|
-
bygroups(Keyword.Declaration, Text, Keyword.Type), 'type_def'),
|
532
|
-
(r'task|protected', Keyword.Declaration),
|
533
|
-
(r'(subtype)(\s+)', bygroups(Keyword.Declaration, Text)),
|
534
|
-
(r'(end)(\s+)', bygroups(Keyword.Reserved, Text), 'end'),
|
535
|
-
(r'(pragma)(\s+)(\w+)', bygroups(Keyword.Reserved, Text,
|
536
|
-
Comment.Preproc)),
|
537
|
-
(r'(true|false|null)\b', Keyword.Constant),
|
538
|
-
(words((
|
539
|
-
'Address', 'Byte', 'Boolean', 'Character', 'Controlled', 'Count',
|
540
|
-
'Cursor', 'Duration', 'File_Mode', 'File_Type', 'Float', 'Generator',
|
541
|
-
'Integer', 'Long_Float', 'Long_Integer', 'Long_Long_Float',
|
542
|
-
'Long_Long_Integer', 'Natural', 'Positive', 'Reference_Type',
|
543
|
-
'Short_Float', 'Short_Integer', 'Short_Short_Float',
|
544
|
-
'Short_Short_Integer', 'String', 'Wide_Character', 'Wide_String'),
|
545
|
-
suffix=r'\b'),
|
546
|
-
Keyword.Type),
|
547
|
-
(r'(and(\s+then)?|in|mod|not|or(\s+else)|rem)\b', Operator.Word),
|
548
|
-
(r'generic|private', Keyword.Declaration),
|
549
|
-
(r'package', Keyword.Declaration, 'package'),
|
550
|
-
(r'array\b', Keyword.Reserved, 'array_def'),
|
551
|
-
(r'(with|use)(\s+)', bygroups(Keyword.Namespace, Text), 'import'),
|
552
|
-
(r'(\w+)(\s*)(:)(\s*)(constant)',
|
553
|
-
bygroups(Name.Constant, Text, Punctuation, Text,
|
554
|
-
Keyword.Reserved)),
|
555
|
-
(r'<<\w+>>', Name.Label),
|
556
|
-
(r'(\w+)(\s*)(:)(\s*)(declare|begin|loop|for|while)',
|
557
|
-
bygroups(Name.Label, Text, Punctuation, Text, Keyword.Reserved)),
|
558
|
-
(words((
|
559
|
-
'abort', 'abs', 'abstract', 'accept', 'access', 'aliased', 'all',
|
560
|
-
'array', 'at', 'begin', 'body', 'case', 'constant', 'declare',
|
561
|
-
'delay', 'delta', 'digits', 'do', 'else', 'elsif', 'end', 'entry',
|
562
|
-
'exception', 'exit', 'interface', 'for', 'goto', 'if', 'is', 'limited',
|
563
|
-
'loop', 'new', 'null', 'of', 'or', 'others', 'out', 'overriding',
|
564
|
-
'pragma', 'protected', 'raise', 'range', 'record', 'renames', 'requeue',
|
565
|
-
'return', 'reverse', 'select', 'separate', 'some', 'subtype',
|
566
|
-
'synchronized', 'task', 'tagged', 'terminate', 'then', 'type', 'until',
|
567
|
-
'when', 'while', 'xor'), prefix=r'\b', suffix=r'\b'),
|
568
|
-
Keyword.Reserved),
|
569
|
-
(r'"[^"]*"', String),
|
570
|
-
include('attribute'),
|
571
|
-
include('numbers'),
|
572
|
-
(r"'[^']'", String.Character),
|
573
|
-
(r'(\w+)(\s*|[(,])', bygroups(Name, using(this))),
|
574
|
-
(r"(<>|=>|:=|[()|:;,.'])", Punctuation),
|
575
|
-
(r'[*<>+=/&-]', Operator),
|
576
|
-
(r'\n+', Text),
|
577
|
-
],
|
578
|
-
'numbers': [
|
579
|
-
(r'[0-9_]+#[0-9a-f_\.]+#', Number.Hex),
|
580
|
-
(r'[0-9_]+\.[0-9_]*', Number.Float),
|
581
|
-
(r'[0-9_]+', Number.Integer),
|
582
|
-
],
|
583
|
-
'attribute': [
|
584
|
-
(r"(')(\w+)", bygroups(Punctuation, Name.Attribute)),
|
585
|
-
],
|
586
|
-
'subprogram': [
|
587
|
-
(r'\(', Punctuation, ('#pop', 'formal_part')),
|
588
|
-
(r';', Punctuation, '#pop'),
|
589
|
-
(r'is\b', Keyword.Reserved, '#pop'),
|
590
|
-
(r'"[^"]+"|\w+', Name.Function),
|
591
|
-
include('root'),
|
592
|
-
],
|
593
|
-
'end': [
|
594
|
-
('(if|case|record|loop|select)', Keyword.Reserved),
|
595
|
-
(r'"[^"]+"|[\w.]+', Name.Function),
|
596
|
-
(r'\s+', Text),
|
597
|
-
(';', Punctuation, '#pop'),
|
598
|
-
],
|
599
|
-
'type_def': [
|
600
|
-
(r';', Punctuation, '#pop'),
|
601
|
-
(r'\(', Punctuation, 'formal_part'),
|
602
|
-
(r'with|and|use', Keyword.Reserved),
|
603
|
-
(r'array\b', Keyword.Reserved, ('#pop', 'array_def')),
|
604
|
-
(r'record\b', Keyword.Reserved, ('record_def')),
|
605
|
-
(r'(null record)(;)', bygroups(Keyword.Reserved, Punctuation), '#pop'),
|
606
|
-
include('root'),
|
607
|
-
],
|
608
|
-
'array_def': [
|
609
|
-
(r';', Punctuation, '#pop'),
|
610
|
-
(r'(\w+)(\s+)(range)', bygroups(Keyword.Type, Text, Keyword.Reserved)),
|
611
|
-
include('root'),
|
612
|
-
],
|
613
|
-
'record_def': [
|
614
|
-
(r'end record', Keyword.Reserved, '#pop'),
|
615
|
-
include('root'),
|
616
|
-
],
|
617
|
-
'import': [
|
618
|
-
(r'[\w.]+', Name.Namespace, '#pop'),
|
619
|
-
default('#pop'),
|
620
|
-
],
|
621
|
-
'formal_part': [
|
622
|
-
(r'\)', Punctuation, '#pop'),
|
623
|
-
(r'\w+', Name.Variable),
|
624
|
-
(r',|:[^=]', Punctuation),
|
625
|
-
(r'(in|not|null|out|access)\b', Keyword.Reserved),
|
626
|
-
include('root'),
|
627
|
-
],
|
628
|
-
'package': [
|
629
|
-
('body', Keyword.Declaration),
|
630
|
-
(r'is\s+new|renames', Keyword.Reserved),
|
631
|
-
('is', Keyword.Reserved, '#pop'),
|
632
|
-
(';', Punctuation, '#pop'),
|
633
|
-
(r'\(', Punctuation, 'package_instantiation'),
|
634
|
-
(r'([\w.]+)', Name.Class),
|
635
|
-
include('root'),
|
636
|
-
],
|
637
|
-
'package_instantiation': [
|
638
|
-
(r'("[^"]+"|\w+)(\s+)(=>)', bygroups(Name.Variable, Text, Punctuation)),
|
639
|
-
(r'[\w.\'"]', Text),
|
640
|
-
(r'\)', Punctuation, '#pop'),
|
641
|
-
include('root'),
|
642
|
-
],
|
643
|
-
}
|
641
|
+
yield scanner.start_pos, token, scanner.match or ''
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
Lexers for Perl, Raku and related languages.
|
6
6
|
|
7
|
-
:copyright: Copyright 2006-
|
7
|
+
:copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
|
8
8
|
:license: BSD, see LICENSE for details.
|
9
9
|
"""
|
10
10
|
|
@@ -13,7 +13,7 @@ import re
|
|
13
13
|
from pygments.lexer import RegexLexer, ExtendedRegexLexer, include, bygroups, \
|
14
14
|
using, this, default, words
|
15
15
|
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
|
16
|
-
Number, Punctuation
|
16
|
+
Number, Punctuation, Whitespace
|
17
17
|
from pygments.util import shebang_matches
|
18
18
|
|
19
19
|
__all__ = ['PerlLexer', 'Perl6Lexer']
|
@@ -21,10 +21,11 @@ __all__ = ['PerlLexer', 'Perl6Lexer']
|
|
21
21
|
|
22
22
|
class PerlLexer(RegexLexer):
|
23
23
|
"""
|
24
|
-
For
|
24
|
+
For Perl source code.
|
25
25
|
"""
|
26
26
|
|
27
27
|
name = 'Perl'
|
28
|
+
url = 'https://www.perl.org'
|
28
29
|
aliases = ['perl', 'pl']
|
29
30
|
filenames = ['*.pl', '*.pm', '*.t', '*.perl']
|
30
31
|
mimetypes = ['text/x-perl', 'application/x-perl']
|
@@ -55,7 +56,7 @@ class PerlLexer(RegexLexer):
|
|
55
56
|
'CHECK', 'INIT', 'END', 'return'), suffix=r'\b'),
|
56
57
|
Keyword),
|
57
58
|
(r'(format)(\s+)(\w+)(\s*)(=)(\s*\n)',
|
58
|
-
bygroups(Keyword,
|
59
|
+
bygroups(Keyword, Whitespace, Name, Whitespace, Punctuation, Whitespace), 'format'),
|
59
60
|
(r'(eq|lt|gt|le|ge|ne|not|and|or|cmp)\b', Operator.Word),
|
60
61
|
# common delimiters
|
61
62
|
(r's/(\\\\|\\[^\\]|[^\\/])*/(\\\\|\\[^\\]|[^\\/])*/[egimosx]*',
|
@@ -78,7 +79,7 @@ class PerlLexer(RegexLexer):
|
|
78
79
|
(r'm(?=[/!\\{<\[(@%$])', String.Regex, 'balanced-regex'),
|
79
80
|
(r'((?<==~)|(?<=\())\s*/(\\\\|\\[^\\]|[^\\/])*/[gcimosx]*',
|
80
81
|
String.Regex),
|
81
|
-
(r'\s+',
|
82
|
+
(r'\s+', Whitespace),
|
82
83
|
(words((
|
83
84
|
'abs', 'accept', 'alarm', 'atan2', 'bind', 'binmode', 'bless', 'caller', 'chdir',
|
84
85
|
'chmod', 'chomp', 'chop', 'chown', 'chr', 'chroot', 'close', 'closedir', 'connect',
|
@@ -109,7 +110,7 @@ class PerlLexer(RegexLexer):
|
|
109
110
|
Name.Builtin),
|
110
111
|
(r'((__(DATA|DIE|WARN)__)|(STD(IN|OUT|ERR)))\b', Name.Builtin.Pseudo),
|
111
112
|
(r'(<<)([\'"]?)([a-zA-Z_]\w*)(\2;?\n.*?\n)(\3)(\n)',
|
112
|
-
bygroups(String, String, String.Delimiter, String, String.Delimiter,
|
113
|
+
bygroups(String, String, String.Delimiter, String, String.Delimiter, Whitespace)),
|
113
114
|
(r'__END__', Comment.Preproc, 'end-part'),
|
114
115
|
(r'\$\^[ADEFHILMOPSTWX]', Name.Variable.Global),
|
115
116
|
(r"\$[\\\"\[\]'&`+*.,;=%~?@$!<>(^|/-](?!\w)", Name.Variable.Global),
|
@@ -131,10 +132,10 @@ class PerlLexer(RegexLexer):
|
|
131
132
|
(r'(q|qq|qw|qr|qx)\<', String.Other, 'lt-string'),
|
132
133
|
(r'(q|qq|qw|qr|qx)([\W_])(.|\n)*?\2', String.Other),
|
133
134
|
(r'(package)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)',
|
134
|
-
bygroups(Keyword,
|
135
|
+
bygroups(Keyword, Whitespace, Name.Namespace)),
|
135
136
|
(r'(use|require|no)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)',
|
136
|
-
bygroups(Keyword,
|
137
|
-
(r'(sub)(\s+)', bygroups(Keyword,
|
137
|
+
bygroups(Keyword, Whitespace, Name.Namespace)),
|
138
|
+
(r'(sub)(\s+)', bygroups(Keyword, Whitespace), 'funcname'),
|
138
139
|
(words((
|
139
140
|
'no', 'package', 'require', 'use'), suffix=r'\b'),
|
140
141
|
Keyword),
|
@@ -150,7 +151,7 @@ class PerlLexer(RegexLexer):
|
|
150
151
|
(r'[^\n]*\n', String.Interpol),
|
151
152
|
],
|
152
153
|
'varname': [
|
153
|
-
(r'\s+',
|
154
|
+
(r'\s+', Whitespace),
|
154
155
|
(r'\{', Punctuation, '#pop'), # hash syntax?
|
155
156
|
(r'\)|,', Punctuation, '#pop'), # argument specifier
|
156
157
|
(r'\w+::', Name.Namespace),
|
@@ -165,9 +166,9 @@ class PerlLexer(RegexLexer):
|
|
165
166
|
],
|
166
167
|
'funcname': [
|
167
168
|
(r'[a-zA-Z_]\w*[!?]?', Name.Function),
|
168
|
-
(r'\s+',
|
169
|
+
(r'\s+', Whitespace),
|
169
170
|
# argument declaration
|
170
|
-
(r'(\([$@%]*\))(\s*)', bygroups(Punctuation,
|
171
|
+
(r'(\([$@%]*\))(\s*)', bygroups(Punctuation, Whitespace)),
|
171
172
|
(r';', Punctuation, '#pop'),
|
172
173
|
(r'.*?\{', Punctuation, '#pop'),
|
173
174
|
],
|
@@ -223,18 +224,19 @@ class PerlLexer(RegexLexer):
|
|
223
224
|
|
224
225
|
class Perl6Lexer(ExtendedRegexLexer):
|
225
226
|
"""
|
226
|
-
For
|
227
|
+
For Raku (a.k.a. Perl 6) source code.
|
227
228
|
|
228
229
|
.. versionadded:: 2.0
|
229
230
|
"""
|
230
231
|
|
231
232
|
name = 'Perl6'
|
233
|
+
url = 'https://www.raku.org'
|
232
234
|
aliases = ['perl6', 'pl6', 'raku']
|
233
235
|
filenames = ['*.pl', '*.pm', '*.nqp', '*.p6', '*.6pl', '*.p6l', '*.pl6',
|
234
236
|
'*.6pm', '*.p6m', '*.pm6', '*.t', '*.raku', '*.rakumod',
|
235
237
|
'*.rakutest', '*.rakudoc']
|
236
238
|
mimetypes = ['text/x-perl6', 'application/x-perl6']
|
237
|
-
flags = re.MULTILINE | re.DOTALL
|
239
|
+
flags = re.MULTILINE | re.DOTALL
|
238
240
|
|
239
241
|
PERL6_IDENTIFIER_RANGE = r"['\w:-]"
|
240
242
|
|
@@ -605,7 +607,7 @@ class Perl6Lexer(ExtendedRegexLexer):
|
|
605
607
|
(r'(regex|token|rule)(?!' + PERL6_IDENTIFIER_RANGE + r')(\s*' + PERL6_IDENTIFIER_RANGE + '+)?',
|
606
608
|
bygroups(Keyword, Name), 'pre-token'),
|
607
609
|
# deal with a special case in the Perl 6 grammar (role q { ... })
|
608
|
-
(r'(role)(\s+)(q)(\s*)', bygroups(Keyword,
|
610
|
+
(r'(role)(\s+)(q)(\s*)', bygroups(Keyword, Whitespace, Name, Whitespace)),
|
609
611
|
(_build_word_match(PERL6_KEYWORDS, PERL6_IDENTIFIER_RANGE), Keyword),
|
610
612
|
(_build_word_match(PERL6_BUILTIN_CLASSES, PERL6_IDENTIFIER_RANGE, suffix='(?::[UD])?'),
|
611
613
|
Name.Builtin),
|