JSPM

  • Created
  • Published
  • Downloads 1062352
  • Score
    100M100P100Q269794F

VSCode TextMate grammar helpers

Package Exports

  • vscode-textmate

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (vscode-textmate) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

VSCode TextMate

An interpreter for grammar files as defined by TextMate. Supports loading grammar files from JSON or PLIST format. Grammar injection is currently not supported.

Installing

npm install vscode-textmate

Using

var Registry = require('vscode-textmate').Registry;
var registry = new Registry();
var grammar = registry.loadGrammarFromPathSync('./javascript.tmbundle/Syntaxes/JavaScript.plist');

var lineTokens = grammar.tokenizeLine('function add(a,b) { return a+b; }');
for (var i = 0; i < lineTokens.tokens.length; i++) {
    var token = lineTokens.tokens[i];
    console.log('Token from ' + token.startIndex + ' to ' + token.endIndex + ' with scopes ' + token.scopes);
}

Using asynchronously

Sometimes, it is necessary to manage the list of known grammars outside of vscode-textmate. The sample below shows how this works:

var Registry = require('vscode-textmate').Registry;

var registry = new Registry({
    getFilePath: function (scopeName) {
        // Return here the path to the grammar file for `scopeName`
        if (scopeName === 'source.js') {
            return './javascript.tmbundle/Syntaxes/JavaScript.plist';
        }
        return null;
    }
});

// Load the JavaScript grammar and any other grammars included by it async.
registry.loadGrammar('source.js', function(err, grammar) {
    if (err) {
        console.error(err);
        return;
    }

    // at this point `grammar` is available...
});

Tokenizing multiple lines

To tokenize multiple lines, you must pass in the previous returned ruleStack.

var ruleStack = null;
for (var i = 0; i < lines.length; i++) {
    var r = grammar.tokenizeLine(lines[i], ruleStack);
    console.log('Line: #' + i + ', tokens: ' + r.tokens);
    ruleStack = r.ruleStack;
}

API doc

See the .d.ts file

Developing

  • Clone the repository
  • Run npm install
  • Compile in the background with npm run watch
  • Run tests with npm test
  • Run benchmark with npm run benchmark