-
Notifications
You must be signed in to change notification settings - Fork 141
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Possibility to add a custom lexer #187
Comments
Yeah, this would be great. |
I just had to figure this out.. It's actually already possible with some additional work. In my case it was a bit more complicated as I have a language that doesn't have a convenient existing lexer. So here's what I did:
For you use case you only need to do steps 3-5 obviously. HTH |
Okay, #46 is about custom styles while this issue is about custom lexers. |
What we can do here is to teach pygments.rb to use preinstalled Pygments (if it is present) instead of the bundled one. This way if user installed Pygments plugins, they will work. |
Easier workaround: --- popen.rb.orig 2021-02-17 16:13:18.000000000 +0100
+++ popen.rb 2021-02-17 16:14:02.000000000 +0100
@@ -141,11 +141,7 @@
#
# Returns an array of lexers.
def lexers
- lexer_file = File.expand_path('../../lexers', __dir__)
- raw = File.open(lexer_file, 'rb').read
- Marshal.load(raw)
- rescue Errno::ENOENT
- raise MentosError, 'Error loading lexer file. Was it created and vendored?'
+ lexers!
end
# Public: Get back all available lexers from mentos itself This makes pygments.rb find lexer plugin installed in this way: https://stackoverflow.com/a/39540683/6013024 The way I found this:
Disabling this optimization (listing files instead of asking pygments API) makes normal plugins work. |
@rbrich do I understand correctly that you install plugins into Pygments that is bundled inside pygments.rb? |
Sort of, but not really. The plugins are standalone Python packages, they don't need to depend on Pygments. You can have this combination and it works fine:
The only condition is that python3 is the same interpreter, in all cases. I'm using both Python and Ruby from Homebrew. Pygments.rb was installed with gem, the custom lexer was installed with |
Oh, I see. So, bundled Pygments picks up system-wide installed plugins. |
pygments.rb no longer stores list of lexers in a file. Instead, Pygments is queried for available lexers. In order to avoid spawning Pygments process when pygments.rb is just loaded, lexers are now stored in a lazily initialized cache.
Hello,
I'm using a software called SoftCover that calls pygments.rb.
Unfortunately, pygments does not support JSX (ReactJS) highlighting, but there is a custom lexer called "pygments-lexer-babylon" that can be installed via
pip
.I'm not a Ruby developer, but I could find out that pygments.rb comes with it's own version of pygments and therefore it can't find the custom lexer.
Also I could see that there is a custom_lexers directory, but I don't know yet how to get pygments.rb to use the custom lexer.
Is there a way to add the package to pygments.rb?
I could try to do it on my own with a little help if there is a possibility for that.
Thanks very much in advance,
Andreas
The text was updated successfully, but these errors were encountered: