Repository files navigation

Pygments Plug-in Parser for GNU GLOBAL

This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

This software can also use Exuberant Ctags for collecting definition tags as well as symbol tags which are collected with Pygments.

Note: global-pygments-plugin is now bundled with GLOBAL-6.3.2 or later. Please use the bundled version in normal case.

Prerequisites

  • gtags (GNU GLOBAL) 5.8.1 or later
  • Python 2.6 or later (3.x is not supported)
  • Pygments python package
  • automake, autoconf, libtool
  • Exuberant Ctags 5.5 or later (optional)

Install

Make sure Pygments package is installed.

$ pip install Pygments

Generate automake/autoconf stuff.

$ ./reconf.sh

Configure, build and install.

# ./configure
$ make
$ sudo make install

Notes:

  • This software must be installed where gtags have been installed. For example, if you have installed gtags under /opt/local, you should run configure as ./confiure --prefix=/opt/local .
  • This software can work with Exuberant Ctags to extract definition tags. ctags is automatically detected by configure script. If you want to specify explicit location of ctags or want to disable ctags integration, you can pass --with-exuberant-ctags=XXX option to configure script.

Configuration

Like other GLOBAL plug-in parsers, in order to use this plug-in parser you need to configure ~/.globalrc.

First, write langmap entries for this plug-in.

pygments-parser|Pygments plug-in parser:\
:tc=common:\
:langmap=ABAP\:.abap:\
:langmap=ANTLR\:.G.g:\
:langmap=ActionScript3\:.as:\
(snip)
:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
:langmap=XSLT\:.xsl.xslt.xpl:\
:langmap=Xtend\:.xtend:\
:gtags_parser=ABAP\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ANTLR\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ActionScript3\:/usr/local/lib/gtags/pygments-parser.la:\
(snip)
:gtags_parser=XQuery\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=XSLT\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=Xtend\:/usr/local/lib/gtags/pygments-parser.la:

(snipped. See complete example: sample.globalrc)
This is so long, but you can remove unnecessary entries for you. You can also add languages not listed here but supported by Pygments.

Change path of /usr/local/lib/gtags/pygments-parser.a according to the path where you installed this plug-in.

Then, edit default: clause of ~/.globalrc to use pygments-parser. (Or you can configure this by setting environment variable GTAGSLABEL.)

 default:\
- :tc=native:
+ :tc=native:tc=pygments:
+pygments:\
+:tc=pygments-parser:tc=htags:

Complete example is available: sample.globalrc.

Usage

Once you have configured ~/.globalrc, you can use gtags as usual.

$ cat hello.rb
class Hello
def hello
puts message
end
def message; 'hello, world'; end
end
$ gtags
$ global -sx message hello.rb message 3 hello.rb puts message
message 6 hello.rb def message; 'hello, world'; end

As you can see the identifier 'message' in line 3 and line 6 are listed. They are originally reference tag and definition tag respectively, but they are both listed as symbol tags as they cannot be distinguished from Pygments's output.

When ctags is installed, this parser calls ctags to collect definition tags. This enables distinguishing definition tags and reference tags. Of course, this is only avaiable for programming languages which is supported by ctags.

$ gtags
$ global -x message hello.rb message 6 hello.rb def message; 'hello, world'; end
$ global -rx message hello.rb message 3 hello.rb puts message

You can see 'message' are listed as definition tag and reference tag.

Customizing Behavior

Some programming languages allow punctuation characters within identifiers. For example methods like gsub! or empty? in Ruby. By default, this plug-in parser includes these kind of punctuation characters in generated tags. But for some GLOBAL front-ends (like gtags.el) this behavior is inconvenient.

In such case, you can set environment variable GTAGSPYGMENTSOPTS=strippunctuation before running gtags to strip punctuation characters from generated tags.

$ cat hello.rb
s = 'hello'
s.gsub!(/./, '')
s.empty?
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty? 1 @n 3
gsub! 1 @n 2
s 1 @n 1-2
$ export GTAGSPYGMENTSOPTS=strippunctuation
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty 1 @n 3
gsub 1 @n 2
s 1 @n 1-2

Limitations

This parser works for most programming languages supported by Pygments. But for some languages it does not work well.
For example, CoffeeScript lexer in Pygments 1.6 splits tokens in an unusual manner. This may contribute to readability as a syntax highlighter, but not work well with this software.

Issues and Questions

If you have any issues or questions, please create an issue on GitHub.

https://github.com/yoshizow/global-pygments-plugin/issues

Pull requests are also welcome!

This product is depend on but does not have direct relationship to neither GNU GLOBAL, Pygments nor Exuberant Ctags. Please don't ask them questions about this software.

Tested Environment

Tested with:

  • Python 2.7.3
  • Pygments 1.6
  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • global 6.2.9
  • Exuberant Ctags 5.8

About

Pygments Plug-in Parser for GNU GLOBAL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Pygments Plug-in Parser for GNU GLOBAL

