pygments.rb 2.0.0.rc3 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +13 -1
- data/.gitignore +0 -1
- data/.rubocop.yml +16 -0
- data/CHANGELOG.adoc +19 -0
- data/README.adoc +1 -3
- data/Rakefile +0 -14
- data/bench.rb +11 -6
- data/lib/pygments/lexer.rb +84 -62
- data/lib/pygments/mentos.py +7 -49
- data/lib/pygments/popen.rb +133 -173
- data/lib/pygments/version.rb +1 -1
- data/lib/pygments.rb +15 -6
- data/pygments.rb.gemspec +16 -11
- data/test/test_pygments.rb +19 -40
- data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/AUTHORS +13 -1
- data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/INSTALLER +0 -0
- data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/LICENSE +1 -1
- data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/METADATA +8 -9
- data/vendor/pygments-main/Pygments-2.10.0.dist-info/RECORD +524 -0
- data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/REQUESTED +0 -0
- data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/WHEEL +0 -0
- data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/entry_points.txt +0 -0
- data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/top_level.txt +0 -0
- data/vendor/pygments-main/bin/pygmentize +1 -1
- data/vendor/pygments-main/pygments/__init__.py +2 -3
- data/vendor/pygments-main/pygments/__main__.py +1 -2
- data/vendor/pygments-main/pygments/cmdline.py +179 -159
- data/vendor/pygments-main/pygments/console.py +1 -2
- data/vendor/pygments-main/pygments/filter.py +1 -2
- data/vendor/pygments-main/pygments/filters/__init__.py +1 -2
- data/vendor/pygments-main/pygments/formatter.py +1 -2
- data/vendor/pygments-main/pygments/formatters/__init__.py +2 -3
- data/vendor/pygments-main/pygments/formatters/_mapping.py +2 -2
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
- data/vendor/pygments-main/pygments/formatters/html.py +53 -25
- data/vendor/pygments-main/pygments/formatters/img.py +24 -10
- data/vendor/pygments-main/pygments/formatters/irc.py +1 -2
- data/vendor/pygments-main/pygments/formatters/latex.py +8 -9
- data/vendor/pygments-main/pygments/formatters/other.py +7 -10
- data/vendor/pygments-main/pygments/formatters/pangomarkup.py +83 -0
- data/vendor/pygments-main/pygments/formatters/rtf.py +1 -2
- data/vendor/pygments-main/pygments/formatters/svg.py +5 -4
- data/vendor/pygments-main/pygments/formatters/terminal.py +1 -2
- data/vendor/pygments-main/pygments/formatters/terminal256.py +24 -3
- data/vendor/pygments-main/pygments/lexer.py +7 -6
- data/vendor/pygments-main/pygments/lexers/__init__.py +2 -3
- data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +16 -12
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +56 -16
- data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +401 -0
- data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_mapping.py +73 -54
- data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +2 -3
- data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +439 -386
- data/vendor/pygments-main/pygments/lexers/_php_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +91 -55
- data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -2
- data/vendor/pygments-main/pygments/lexers/actionscript.py +9 -10
- data/vendor/pygments-main/pygments/lexers/agile.py +1 -2
- data/vendor/pygments-main/pygments/lexers/algebra.py +1 -2
- data/vendor/pygments-main/pygments/lexers/ambient.py +3 -4
- data/vendor/pygments-main/pygments/lexers/amdgpu.py +53 -0
- data/vendor/pygments-main/pygments/lexers/ampl.py +1 -2
- data/vendor/pygments-main/pygments/lexers/apdlexer.py +448 -0
- data/vendor/pygments-main/pygments/lexers/apl.py +7 -5
- data/vendor/pygments-main/pygments/lexers/archetype.py +2 -3
- data/vendor/pygments-main/pygments/lexers/arrow.py +1 -2
- data/vendor/pygments-main/pygments/lexers/asc.py +51 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +87 -60
- data/vendor/pygments-main/pygments/lexers/automation.py +8 -3
- data/vendor/pygments-main/pygments/lexers/bare.py +1 -2
- data/vendor/pygments-main/pygments/lexers/basic.py +3 -4
- data/vendor/pygments-main/pygments/lexers/bibtex.py +3 -4
- data/vendor/pygments-main/pygments/lexers/boa.py +4 -5
- data/vendor/pygments-main/pygments/lexers/business.py +3 -4
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +61 -36
- data/vendor/pygments-main/pygments/lexers/c_like.py +103 -5
- data/vendor/pygments-main/pygments/lexers/capnproto.py +1 -2
- data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
- data/vendor/pygments-main/pygments/lexers/chapel.py +52 -29
- data/vendor/pygments-main/pygments/lexers/clean.py +7 -8
- data/vendor/pygments-main/pygments/lexers/compiled.py +1 -2
- data/vendor/pygments-main/pygments/lexers/configs.py +139 -48
- data/vendor/pygments-main/pygments/lexers/console.py +1 -2
- data/vendor/pygments-main/pygments/lexers/crystal.py +53 -79
- data/vendor/pygments-main/pygments/lexers/csound.py +3 -4
- data/vendor/pygments-main/pygments/lexers/css.py +11 -8
- data/vendor/pygments-main/pygments/lexers/d.py +3 -4
- data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -2
- data/vendor/pygments-main/pygments/lexers/data.py +2 -3
- data/vendor/pygments-main/pygments/lexers/devicetree.py +2 -3
- data/vendor/pygments-main/pygments/lexers/diff.py +1 -2
- data/vendor/pygments-main/pygments/lexers/dotnet.py +7 -8
- data/vendor/pygments-main/pygments/lexers/dsls.py +3 -4
- data/vendor/pygments-main/pygments/lexers/dylan.py +1 -2
- data/vendor/pygments-main/pygments/lexers/ecl.py +4 -6
- data/vendor/pygments-main/pygments/lexers/eiffel.py +2 -3
- data/vendor/pygments-main/pygments/lexers/elm.py +1 -2
- data/vendor/pygments-main/pygments/lexers/email.py +1 -2
- data/vendor/pygments-main/pygments/lexers/erlang.py +2 -3
- data/vendor/pygments-main/pygments/lexers/esoteric.py +1 -2
- data/vendor/pygments-main/pygments/lexers/ezhil.py +1 -2
- data/vendor/pygments-main/pygments/lexers/factor.py +3 -4
- data/vendor/pygments-main/pygments/lexers/fantom.py +1 -2
- data/vendor/pygments-main/pygments/lexers/felix.py +1 -2
- data/vendor/pygments-main/pygments/lexers/floscript.py +2 -3
- data/vendor/pygments-main/pygments/lexers/forth.py +2 -3
- data/vendor/pygments-main/pygments/lexers/fortran.py +9 -7
- data/vendor/pygments-main/pygments/lexers/foxpro.py +1 -2
- data/vendor/pygments-main/pygments/lexers/freefem.py +1 -2
- data/vendor/pygments-main/pygments/lexers/functional.py +1 -2
- data/vendor/pygments-main/pygments/lexers/futhark.py +111 -0
- data/vendor/pygments-main/pygments/lexers/gcodelexer.py +36 -0
- data/vendor/pygments-main/pygments/lexers/gdscript.py +1 -2
- data/vendor/pygments-main/pygments/lexers/go.py +3 -4
- data/vendor/pygments-main/pygments/lexers/grammar_notation.py +1 -2
- data/vendor/pygments-main/pygments/lexers/graph.py +1 -2
- data/vendor/pygments-main/pygments/lexers/graphics.py +4 -5
- data/vendor/pygments-main/pygments/lexers/graphviz.py +58 -0
- data/vendor/pygments-main/pygments/lexers/gsql.py +92 -0
- data/vendor/pygments-main/pygments/lexers/haskell.py +5 -6
- data/vendor/pygments-main/pygments/lexers/haxe.py +4 -5
- data/vendor/pygments-main/pygments/lexers/hdl.py +2 -6
- data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -2
- data/vendor/pygments-main/pygments/lexers/html.py +7 -8
- data/vendor/pygments-main/pygments/lexers/idl.py +1 -2
- data/vendor/pygments-main/pygments/lexers/igor.py +1 -2
- data/vendor/pygments-main/pygments/lexers/inferno.py +1 -2
- data/vendor/pygments-main/pygments/lexers/installers.py +3 -4
- data/vendor/pygments-main/pygments/lexers/int_fiction.py +1 -2
- data/vendor/pygments-main/pygments/lexers/iolang.py +2 -3
- data/vendor/pygments-main/pygments/lexers/j.py +2 -3
- data/vendor/pygments-main/pygments/lexers/javascript.py +170 -156
- data/vendor/pygments-main/pygments/lexers/jslt.py +94 -0
- data/vendor/pygments-main/pygments/lexers/julia.py +136 -185
- data/vendor/pygments-main/pygments/lexers/jvm.py +433 -307
- data/vendor/pygments-main/pygments/lexers/kuin.py +299 -0
- data/vendor/pygments-main/pygments/lexers/lisp.py +25 -23
- data/vendor/pygments-main/pygments/lexers/make.py +3 -4
- data/vendor/pygments-main/pygments/lexers/markup.py +13 -16
- data/vendor/pygments-main/pygments/lexers/math.py +1 -2
- data/vendor/pygments-main/pygments/lexers/matlab.py +2666 -93
- data/vendor/pygments-main/pygments/lexers/meson.py +155 -0
- data/vendor/pygments-main/pygments/lexers/mime.py +7 -23
- data/vendor/pygments-main/pygments/lexers/ml.py +8 -9
- data/vendor/pygments-main/pygments/lexers/modeling.py +1 -2
- data/vendor/pygments-main/pygments/lexers/modula2.py +3 -4
- data/vendor/pygments-main/pygments/lexers/monte.py +1 -2
- data/vendor/pygments-main/pygments/lexers/mosel.py +1 -2
- data/vendor/pygments-main/pygments/lexers/ncl.py +1 -2
- data/vendor/pygments-main/pygments/lexers/nimrod.py +2 -3
- data/vendor/pygments-main/pygments/lexers/nit.py +1 -2
- data/vendor/pygments-main/pygments/lexers/nix.py +1 -2
- data/vendor/pygments-main/pygments/lexers/oberon.py +1 -2
- data/vendor/pygments-main/pygments/lexers/objective.py +6 -7
- data/vendor/pygments-main/pygments/lexers/ooc.py +1 -2
- data/vendor/pygments-main/pygments/lexers/other.py +1 -2
- data/vendor/pygments-main/pygments/lexers/parasail.py +1 -2
- data/vendor/pygments-main/pygments/lexers/parsers.py +26 -27
- data/vendor/pygments-main/pygments/lexers/pascal.py +1 -2
- data/vendor/pygments-main/pygments/lexers/pawn.py +2 -5
- data/vendor/pygments-main/pygments/lexers/perl.py +1 -2
- data/vendor/pygments-main/pygments/lexers/php.py +3 -4
- data/vendor/pygments-main/pygments/lexers/pointless.py +1 -2
- data/vendor/pygments-main/pygments/lexers/pony.py +1 -2
- data/vendor/pygments-main/pygments/lexers/praat.py +1 -2
- data/vendor/pygments-main/pygments/lexers/procfile.py +43 -0
- data/vendor/pygments-main/pygments/lexers/prolog.py +3 -4
- data/vendor/pygments-main/pygments/lexers/promql.py +2 -3
- data/vendor/pygments-main/pygments/lexers/python.py +38 -17
- data/vendor/pygments-main/pygments/lexers/qvt.py +1 -2
- data/vendor/pygments-main/pygments/lexers/r.py +1 -2
- data/vendor/pygments-main/pygments/lexers/rdf.py +1 -2
- data/vendor/pygments-main/pygments/lexers/rebol.py +1 -2
- data/vendor/pygments-main/pygments/lexers/resource.py +2 -3
- data/vendor/pygments-main/pygments/lexers/ride.py +1 -2
- data/vendor/pygments-main/pygments/lexers/rnc.py +2 -3
- data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -2
- data/vendor/pygments-main/pygments/lexers/robotframework.py +1 -2
- data/vendor/pygments-main/pygments/lexers/ruby.py +31 -25
- data/vendor/pygments-main/pygments/lexers/rust.py +10 -12
- data/vendor/pygments-main/pygments/lexers/sas.py +1 -2
- data/vendor/pygments-main/pygments/lexers/scdoc.py +1 -2
- data/vendor/pygments-main/pygments/lexers/scripting.py +12 -13
- data/vendor/pygments-main/pygments/lexers/sgf.py +1 -2
- data/vendor/pygments-main/pygments/lexers/shell.py +15 -17
- data/vendor/pygments-main/pygments/lexers/sieve.py +1 -2
- data/vendor/pygments-main/pygments/lexers/slash.py +1 -2
- data/vendor/pygments-main/pygments/lexers/smalltalk.py +1 -2
- data/vendor/pygments-main/pygments/lexers/smithy.py +79 -0
- data/vendor/pygments-main/pygments/lexers/smv.py +2 -3
- data/vendor/pygments-main/pygments/lexers/snobol.py +1 -2
- data/vendor/pygments-main/pygments/lexers/solidity.py +1 -2
- data/vendor/pygments-main/pygments/lexers/special.py +44 -30
- data/vendor/pygments-main/pygments/lexers/sql.py +8 -13
- data/vendor/pygments-main/pygments/lexers/stata.py +1 -2
- data/vendor/pygments-main/pygments/lexers/supercollider.py +4 -5
- data/vendor/pygments-main/pygments/lexers/tcl.py +4 -5
- data/vendor/pygments-main/pygments/lexers/teal.py +88 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +34 -35
- data/vendor/pygments-main/pygments/lexers/teraterm.py +2 -3
- data/vendor/pygments-main/pygments/lexers/testing.py +2 -3
- data/vendor/pygments-main/pygments/lexers/text.py +1 -2
- data/vendor/pygments-main/pygments/lexers/textedit.py +3 -4
- data/vendor/pygments-main/pygments/lexers/textfmts.py +1 -2
- data/vendor/pygments-main/pygments/lexers/theorem.py +11 -7
- data/vendor/pygments-main/pygments/lexers/thingsdb.py +118 -0
- data/vendor/pygments-main/pygments/lexers/tnt.py +26 -17
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +2 -3
- data/vendor/pygments-main/pygments/lexers/typoscript.py +1 -2
- data/vendor/pygments-main/pygments/lexers/unicon.py +1 -2
- data/vendor/pygments-main/pygments/lexers/urbi.py +3 -4
- data/vendor/pygments-main/pygments/lexers/usd.py +1 -2
- data/vendor/pygments-main/pygments/lexers/varnish.py +2 -3
- data/vendor/pygments-main/pygments/lexers/verification.py +1 -2
- data/vendor/pygments-main/pygments/lexers/web.py +1 -2
- data/vendor/pygments-main/pygments/lexers/webassembly.py +120 -0
- data/vendor/pygments-main/pygments/lexers/webidl.py +1 -2
- data/vendor/pygments-main/pygments/lexers/webmisc.py +5 -5
- data/vendor/pygments-main/pygments/lexers/whiley.py +1 -2
- data/vendor/pygments-main/pygments/lexers/x10.py +2 -3
- data/vendor/pygments-main/pygments/lexers/xorg.py +1 -2
- data/vendor/pygments-main/pygments/lexers/yang.py +1 -2
- data/vendor/pygments-main/pygments/lexers/zig.py +1 -2
- data/vendor/pygments-main/pygments/modeline.py +1 -2
- data/vendor/pygments-main/pygments/plugin.py +2 -3
- data/vendor/pygments-main/pygments/regexopt.py +2 -3
- data/vendor/pygments-main/pygments/scanner.py +1 -2
- data/vendor/pygments-main/pygments/sphinxext.py +1 -2
- data/vendor/pygments-main/pygments/style.py +4 -5
- data/vendor/pygments-main/pygments/styles/__init__.py +5 -2
- data/vendor/pygments-main/pygments/styles/abap.py +1 -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 +1 -2
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
- data/vendor/pygments-main/pygments/styles/borland.py +1 -2
- data/vendor/pygments-main/pygments/styles/bw.py +1 -2
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
- data/vendor/pygments-main/pygments/styles/default.py +1 -2
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
- data/vendor/pygments-main/pygments/styles/friendly.py +2 -2
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
- data/vendor/pygments-main/pygments/styles/gruvbox.py +107 -0
- data/vendor/pygments-main/pygments/styles/igor.py +1 -2
- data/vendor/pygments-main/pygments/styles/inkpot.py +1 -2
- data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
- data/vendor/pygments-main/pygments/styles/manni.py +1 -2
- data/vendor/pygments-main/pygments/styles/material.py +118 -0
- data/vendor/pygments-main/pygments/styles/monokai.py +1 -2
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
- data/vendor/pygments-main/pygments/styles/native.py +2 -2
- data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
- data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
- data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
- data/vendor/pygments-main/pygments/styles/sas.py +1 -2
- data/vendor/pygments-main/pygments/styles/solarized.py +4 -2
- data/vendor/pygments-main/pygments/styles/stata_dark.py +1 -2
- data/vendor/pygments-main/pygments/styles/stata_light.py +1 -2
- data/vendor/pygments-main/pygments/styles/tango.py +1 -2
- data/vendor/pygments-main/pygments/styles/trac.py +1 -2
- 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 -2
- data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
- data/vendor/pygments-main/pygments/token.py +1 -2
- data/vendor/pygments-main/pygments/unistring.py +1 -2
- data/vendor/pygments-main/pygments/util.py +2 -5
- metadata +48 -23
- data/cache-lexers.rb +0 -9
- data/lexers +0 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +0 -482
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 494fdb817ce25f9a10420c22c8dce5c725b157da060f61bad53527af80bb1dff
|
4
|
+
data.tar.gz: 5bb0321b93ea7bac8ee0675803a5bbeee4b74b3784deb0302e50bde0d4dd53e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 363d098055a9887fa9146a2aef00cc5d04929328a55a6c63fca726a34a9b6a4f32d3c4d8f2ba9cf071db23d978fb30868fd6c5d02e2027b1f5bf5529a3394298
|
7
|
+
data.tar.gz: a80e5d794c22e8d700995346c113877b4a8440253d2482578c3393f54f4ffe57f8fcb076731f63a96d1706de19fbeb7c81d42130f9cfbe87c1e06a9783821e8c
|
data/.github/workflows/ci.yml
CHANGED
@@ -5,11 +5,23 @@ on:
|
|
5
5
|
tags-ignore: [ '**' ]
|
6
6
|
pull_request:
|
7
7
|
jobs:
|
8
|
+
rubocop:
|
9
|
+
runs-on: ubuntu-latest
|
10
|
+
steps:
|
11
|
+
- name: Checkout
|
12
|
+
uses: actions/checkout@v2
|
13
|
+
- name: Set up Ruby
|
14
|
+
uses: ruby/setup-ruby@v1
|
15
|
+
with:
|
16
|
+
ruby-version: '3.0'
|
17
|
+
bundler-cache: true
|
18
|
+
- name: Rubocop
|
19
|
+
run: bundle exec rubocop
|
8
20
|
build:
|
9
21
|
strategy:
|
10
22
|
matrix:
|
11
23
|
ruby: [ 'jruby-9.2', '2.3', '3.0' ]
|
12
|
-
python: [ '3.5', '3.
|
24
|
+
python: [ '3.5', '3.10' ]
|
13
25
|
platform: [ ubuntu-latest, macos-latest, windows-latest ]
|
14
26
|
runs-on: ${{ matrix.platform }}
|
15
27
|
steps:
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
Metrics/AbcSize:
|
2
|
+
Enabled: false
|
3
|
+
Metrics/BlockLength:
|
4
|
+
Enabled: false
|
5
|
+
Metrics/ClassLength:
|
6
|
+
Enabled: false
|
7
|
+
Metrics/CyclomaticComplexity:
|
8
|
+
Enabled: false
|
9
|
+
Layout/LineLength:
|
10
|
+
Max: 120
|
11
|
+
Metrics/MethodLength:
|
12
|
+
Enabled: false
|
13
|
+
Style/StructInheritance:
|
14
|
+
Enabled: false
|
15
|
+
Style/Documentation:
|
16
|
+
Enabled: false
|
data/CHANGELOG.adoc
CHANGED
@@ -5,6 +5,25 @@
|
|
5
5
|
This document provides a high-level view of the changes to the {project-name} by release.
|
6
6
|
For a detailed view of what has changed, refer to the {uri-repo}/commits/master[commit history] on GitHub.
|
7
7
|
|
8
|
+
== 2.3.0 (2022-01-05) - @slonopotamus
|
9
|
+
|
10
|
+
* Add `Pygments.pygments_version` method to query underlying Pygments version ({uri-repo}/issues/226[#226])
|
11
|
+
* Update Pygments to 2.10.0 ({uri-repo}/issues/234[#234])
|
12
|
+
|
13
|
+
== 2.2.0 (2021-03-18) - @slonopotamus
|
14
|
+
|
15
|
+
* Add support for custom lexers ({uri-repo}/pull/187[#187])
|
16
|
+
* Update Pygments to 2.8.1
|
17
|
+
|
18
|
+
== 2.1.0 (2021-02-14) - @slonopotamus
|
19
|
+
|
20
|
+
* Update Pygments to 2.8.0
|
21
|
+
|
22
|
+
== 2.0.0 (2021-01-08) - @slonopotamus
|
23
|
+
|
24
|
+
* stop sending/receiving `ids` between Ruby and Python
|
25
|
+
* use `close_others` Ruby mechanism to prevent file descriptor leaking to Python
|
26
|
+
|
8
27
|
== 2.0.0.rc3 (2021-01-08) - @slonopotamus
|
9
28
|
|
10
29
|
* fix watchdog race condition leading to `ThreadError(<killed thread>)` on JRuby ({uri-repo}/pull/215[#215])
|
data/README.adoc
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
= {project-name}
|
2
2
|
Ted Nyman <ted@ted.io>; Aman Gupta <aman@tmm1.net>; Marat Radchenko <marat@slonopotamus.org>
|
3
3
|
:project-name: pygments.rb
|
4
|
-
:project-handle: pygments.rb
|
5
4
|
:slug: pygments/{project-name}
|
6
|
-
:toc: preamble
|
7
5
|
:uri-project: https://github.com/{slug}
|
8
6
|
:uri-ci: {uri-project}/actions?query=branch%3Amaster
|
9
7
|
:uri-gem: https://rubygems.org/gems/{project-name}
|
@@ -14,7 +12,7 @@ image:{uri-project}/workflows/CI/badge.svg?branch=master[Build Status,link={uri-
|
|
14
12
|
|
15
13
|
== Introduction
|
16
14
|
|
17
|
-
{project-name} is a Ruby wrapper for
|
15
|
+
{project-name} is a Ruby wrapper for {uri-pygments}[Pygments] syntax highlighter.
|
18
16
|
|
19
17
|
{project-name} works by talking over a simple pipe to a long-lived Python child process.
|
20
18
|
This library replaces https://github.com/github/albino[github/albino], as well as an older version of {project-name} that used an embedded Python interpreter.
|
data/Rakefile
CHANGED
@@ -9,8 +9,6 @@ task default: :test
|
|
9
9
|
# Packaging
|
10
10
|
# ==========================================================
|
11
11
|
|
12
|
-
GEMSPEC = eval(File.read('pygments.rb.gemspec'))
|
13
|
-
|
14
12
|
require 'rubygems/package_task'
|
15
13
|
|
16
14
|
# ==========================================================
|
@@ -30,18 +28,6 @@ task :bench do
|
|
30
28
|
sh 'ruby bench.rb'
|
31
29
|
end
|
32
30
|
|
33
|
-
# ==========================================================
|
34
|
-
# Cache lexers
|
35
|
-
# ==========================================================
|
36
|
-
|
37
|
-
# Write all the lexers to a file for easy lookup
|
38
|
-
task :lexers do
|
39
|
-
sh 'ruby cache-lexers.rb'
|
40
|
-
end
|
41
|
-
|
42
|
-
task(:test).enhance([:lexers])
|
43
|
-
task(:build).enhance([:lexers])
|
44
|
-
|
45
31
|
# ==========================================================
|
46
32
|
# Vendor
|
47
33
|
# ==========================================================
|
data/bench.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
require File.join(File.dirname(__FILE__), '/lib/pygments.rb')
|
4
4
|
require 'benchmark'
|
5
5
|
|
6
|
-
include Benchmark
|
7
6
|
# number of iterations
|
8
7
|
num = ARGV[0] ? ARGV[0].to_i : 10
|
9
8
|
|
@@ -13,11 +12,17 @@ repeats = ARGV[1] ? ARGV[1].to_i : 1
|
|
13
12
|
code = File.open('test/test_pygments.rb').read.to_s * repeats
|
14
13
|
|
15
14
|
puts "Benchmarking....\n"
|
16
|
-
puts
|
17
|
-
puts
|
15
|
+
puts "Size: #{code.bytesize} bytes\n"
|
16
|
+
puts "Iterations: #{num}\n"
|
18
17
|
|
19
18
|
Benchmark.bm(40) do |x|
|
20
|
-
x.report('pygments popen ')
|
21
|
-
|
22
|
-
|
19
|
+
x.report('pygments popen ') do
|
20
|
+
(1..num).each { |_i|; Pygments.highlight(code, lexer: 'python'); }
|
21
|
+
end
|
22
|
+
x.report('pygments popen (process already started) ') do
|
23
|
+
(1..num).each { |_i|; Pygments.highlight(code, lexer: 'python'); }
|
24
|
+
end
|
25
|
+
x.report('pygments popen (process already started 2) ') do
|
26
|
+
(1..num).each { |_i|; Pygments.highlight(code, lexer: 'python'); }
|
27
|
+
end
|
23
28
|
end
|
data/lib/pygments/lexer.rb
CHANGED
@@ -1,61 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'singleton'
|
4
|
+
|
3
5
|
module Pygments
|
4
6
|
class Lexer < Struct.new(:name, :aliases, :filenames, :mimetypes)
|
5
|
-
@lexers = []
|
6
|
-
@index = {}
|
7
|
-
@name_index = {}
|
8
|
-
@alias_index = {}
|
9
|
-
@extname_index = {}
|
10
|
-
@mimetypes_index = {}
|
11
|
-
|
12
|
-
# Internal: Create a new Lexer object
|
13
|
-
#
|
14
|
-
# hash - A hash of attributes
|
15
|
-
#
|
16
|
-
# Returns a Lexer object
|
17
|
-
def self.create(hash)
|
18
|
-
lexer = new(hash[:name], hash[:aliases], hash[:filenames], hash[:mimetypes])
|
19
|
-
|
20
|
-
@lexers << lexer
|
21
|
-
|
22
|
-
@index[lexer.name.downcase] = @name_index[lexer.name] = lexer
|
23
|
-
|
24
|
-
lexer.aliases.each do |name|
|
25
|
-
@alias_index[name] = lexer
|
26
|
-
@index[name.downcase] ||= lexer
|
27
|
-
end
|
28
|
-
|
29
|
-
lexer.filenames.each do |filename|
|
30
|
-
extnames = []
|
31
|
-
|
32
|
-
extname = File.extname(filename)
|
33
|
-
if m = extname.match(/\[(.+)\]/)
|
34
|
-
m[1].scan(/./).each do |s|
|
35
|
-
extnames << extname.sub(m[0], s)
|
36
|
-
end
|
37
|
-
elsif extname != ''
|
38
|
-
extnames << extname
|
39
|
-
end
|
40
|
-
|
41
|
-
extnames.each do |the_extname|
|
42
|
-
@extname_index[the_extname] = lexer
|
43
|
-
@index[the_extname.downcase.sub(/^\./, '')] ||= lexer
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
lexer.mimetypes.each do |type|
|
48
|
-
@mimetypes_index[type] = lexer
|
49
|
-
end
|
50
|
-
|
51
|
-
lexer
|
52
|
-
end
|
53
|
-
|
54
7
|
# Public: Get all Lexers
|
55
8
|
#
|
56
|
-
#
|
9
|
+
# @return [Array<Lexer>]
|
57
10
|
def self.all
|
58
|
-
|
11
|
+
LexerCache.instance.lexers
|
59
12
|
end
|
60
13
|
|
61
14
|
# Public: Look up Lexer by name or alias.
|
@@ -65,12 +18,15 @@ module Pygments
|
|
65
18
|
# Lexer.find('Ruby')
|
66
19
|
# => #<Lexer name="Ruby">
|
67
20
|
#
|
68
|
-
#
|
21
|
+
# @return [Lexer, nil]
|
69
22
|
def self.find(name)
|
70
|
-
|
23
|
+
LexerCache.instance.index[name.to_s.downcase]
|
71
24
|
end
|
72
25
|
|
73
26
|
# Public: Alias for find.
|
27
|
+
#
|
28
|
+
# @param name [String]
|
29
|
+
# @return [Lexer, nil]
|
74
30
|
def self.[](name)
|
75
31
|
find(name)
|
76
32
|
end
|
@@ -84,9 +40,10 @@ module Pygments
|
|
84
40
|
# Lexer.find_by_name('Ruby')
|
85
41
|
# # => #<Lexer name="Ruby">
|
86
42
|
#
|
87
|
-
#
|
43
|
+
# @param name [String]
|
44
|
+
# @return [Lexer, nil]
|
88
45
|
def self.find_by_name(name)
|
89
|
-
|
46
|
+
LexerCache.instance.name_index[name]
|
90
47
|
end
|
91
48
|
|
92
49
|
# Public: Look up Lexer by one of its aliases.
|
@@ -98,9 +55,10 @@ module Pygments
|
|
98
55
|
# Lexer.find_by_alias('rb')
|
99
56
|
# # => #<Lexer name="Ruby">
|
100
57
|
#
|
101
|
-
#
|
58
|
+
# @param name [String]
|
59
|
+
# @return [Lexer, nil]
|
102
60
|
def self.find_by_alias(name)
|
103
|
-
|
61
|
+
LexerCache.instance.alias_index[name]
|
104
62
|
end
|
105
63
|
|
106
64
|
# Public: Look up Lexer by one of it's file extensions.
|
@@ -112,9 +70,10 @@ module Pygments
|
|
112
70
|
# Lexer.find_by_extname('.rb')
|
113
71
|
# # => #<Lexer name="Ruby">
|
114
72
|
#
|
115
|
-
#
|
73
|
+
# @param extname [String]
|
74
|
+
# @return [Lexer, nil]
|
116
75
|
def self.find_by_extname(extname)
|
117
|
-
|
76
|
+
LexerCache.instance.extname_index[extname]
|
118
77
|
end
|
119
78
|
|
120
79
|
# Public: Look up Lexer by one of it's mime types.
|
@@ -126,9 +85,10 @@ module Pygments
|
|
126
85
|
# Lexer.find_by_mimetype('application/x-ruby')
|
127
86
|
# # => #<Lexer name="Ruby">
|
128
87
|
#
|
129
|
-
#
|
88
|
+
# @param type [String]
|
89
|
+
# @return [Lexer, nil]
|
130
90
|
def self.find_by_mimetype(type)
|
131
|
-
|
91
|
+
LexerCache.instance.mimetypes_index[type]
|
132
92
|
end
|
133
93
|
|
134
94
|
# Public: Highlight syntax of text
|
@@ -146,5 +106,67 @@ module Pygments
|
|
146
106
|
alias eql? equal?
|
147
107
|
end
|
148
108
|
|
149
|
-
|
109
|
+
class LexerCache
|
110
|
+
include Singleton
|
111
|
+
|
112
|
+
# @return [Array<Lexer>]
|
113
|
+
attr_reader(:lexers)
|
114
|
+
# @return [Map<String, Lexer>]
|
115
|
+
attr_reader(:index)
|
116
|
+
# @return [Map<String, Lexer>]
|
117
|
+
attr_reader(:name_index)
|
118
|
+
# @return [Map<String, Lexer]
|
119
|
+
attr_reader(:alias_index)
|
120
|
+
# @return [Map<String, Lexer>]
|
121
|
+
attr_reader(:extname_index)
|
122
|
+
# @return [Map<String, Lexer>]
|
123
|
+
attr_reader(:mimetypes_index)
|
124
|
+
|
125
|
+
attr_reader(:raw_lexers)
|
126
|
+
|
127
|
+
def initialize
|
128
|
+
@lexers = []
|
129
|
+
@index = {}
|
130
|
+
@name_index = {}
|
131
|
+
@alias_index = {}
|
132
|
+
@extname_index = {}
|
133
|
+
@mimetypes_index = {}
|
134
|
+
@raw_lexers = Pygments.lexers!
|
135
|
+
|
136
|
+
@raw_lexers.each_value do |hash|
|
137
|
+
lexer = Lexer.new(hash[:name], hash[:aliases], hash[:filenames], hash[:mimetypes])
|
138
|
+
|
139
|
+
@lexers << lexer
|
140
|
+
|
141
|
+
@index[lexer.name.downcase] = @name_index[lexer.name] = lexer
|
142
|
+
|
143
|
+
lexer.aliases.each do |name|
|
144
|
+
@alias_index[name] = lexer
|
145
|
+
@index[name.downcase] ||= lexer
|
146
|
+
end
|
147
|
+
|
148
|
+
lexer.filenames.each do |filename|
|
149
|
+
extnames = []
|
150
|
+
|
151
|
+
extname = File.extname(filename)
|
152
|
+
if (m = extname.match(/\[(.+)\]/))
|
153
|
+
m[1].scan(/./).each do |s|
|
154
|
+
extnames << extname.sub(m[0], s)
|
155
|
+
end
|
156
|
+
elsif extname != ''
|
157
|
+
extnames << extname
|
158
|
+
end
|
159
|
+
|
160
|
+
extnames.each do |the_extname|
|
161
|
+
@extname_index[the_extname] = lexer
|
162
|
+
@index[the_extname.downcase.sub(/^\./, '')] ||= lexer
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
lexer.mimetypes.each do |type|
|
167
|
+
@mimetypes_index[type] = lexer
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
150
172
|
end
|
data/lib/pygments/mentos.py
CHANGED
@@ -163,17 +163,19 @@ class Mentos(object):
|
|
163
163
|
fmt = pygments.formatters.get_formatter_by_name(args[0], **kwargs)
|
164
164
|
res = fmt.get_style_defs(args[1])
|
165
165
|
|
166
|
-
elif method == '
|
166
|
+
elif method == 'lexer_names_for':
|
167
167
|
lexer = self.return_lexer(None, args, kwargs, text)
|
168
168
|
|
169
169
|
if lexer:
|
170
|
-
# We don't want the Lexer itself, just
|
171
|
-
|
172
|
-
res = lexer.aliases[0]
|
170
|
+
# We don't want the Lexer itself, just aliases.
|
171
|
+
res = json.dumps(list(lexer.aliases))
|
173
172
|
|
174
173
|
else:
|
175
174
|
_write_error("No lexer")
|
176
175
|
|
176
|
+
elif method == 'version':
|
177
|
+
res = json.dumps([pygments.__version__])
|
178
|
+
|
177
179
|
else:
|
178
180
|
_write_error("Invalid method " + method)
|
179
181
|
|
@@ -196,27 +198,6 @@ class Mentos(object):
|
|
196
198
|
sys.stdout.buffer.write(res_bytes)
|
197
199
|
sys.stdout.flush()
|
198
200
|
|
199
|
-
|
200
|
-
def _get_ids(self, text):
|
201
|
-
start_id = text[:8]
|
202
|
-
end_id = text[-8:]
|
203
|
-
return start_id, end_id
|
204
|
-
|
205
|
-
def _check_and_return_text(self, text, start_id, end_id):
|
206
|
-
|
207
|
-
# Sanity check.
|
208
|
-
id_regex = re.compile('[A-Z]{8}')
|
209
|
-
|
210
|
-
if not id_regex.match(start_id) and not id_regex.match(end_id):
|
211
|
-
_write_error("ID check failed. Not an ID.")
|
212
|
-
|
213
|
-
if not start_id == end_id:
|
214
|
-
_write_error("ID check failed. ID's did not match.")
|
215
|
-
|
216
|
-
# Passed the sanity check. Remove the id's and return
|
217
|
-
text = text[10:-10]
|
218
|
-
return text
|
219
|
-
|
220
201
|
def _parse_header(self, header):
|
221
202
|
method = header["method"]
|
222
203
|
args = header.get("args", [])
|
@@ -234,7 +215,7 @@ class Mentos(object):
|
|
234
215
|
pygmentized, this header will be followed by the text to be pygmentized.
|
235
216
|
|
236
217
|
The header is of form:
|
237
|
-
{ "method": "highlight", "args": [], "kwargs": {"arg1": "v"}, "bytes": 128
|
218
|
+
{ "method": "highlight", "args": [], "kwargs": {"arg1": "v"}, "bytes": 128}
|
238
219
|
"""
|
239
220
|
|
240
221
|
while True:
|
@@ -261,18 +242,9 @@ class Mentos(object):
|
|
261
242
|
# Read up to the given number of *bytes* (not chars) (possibly 0)
|
262
243
|
text = sys.stdin.buffer.read(_bytes).decode('utf-8')
|
263
244
|
|
264
|
-
# Sanity check the return.
|
265
|
-
if _bytes:
|
266
|
-
start_id, end_id = self._get_ids(text)
|
267
|
-
text = self._check_and_return_text(text, start_id, end_id)
|
268
|
-
|
269
245
|
# Get the actual data from pygments.
|
270
246
|
res = self.get_data(method, lexer, args, kwargs, text)
|
271
247
|
|
272
|
-
# Put back the sanity check values.
|
273
|
-
if method == "highlight":
|
274
|
-
res = start_id + " " + res + " " + end_id
|
275
|
-
|
276
248
|
self._send_data(res, method)
|
277
249
|
|
278
250
|
except:
|
@@ -288,20 +260,6 @@ def main():
|
|
288
260
|
signal.signal(signal.SIGHUP, _signal_handler)
|
289
261
|
|
290
262
|
mentos = Mentos()
|
291
|
-
|
292
|
-
if sys.platform != "win32":
|
293
|
-
# close fd's inherited from the ruby parent
|
294
|
-
import resource
|
295
|
-
maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
|
296
|
-
if maxfd == resource.RLIM_INFINITY:
|
297
|
-
maxfd = 65536
|
298
|
-
|
299
|
-
for fd in range(3, maxfd):
|
300
|
-
try:
|
301
|
-
os.close(fd)
|
302
|
-
except:
|
303
|
-
pass
|
304
|
-
|
305
263
|
mentos.start()
|
306
264
|
|
307
265
|
if __name__ == "__main__":
|