Read TextMate syntax files and parse text with them
MIT License
Read {TextMate}[http://macromates.com/] syntax files and parse text with them.
== INSTALL:
gem install textpow
=== Ruby 1.8 Install oniguruma
sudo apt-get -y install libonig-dev
brew install onigumura port install oniguruma5
gem install oniguruma
== Demo
== USAGE:
require 'textpow' syntax = Textpow.syntax('ruby') # or 'source.ruby' or 'lib/textpow/syntax/source.ruby.syntax'
processor = Textpow::DebugProcessor.new
syntax.parse(text, processor)
=== Syntax-files
Syntax files are written with {Textmate grammer}[http://macromates.com/textmate/manual/language_grammars#language_grammars]. They are written in text/binary/xml/yaml format (all can be translated into each other). Textpow can understand the yaml form (ending in .syntax) and the xml form (ending in .tmSyntax or .plist or tmLanguage) via plist library, but not the text or binary form. All syntax files shipped with textpow are in the yaml form, since its easiest to read and less verbose.
Adding a new syntax:
=== Processors A processors is a hook that is called while parsing a text. It must implement these methods:
class MyProcessor def open_tag(tag_name, position_in_current_line); end def close_tag(tag_name, position_in_current_line); end
# called before processing a line
def new_line(line_content); end
# called before parsing anything
def start_parsing(scope_name); end
# called before parsing everything
def end_parsing(scope_name); end
end
Textpow ensures that the methods are called in parsing order. If there are two subsequent calls to open_tag, the first having name="text.string", position=10 and the second having name="markup.string", position=10, it means that the "markup.string" tag is inside the "text.string" tag.
== TODO
== LICENSE: MIT
{}[http://travis-ci.org/grosser/textpow]