This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

This software can also use Exuberant Ctags for collecting definition tags as well as symbol tags which are collected with Pygments.

Note: global-pygments-plugin is now bundled with GLOBAL-6.3.2 or later. Please use the bundled version in normal case.

Prerequisites

  • gtags (GNU GLOBAL) 5.8.1 or later
  • Python 2.6 or later (3.x is not supported)
  • Pygments python package
  • automake, autoconf, libtool
  • Exuberant Ctags 5.5 or later (optional)

Install

Make sure Pygments package is installed.

$ pip install Pygments

Generate automake/autoconf stuff.

$ ./reconf.sh

Configure, build and install.

# ./configure
$ make
$ sudo make install

Notes:

  • This software must be installed where gtags have been installed. For example, if you have installed gtags under /opt/local, you should run configure as ./confiure --prefix=/opt/local .
  • This software can work with Exuberant Ctags to extract definition tags. ctags is automatically detected by configure script. If you want to specify explicit location of ctags or want to disable ctags integration, you can pass --with-exuberant-ctags=XXX option to configure script.

Configuration

Like other GLOBAL plug-in parsers, in order to use this plug-in parser you need to configure ~/.globalrc.

First, write langmap entries for this plug-in.

pygments-parser|Pygments plug-in parser:\
:tc=common:\
:langmap=ABAP\:.abap:\
:langmap=ANTLR\:.G.g:\
:langmap=ActionScript3\:.as:\
(snip)
:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
:langmap=XSLT\:.xsl.xslt.xpl:\
:langmap=Xtend\:.xtend:\
:gtags_parser=ABAP\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ANTLR\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ActionScript3\:/usr/local/lib/gtags/pygments-parser.la:\
(snip)
:gtags_parser=XQuery\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=XSLT\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=Xtend\:/usr/local/lib/gtags/pygments-parser.la:

(snipped. See complete example: sample.globalrc)
This is so long, but you can remove unnecessary entries for you. You can also add languages not listed here but supported by Pygments.

Change path of /usr/local/lib/gtags/pygments-parser.a according to the path where you installed this plug-in.

Then, edit default: clause of ~/.globalrc to use pygments-parser. (Or you can configure this by setting environment variable GTAGSLABEL.)

 default:\
- :tc=native:
+ :tc=native:tc=pygments:
+pygments:\
+:tc=pygments-parser:tc=htags:

Complete example is available: sample.globalrc.

Usage

Once you have configured ~/.globalrc, you can use gtags as usual.

$ cat hello.rb
class Hello
def hello
puts message
end
def message; 'hello, world'; end
end
$ gtags
$ global -sx message hello.rb message 3 hello.rb puts message
message 6 hello.rb def message; 'hello, world'; end

As you can see the identifier 'message' in line 3 and line 6 are listed. They are originally reference tag and definition tag respectively, but they are both listed as symbol tags as they cannot be distinguished from Pygments's output.

When ctags is installed, this parser calls ctags to collect definition tags. This enables distinguishing definition tags and reference tags. Of course, this is only avaiable for programming languages which is supported by ctags.

$ gtags
$ global -x message hello.rb message 6 hello.rb def message; 'hello, world'; end
$ global -rx message hello.rb message 3 hello.rb puts message

You can see 'message' are listed as definition tag and reference tag.

Customizing Behavior

Some programming languages allow punctuation characters within identifiers. For example methods like gsub! or empty? in Ruby. By default, this plug-in parser includes these kind of punctuation characters in generated tags. But for some GLOBAL front-ends (like gtags.el) this behavior is inconvenient.

In such case, you can set environment variable GTAGSPYGMENTSOPTS=strippunctuation before running gtags to strip punctuation characters from generated tags.

$ cat hello.rb
s = 'hello'
s.gsub!(/./, '')
s.empty?
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty? 1 @n 3
gsub! 1 @n 2
s 1 @n 1-2
$ export GTAGSPYGMENTSOPTS=strippunctuation
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty 1 @n 3
gsub 1 @n 2
s 1 @n 1-2

Limitations

This parser works for most programming languages supported by Pygments. But for some languages it does not work well.
For example, CoffeeScript lexer in Pygments 1.6 splits tokens in an unusual manner. This may contribute to readability as a syntax highlighter, but not work well with this software.

Issues and Questions

If you have any issues or questions, please create an issue on GitHub.

https://github.com/yoshizow/global-pygments-plugin/issues

Pull requests are also welcome!

This product is depend on but does not have direct relationship to neither GNU GLOBAL, Pygments nor Exuberant Ctags. Please don't ask them questions about this software.

Tested Environment

Tested with:

  • Python 2.7.3
  • Pygments 1.6
  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • global 6.2.9
  • Exuberant Ctags 5.8

About

Pygments Plug-in Parser for GNU GLOBAL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Pygments Plug-in Parser for GNU GLOBAL

This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

