1#! /usr/bin/ruby -p
2# -*- coding: us-ascii -*-
3BEGIN {
4  require 'optparse'
5  $:.unshift(File.dirname(__FILE__))
6  require 'vpath'
7  vpath = VPath.new
8  header = nil
9
10  opt = OptionParser.new do |o|
11    vpath.def_options(o)
12    header = o.order!(ARGV).shift
13  end or abort opt.opt_s
14
15  TOKENS = {}
16  h = vpath.read(header) rescue abort("#{header} not found in #{vpath.inspect}")
17  h.scan(/^#define\s+RUBY_TOKEN_(\w+)\s+(\d+)/) do |token, id|
18    TOKENS[token] = id
19  end
20
21  TOKENS_RE = /\bRUBY_TOKEN\((#{TOKENS.keys.join('|')})\)\s*(?=\s)/
22}
23
24$_.gsub!(TOKENS_RE) {TOKENS[$1]} if /^%token/ =~ $_
25