diff options
Diffstat (limited to 'tool')
-rwxr-xr-x | tool/id2token.rb | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tool/id2token.rb b/tool/id2token.rb new file mode 100755 index 0000000000..4c7189c094 --- /dev/null +++ b/tool/id2token.rb @@ -0,0 +1,29 @@ +#! /usr/bin/ruby -p +BEGIN { + require 'optparse' + vpath = ["."] + header = nil + + opt = OptionParser.new do |o| + o.on('-v', '--vpath=DIR') {|dirs| vpath.concat dirs.split(File::PATH_SEPARATOR)} + header = o.order!(ARGV).shift + end or abort opt.opt_s + + TOKENS = {} + vpath.find do |dir| + begin + h = File.read(File.join(dir, header)) + rescue Errno::ENOENT + nil + else + h.scan(/^#define\s+RUBY_TOKEN_(\w+)\s+(\d+)/) do |token, id| + TOKENS[token] = id + end + true + end + end or abort "#{header} not found in #{vpath.inspect}" + + TOKENS_RE = /\bRUBY_TOKEN\((#{TOKENS.keys.join('|')})\)\s*(?=\s)/ +} + +$_.gsub!(TOKENS_RE) {TOKENS[$1]} if /^%token/ =~ $_ |