This software can also use Exuberant Ctags for collecting definition tags as well as symbol tags which are collected with Pygments.

Note: global-pygments-plugin is now bundled with GLOBAL-6.3.2 or later. Please use the bundled version in normal case.

Prerequisites

  • gtags (GNU GLOBAL) 5.8.1 or later
  • Python 2.6 or later (3.x is not supported)
  • Pygments python package
  • automake, autoconf, libtool
  • Exuberant Ctags 5.5 or later (optional)

Install

Make sure Pygments package is installed.

$ pip install Pygments

Generate automake/autoconf stuff.

$ ./reconf.sh

Configure, build and install.

# ./configure
$ make
$ sudo make install

Notes:

  • This software must be installed where gtags have been installed. For example, if you have installed gtags under /opt/local, you should run configure as ./confiure --prefix=/opt/local .
  • This software can work with Exuberant Ctags to extract definition tags. ctags is automatically detected by configure script. If you want to specify explicit location of ctags or want to disable ctags integration, you can pass --with-exuberant-ctags=XXX option to configure script.

Configuration

Like other GLOBAL plug-in parsers, in order to use this plug-in parser you need to configure ~/.globalrc.

First, write langmap entries for this plug-in.

pygments-parser|Pygments plug-in parser:\
:tc=common:\
:langmap=ABAP\:.abap:\
:langmap=ANTLR\:.G.g:\
:langmap=ActionScript3\:.as:\
(snip)
:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
:langmap=XSLT\:.xsl.xslt.xpl:\
:langmap=Xtend\:.xtend:\
:gtags_parser=ABAP\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ANTLR\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ActionScript3\:/usr/local/lib/gtags/pygments-parser.la:\
(snip)
:gtags_parser=XQuery\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=XSLT\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=Xtend\:/usr/local/lib/gtags/pygments-parser.la:

(snipped. See complete example: sample.globalrc)
This is so long, but you can remove unnecessary entries for you. You can also add languages not listed here but supported by Pygments.

Change path of /usr/local/lib/gtags/pygments-parser.a according to the path where you installed this plug-in.

Then, edit default: clause of ~/.globalrc to use pygments-parser. (Or you can configure this by setting environment variable GTAGSLABEL.)

 default:\
- :tc=native:
+ :tc=native:tc=pygments:
+pygments:\
+:tc=pygments-parser:tc=htags:

Complete example is available: sample.globalrc.

Usage

Once you have configured ~/.globalrc, you can use gtags as usual.

$ cat hello.rb
class Hello
def hello
puts message
end
def message; 'hello, world'; end
end
$ gtags
$ global -sx message hello.rb message 3 hello.rb puts message
message 6 hello.rb def message; 'hello, world'; end

As you can see the identifier 'message' in line 3 and line 6 are listed. They are originally reference tag and definition tag respectively, but they are both listed as symbol tags as they cannot be distinguished from Pygments's output.

When ctags is installed, this parser calls ctags to collect definition tags. This enables distinguishing definition tags and reference tags. Of course, this is only avaiable for programming languages which is supported by ctags.

$ gtags
$ global -x message hello.rb message 6 hello.rb def message; 'hello, world'; end
$ global -rx message hello.rb message 3 hello.rb puts message

You can see 'message' are listed as definition tag and reference tag.

Customizing Behavior

Some programming languages allow punctuation characters within identifiers. For example methods like gsub! or empty? in Ruby. By default, this plug-in parser includes these kind of punctuation characters in generated tags. But for some GLOBAL front-ends (like gtags.el) this behavior is inconvenient.

In such case, you can set environment variable GTAGSPYGMENTSOPTS=strippunctuation before running gtags to strip punctuation characters from generated tags.

$ cat hello.rb
s = 'hello'
s.gsub!(/./, '')
s.empty?
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty? 1 @n 3
gsub! 1 @n 2
s 1 @n 1-2
$ export GTAGSPYGMENTSOPTS=strippunctuation
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty 1 @n 3
gsub 1 @n 2
s 1 @n 1-2

Limitations

This parser works for most programming languages supported by Pygments. But for some languages it does not work well.
For example, CoffeeScript lexer in Pygments 1.6 splits tokens in an unusual manner. This may contribute to readability as a syntax highlighter, but not work well with this software.

Issues and Questions

If you have any issues or questions, please create an issue on GitHub.

https://github.com/yoshizow/global-pygments-plugin/issues

Pull requests are also welcome!

This product is depend on but does not have direct relationship to neither GNU GLOBAL, Pygments nor Exuberant Ctags. Please don't ask them questions about this software.

Tested Environment

Tested with:

  • Python 2.7.3
  • Pygments 1.6
  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • global 6.2.9
  • Exuberant Ctags 5.8

About

Pygments Plug-in Parser for GNU GLOBAL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Pygments Plug-in Parser for GNU GLOBAL

This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

This software can also use Exuberant Ctags for collecting definition tags as well as symbol tags which are collected with Pygments.

Note: global-pygments-plugin is now bundled with GLOBAL-6.3.2 or later. Please use the bundled version in normal case.

Prerequisites

  • gtags (GNU GLOBAL) 5.8.1 or later
  • Python 2.6 or later (3.x is not supported)
  • Pygments python package
  • automake, autoconf, libtool
  • Exuberant Ctags 5.5 or later (optional)

Install

Make sure Pygments package is installed.

$ pip install Pygments

Generate automake/autoconf stuff.

$ ./reconf.sh

Configure, build and install.

# ./configure
$ make
$ sudo make install

Notes:

  • This software must be installed where gtags have been installed. For example, if you have installed gtags under /opt/local, you should run configure as ./confiure --prefix=/opt/local .
  • This software can work with Exuberant Ctags to extract definition tags. ctags is automatically detected by configure script. If you want to specify explicit location of ctags or want to disable ctags integration, you can pass --with-exuberant-ctags=XXX option to configure script.

Configuration

Like other GLOBAL plug-in parsers, in order to use this plug-in parser you need to configure ~/.globalrc.

First, write langmap entries for this plug-in.

pygments-parser|Pygments plug-in parser:\
:tc=common:\
:langmap=ABAP\:.abap:\
:langmap=ANTLR\:.G.g:\
:langmap=ActionScript3\:.as:\
(snip)
:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
:langmap=XSLT\:.xsl.xslt.xpl:\
:langmap=Xtend\:.xtend:\
:gtags_parser=ABAP\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ANTLR\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ActionScript3\:/usr/local/lib/gtags/pygments-parser.la:\
(snip)
:gtags_parser=XQuery\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=XSLT\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=Xtend\:/usr/local/lib/gtags/pygments-parser.la:

(snipped. See complete example: sample.globalrc)
This is so long, but you can remove unnecessary entries for you. You can also add languages not listed here but supported by Pygments.

Change path of /usr/local/lib/gtags/pygments-parser.a according to the path where you installed this plug-in.

Then, edit default: clause of ~/.globalrc to use pygments-parser. (Or you can configure this by setting environment variable GTAGSLABEL.)

 default:\
- :tc=native:
+ :tc=native:tc=pygments:
+pygments:\
+:tc=pygments-parser:tc=htags:

Complete example is available: sample.globalrc.

Usage

Once you have configured ~/.globalrc, you can use gtags as usual.

$ cat hello.rb
class Hello
def hello
puts message
end
def message; 'hello, world'; end
end
$ gtags
$ global -sx message hello.rb message 3 hello.rb puts message
message 6 hello.rb def message; 'hello, world'; end

As you can see the identifier 'message' in line 3 and line 6 are listed. They are originally reference tag and definition tag respectively, but they are both listed as symbol tags as they cannot be distinguished from Pygments's output.

When ctags is installed, this parser calls ctags to collect definition tags. This enables distinguishing definition tags and reference tags. Of course, this is only avaiable for programming languages which is supported by ctags.

$ gtags
$ global -x message hello.rb message 6 hello.rb def message; 'hello, world'; end
$ global -rx message hello.rb message 3 hello.rb puts message

You can see 'message' are listed as definition tag and reference tag.

Customizing Behavior

Some programming languages allow punctuation characters within identifiers. For example methods like gsub! or empty? in Ruby. By default, this plug-in parser includes these kind of punctuation characters in generated tags. But for some GLOBAL front-ends (like gtags.el) this behavior is inconvenient.

In such case, you can set environment variable GTAGSPYGMENTSOPTS=strippunctuation before running gtags to strip punctuation characters from generated tags.

$ cat hello.rb
s = 'hello'
s.gsub!(/./, '')
s.empty?
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty? 1 @n 3
gsub! 1 @n 2
s 1 @n 1-2
$ export GTAGSPYGMENTSOPTS=strippunctuation
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty 1 @n 3
gsub 1 @n 2
s 1 @n 1-2

Limitations

This parser works for most programming languages supported by Pygments. But for some languages it does not work well.
For example, CoffeeScript lexer in Pygments 1.6 splits tokens in an unusual manner. This may contribute to readability as a syntax highlighter, but not work well with this software.

Issues and Questions

If you have any issues or questions, please create an issue on GitHub.

https://github.com/yoshizow/global-pygments-plugin/issues

Pull requests are also welcome!

This product is depend on but does not have direct relationship to neither GNU GLOBAL, Pygments nor Exuberant Ctags. Please don't ask them questions about this software.

Tested Environment

Tested with:

  • Python 2.7.3
  • Pygments 1.6
  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • global 6.2.9
  • Exuberant Ctags 5.8

About

Pygments Plug-in Parser for GNU GLOBAL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Pygments Plug-in Parser for GNU GLOBAL

This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

This software can also use Exuberant Ctags for collecting definition tags as well as symbol tags which are collected with Pygments.

Note: global-pygments-plugin is now bundled with GLOBAL-6.3.2 or later. Please use the bundled version in normal case.

Prerequisites

  • gtags (GNU GLOBAL) 5.8.1 or later
  • Python 2.6 or later (3.x is not supported)
  • Pygments python package
  • automake, autoconf, libtool
  • Exuberant Ctags 5.5 or later (optional)

Install

Make sure Pygments package is installed.

$ pip install Pygments

Generate automake/autoconf stuff.

$ ./reconf.sh

Configure, build and install.

# ./configure
$ make
$ sudo make install

Notes:

  • This software must be installed where gtags have been installed. For example, if you have installed gtags under /opt/local, you should run configure as ./confiure --prefix=/opt/local .
  • This software can work with Exuberant Ctags to extract definition tags. ctags is automatically detected by configure script. If you want to specify explicit location of ctags or want to disable ctags integration, you can pass --with-exuberant-ctags=XXX option to configure script.

Configuration

Like other GLOBAL plug-in parsers, in order to use this plug-in parser you need to configure ~/.globalrc.

First, write langmap entries for this plug-in.

pygments-parser|Pygments plug-in parser:\
:tc=common:\
:langmap=ABAP\:.abap:\
:langmap=ANTLR\:.G.g:\
:langmap=ActionScript3\:.as:\
(snip)
:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
:langmap=XSLT\:.xsl.xslt.xpl:\
:langmap=Xtend\:.xtend:\
:gtags_parser=ABAP\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ANTLR\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ActionScript3\:/usr/local/lib/gtags/pygments-parser.la:\
(snip)
:gtags_parser=XQuery\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=XSLT\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=Xtend\:/usr/local/lib/gtags/pygments-parser.la:

(snipped. See complete example: sample.globalrc)
This is so long, but you can remove unnecessary entries for you. You can also add languages not listed here but supported by Pygments.

Change path of /usr/local/lib/gtags/pygments-parser.a according to the path where you installed this plug-in.

Then, edit default: clause of ~/.globalrc to use pygments-parser. (Or you can configure this by setting environment variable GTAGSLABEL.)

 default:\
- :tc=native:
+ :tc=native:tc=pygments:
+pygments:\
+:tc=pygments-parser:tc=htags:

Complete example is available: sample.globalrc.

Usage

Once you have configured ~/.globalrc, you can use gtags as usual.

$ cat hello.rb
class Hello
def hello
puts message
end
def message; 'hello, world'; end
end
$ gtags
$ global -sx message hello.rb message 3 hello.rb puts message
message 6 hello.rb def message; 'hello, world'; end

As you can see the identifier 'message' in line 3 and line 6 are listed. They are originally reference tag and definition tag respectively, but they are both listed as symbol tags as they cannot be distinguished from Pygments's output.

When ctags is installed, this parser calls ctags to collect definition tags. This enables distinguishing definition tags and reference tags. Of course, this is only avaiable for programming languages which is supported by ctags.

$ gtags
$ global -x message hello.rb message 6 hello.rb def message; 'hello, world'; end
$ global -rx message hello.rb message 3 hello.rb puts message

You can see 'message' are listed as definition tag and reference tag.

Customizing Behavior

Some programming languages allow punctuation characters within identifiers. For example methods like gsub! or empty? in Ruby. By default, this plug-in parser includes these kind of punctuation characters in generated tags. But for some GLOBAL front-ends (like gtags.el) this behavior is inconvenient.

In such case, you can set environment variable GTAGSPYGMENTSOPTS=strippunctuation before running gtags to strip punctuation characters from generated tags.

$ cat hello.rb
s = 'hello'
s.gsub!(/./, '')
s.empty?
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty? 1 @n 3
gsub! 1 @n 2
s 1 @n 1-2
$ export GTAGSPYGMENTSOPTS=strippunctuation
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty 1 @n 3
gsub 1 @n 2
s 1 @n 1-2

Limitations

This parser works for most programming languages supported by Pygments. But for some languages it does not work well.
For example, CoffeeScript lexer in Pygments 1.6 splits tokens in an unusual manner. This may contribute to readability as a syntax highlighter, but not work well with this software.

Issues and Questions

If you have any issues or questions, please create an issue on GitHub.

https://github.com/yoshizow/global-pygments-plugin/issues

Pull requests are also welcome!

This product is depend on but does not have direct relationship to neither GNU GLOBAL, Pygments nor Exuberant Ctags. Please don't ask them questions about this software.

Tested Environment

Tested with:

  • Python 2.7.3
  • Pygments 1.6
  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • global 6.2.9
  • Exuberant Ctags 5.8

About

Pygments Plug-in Parser for GNU GLOBAL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Pygments Plug-in Parser for GNU GLOBAL

This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

This software can also use Exuberant Ctags for collecting definition tags as well as symbol tags which are collected with Pygments.

Note: global-pygments-plugin is now bundled with GLOBAL-6.3.2 or later. Please use the bundled version in normal case.

Prerequisites

  • gtags (GNU GLOBAL) 5.8.1 or later
  • Python 2.6 or later (3.x is not supported)
  • Pygments python package
  • automake, autoconf, libtool
  • Exuberant Ctags 5.5 or later (optional)

Install

Make sure Pygments package is installed.

$ pip install Pygments

Generate automake/autoconf stuff.

$ ./reconf.sh

Configure, build and install.

# ./configure
$ make
$ sudo make install

Notes:

  • This software must be installed where gtags have been installed. For example, if you have installed gtags under /opt/local, you should run configure as ./confiure --prefix=/opt/local .
  • This software can work with Exuberant Ctags to extract definition tags. ctags is automatically detected by configure script. If you want to specify explicit location of ctags or want to disable ctags integration, you can pass --with-exuberant-ctags=XXX option to configure script.

Configuration

Like other GLOBAL plug-in parsers, in order to use this plug-in parser you need to configure ~/.globalrc.

First, write langmap entries for this plug-in.

pygments-parser|Pygments plug-in parser:\
:tc=common:\
:langmap=ABAP\:.abap:\
:langmap=ANTLR\:.G.g:\
:langmap=ActionScript3\:.as:\
(snip)
:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
:langmap=XSLT\:.xsl.xslt.xpl:\
:langmap=Xtend\:.xtend:\
:gtags_parser=ABAP\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ANTLR\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ActionScript3\:/usr/local/lib/gtags/pygments-parser.la:\
(snip)
:gtags_parser=XQuery\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=XSLT\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=Xtend\:/usr/local/lib/gtags/pygments-parser.la:

(snipped. See complete example: sample.globalrc)
This is so long, but you can remove unnecessary entries for you. You can also add languages not listed here but supported by Pygments.

Change path of /usr/local/lib/gtags/pygments-parser.a according to the path where you installed this plug-in.

Then, edit default: clause of ~/.globalrc to use pygments-parser. (Or you can configure this by setting environment variable GTAGSLABEL.)

 default:\
- :tc=native:
+ :tc=native:tc=pygments:
+pygments:\
+:tc=pygments-parser:tc=htags:

Complete example is available: sample.globalrc.

Usage

Once you have configured ~/.globalrc, you can use gtags as usual.

$ cat hello.rb
class Hello
def hello
puts message
end
def message; 'hello, world'; end
end
$ gtags
$ global -sx message hello.rb message 3 hello.rb puts message
message 6 hello.rb def message; 'hello, world'; end

As you can see the identifier 'message' in line 3 and line 6 are listed. They are originally reference tag and definition tag respectively, but they are both listed as symbol tags as they cannot be distinguished from Pygments's output.

When ctags is installed, this parser calls ctags to collect definition tags. This enables distinguishing definition tags and reference tags. Of course, this is only avaiable for programming languages which is supported by ctags.

$ gtags
$ global -x message hello.rb message 6 hello.rb def message; 'hello, world'; end
$ global -rx message hello.rb message 3 hello.rb puts message

You can see 'message' are listed as definition tag and reference tag.

Customizing Behavior

Some programming languages allow punctuation characters within identifiers. For example methods like gsub! or empty? in Ruby. By default, this plug-in parser includes these kind of punctuation characters in generated tags. But for some GLOBAL front-ends (like gtags.el) this behavior is inconvenient.

In such case, you can set environment variable GTAGSPYGMENTSOPTS=strippunctuation before running gtags to strip punctuation characters from generated tags.

$ cat hello.rb
s = 'hello'
s.gsub!(/./, '')
s.empty?
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty? 1 @n 3
gsub! 1 @n 2
s 1 @n 1-2
$ export GTAGSPYGMENTSOPTS=strippunctuation
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty 1 @n 3
gsub 1 @n 2
s 1 @n 1-2

Limitations

This parser works for most programming languages supported by Pygments. But for some languages it does not work well.
For example, CoffeeScript lexer in Pygments 1.6 splits tokens in an unusual manner. This may contribute to readability as a syntax highlighter, but not work well with this software.

Issues and Questions

If you have any issues or questions, please create an issue on GitHub.

https://github.com/yoshizow/global-pygments-plugin/issues

Pull requests are also welcome!

This product is depend on but does not have direct relationship to neither GNU GLOBAL, Pygments nor Exuberant Ctags. Please don't ask them questions about this software.

Tested Environment

Tested with:

  • Python 2.7.3
  • Pygments 1.6
  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • global 6.2.9
  • Exuberant Ctags 5.8

About

Pygments Plug-in Parser for GNU GLOBAL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Pygments Plug-in Parser for GNU GLOBAL

This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

This software can also use Exuberant Ctags for collecting definition tags as well as symbol tags which are collected with Pygments.

Note: global-pygments-plugin is now bundled with GLOBAL-6.3.2 or later. Please use the bundled version in normal case.

Prerequisites

  • gtags (GNU GLOBAL) 5.8.1 or later
  • Python 2.6 or later (3.x is not supported)
  • Pygments python package
  • automake, autoconf, libtool
  • Exuberant Ctags 5.5 or later (optional)

Install

Make sure Pygments package is installed.

$ pip install Pygments

Generate automake/autoconf stuff.

$ ./reconf.sh

Configure, build and install.

# ./configure
$ make
$ sudo make install

Notes:

  • This software must be installed where gtags have been installed. For example, if you have installed gtags under /opt/local, you should run configure as ./confiure --prefix=/opt/local .
  • This software can work with Exuberant Ctags to extract definition tags. ctags is automatically detected by configure script. If you want to specify explicit location of ctags or want to disable ctags integration, you can pass --with-exuberant-ctags=XXX option to configure script.

Configuration

Like other GLOBAL plug-in parsers, in order to use this plug-in parser you need to configure ~/.globalrc.

First, write langmap entries for this plug-in.

pygments-parser|Pygments plug-in parser:\
:tc=common:\
:langmap=ABAP\:.abap:\
:langmap=ANTLR\:.G.g:\
:langmap=ActionScript3\:.as:\
(snip)
:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
:langmap=XSLT\:.xsl.xslt.xpl:\
:langmap=Xtend\:.xtend:\
:gtags_parser=ABAP\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ANTLR\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ActionScript3\:/usr/local/lib/gtags/pygments-parser.la:\
(snip)
:gtags_parser=XQuery\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=XSLT\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=Xtend\:/usr/local/lib/gtags/pygments-parser.la:

(snipped. See complete example: sample.globalrc)
This is so long, but you can remove unnecessary entries for you. You can also add languages not listed here but supported by Pygments.

Change path of /usr/local/lib/gtags/pygments-parser.a according to the path where you installed this plug-in.

Then, edit default: clause of ~/.globalrc to use pygments-parser. (Or you can configure this by setting environment variable GTAGSLABEL.)

 default:\
- :tc=native:
+ :tc=native:tc=pygments:
+pygments:\
+:tc=pygments-parser:tc=htags:

Complete example is available: sample.globalrc.

Usage

Once you have configured ~/.globalrc, you can use gtags as usual.

$ cat hello.rb
class Hello
def hello
puts message
end
def message; 'hello, world'; end
end
$ gtags
$ global -sx message hello.rb message 3 hello.rb puts message
message 6 hello.rb def message; 'hello, world'; end

As you can see the identifier 'message' in line 3 and line 6 are listed. They are originally reference tag and definition tag respectively, but they are both listed as symbol tags as they cannot be distinguished from Pygments's output.

When ctags is installed, this parser calls ctags to collect definition tags. This enables distinguishing definition tags and reference tags. Of course, this is only avaiable for programming languages which is supported by ctags.

$ gtags
$ global -x message hello.rb message 6 hello.rb def message; 'hello, world'; end
$ global -rx message hello.rb message 3 hello.rb puts message

You can see 'message' are listed as definition tag and reference tag.

Customizing Behavior

Some programming languages allow punctuation characters within identifiers. For example methods like gsub! or empty? in Ruby. By default, this plug-in parser includes these kind of punctuation characters in generated tags. But for some GLOBAL front-ends (like gtags.el) this behavior is inconvenient.

In such case, you can set environment variable GTAGSPYGMENTSOPTS=strippunctuation before running gtags to strip punctuation characters from generated tags.

$ cat hello.rb
s = 'hello'
s.gsub!(/./, '')
s.empty?
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty? 1 @n 3
gsub! 1 @n 2
s 1 @n 1-2
$ export GTAGSPYGMENTSOPTS=strippunctuation
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty 1 @n 3
gsub 1 @n 2
s 1 @n 1-2

Limitations

This parser works for most programming languages supported by Pygments. But for some languages it does not work well.
For example, CoffeeScript lexer in Pygments 1.6 splits tokens in an unusual manner. This may contribute to readability as a syntax highlighter, but not work well with this software.

Issues and Questions

If you have any issues or questions, please create an issue on GitHub.

https://github.com/yoshizow/global-pygments-plugin/issues

Pull requests are also welcome!

This product is depend on but does not have direct relationship to neither GNU GLOBAL, Pygments nor Exuberant Ctags. Please don't ask them questions about this software.

Tested Environment

Tested with:

  • Python 2.7.3
  • Pygments 1.6
  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • global 6.2.9
  • Exuberant Ctags 5.8

About

Pygments Plug-in Parser for GNU GLOBAL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Pygments Plug-in Parser for GNU GLOBAL

This software is a plug-in parser for GNU GLOBAL. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.

This software can also use Exuberant Ctags for collecting definition tags as well as symbol tags which are collected with Pygments.

Note: global-pygments-plugin is now bundled with GLOBAL-6.3.2 or later. Please use the bundled version in normal case.

Prerequisites

  • gtags (GNU GLOBAL) 5.8.1 or later
  • Python 2.6 or later (3.x is not supported)
  • Pygments python package
  • automake, autoconf, libtool
  • Exuberant Ctags 5.5 or later (optional)

Install

Make sure Pygments package is installed.

$ pip install Pygments

Generate automake/autoconf stuff.

$ ./reconf.sh

Configure, build and install.

# ./configure
$ make
$ sudo make install

Notes:

  • This software must be installed where gtags have been installed. For example, if you have installed gtags under /opt/local, you should run configure as ./confiure --prefix=/opt/local .
  • This software can work with Exuberant Ctags to extract definition tags. ctags is automatically detected by configure script. If you want to specify explicit location of ctags or want to disable ctags integration, you can pass --with-exuberant-ctags=XXX option to configure script.

Configuration

Like other GLOBAL plug-in parsers, in order to use this plug-in parser you need to configure ~/.globalrc.

First, write langmap entries for this plug-in.

pygments-parser|Pygments plug-in parser:\
:tc=common:\
:langmap=ABAP\:.abap:\
:langmap=ANTLR\:.G.g:\
:langmap=ActionScript3\:.as:\
(snip)
:langmap=XQuery\:.xqy.xquery.xq.xql.xqm:\
:langmap=XSLT\:.xsl.xslt.xpl:\
:langmap=Xtend\:.xtend:\
:gtags_parser=ABAP\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ANTLR\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=ActionScript3\:/usr/local/lib/gtags/pygments-parser.la:\
(snip)
:gtags_parser=XQuery\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=XSLT\:/usr/local/lib/gtags/pygments-parser.la:\
:gtags_parser=Xtend\:/usr/local/lib/gtags/pygments-parser.la:

(snipped. See complete example: sample.globalrc)
This is so long, but you can remove unnecessary entries for you. You can also add languages not listed here but supported by Pygments.

Change path of /usr/local/lib/gtags/pygments-parser.a according to the path where you installed this plug-in.

Then, edit default: clause of ~/.globalrc to use pygments-parser. (Or you can configure this by setting environment variable GTAGSLABEL.)

 default:\
- :tc=native:
+ :tc=native:tc=pygments:
+pygments:\
+:tc=pygments-parser:tc=htags:

Complete example is available: sample.globalrc.

Usage

Once you have configured ~/.globalrc, you can use gtags as usual.

$ cat hello.rb
class Hello
def hello
puts message
end
def message; 'hello, world'; end
end
$ gtags
$ global -sx message hello.rb message 3 hello.rb puts message
message 6 hello.rb def message; 'hello, world'; end

As you can see the identifier 'message' in line 3 and line 6 are listed. They are originally reference tag and definition tag respectively, but they are both listed as symbol tags as they cannot be distinguished from Pygments's output.

When ctags is installed, this parser calls ctags to collect definition tags. This enables distinguishing definition tags and reference tags. Of course, this is only avaiable for programming languages which is supported by ctags.

$ gtags
$ global -x message hello.rb message 6 hello.rb def message; 'hello, world'; end
$ global -rx message hello.rb message 3 hello.rb puts message

You can see 'message' are listed as definition tag and reference tag.

Customizing Behavior

Some programming languages allow punctuation characters within identifiers. For example methods like gsub! or empty? in Ruby. By default, this plug-in parser includes these kind of punctuation characters in generated tags. But for some GLOBAL front-ends (like gtags.el) this behavior is inconvenient.

In such case, you can set environment variable GTAGSPYGMENTSOPTS=strippunctuation before running gtags to strip punctuation characters from generated tags.

$ cat hello.rb
s = 'hello'
s.gsub!(/./, '')
s.empty?
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty? 1 @n 3
gsub! 1 @n 2
s 1 @n 1-2
$ export GTAGSPYGMENTSOPTS=strippunctuation
$ gtags
$ gtags -d GRTAGS
__.COMPACT __.COMPACT
__.COMPLINE __.COMPLINE
__.COMPNAME __.COMPNAME
__.VERSION __.VERSION 6
empty 1 @n 3
gsub 1 @n 2
s 1 @n 1-2

Limitations

This parser works for most programming languages supported by Pygments. But for some languages it does not work well.
For example, CoffeeScript lexer in Pygments 1.6 splits tokens in an unusual manner. This may contribute to readability as a syntax highlighter, but not work well with this software.

Issues and Questions

If you have any issues or questions, please create an issue on GitHub.

https://github.com/yoshizow/global-pygments-plugin/issues

Pull requests are also welcome!

This product is depend on but does not have direct relationship to neither GNU GLOBAL, Pygments nor Exuberant Ctags. Please don't ask them questions about this software.

Tested Environment

Tested with:

  • Python 2.7.3
  • Pygments 1.6
  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • global 6.2.9
  • Exuberant Ctags 5.8

About

Pygments Plug-in Parser for GNU GLOBAL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages