| ############################################################################### |
| # Copyright (c) 2005, 2007 IBM Corporation and others. |
| # |
| # This program and the accompanying materials are made available under the |
| # terms of the Eclipse Public License v. 2.0 which is available at |
| # http://www.eclipse.org/legal/epl-2.0. |
| # |
| # SPDX-License-Identifier: EPL-2.0 |
| # |
| |
| ############################################################################### |
| javafile = '../../src/org/eclipse/dltk/ruby/internal/ui/text/syntax/RubyKeyword.java' |
| |
| subst = {} |
| File.open(javafile) do |f| |
| f.each_line do |line| |
| case line |
| when /public static final RubyKeyword (\w+) = new RubyKeyword\("([^"]+)"/ |
| subst[$2] = $1 |
| end |
| end |
| end |
| |
| File.open('keywords.txt', 'w') do |f| |
| subst.keys.each { |k| f.puts k } |
| end |
| |
| `gperf -k1,3,$ <keywords.txt >hash.c` |
| |
| minwl, maxwl, minhv, maxhv = 0, 0, 0, 0 |
| values = '' |
| wordlist = '' |
| accum = nil |
| |
| File.open('hash.c') do |f| |
| f.each_line do |line| |
| case line.strip |
| when /#define MIN_WORD_LENGTH (\d+)/ |
| minwl = $1 |
| when /#define MAX_WORD_LENGTH (\d+)/ |
| maxwl = $1 |
| when /#define MIN_HASH_VALUE (\d+)/ |
| minhv = $1 |
| when /#define MAX_HASH_VALUE (\d+)/ |
| maxhv = $1 |
| when /static unsigned char asso_values\[\] =/ |
| accum = values |
| when /static const char \* wordlist\[\] =/ |
| accum = wordlist |
| when /\{/ |
| # skip |
| when /\}/ |
| accum = nil |
| else |
| accum << line unless accum.nil? |
| end |
| end |
| end |
| |
| wordlist.gsub! /"([^"]*)"/ do |match| |
| if $1.empty? |
| "null" |
| elsif x = subst[$1] |
| x |
| else |
| %Q/"#{$1}"/ |
| end |
| end |
| |
| data = File.open(javafile) {|f| f.read} |
| |
| data.sub! /(private static final int MIN_WORD_LENGTH = )\d+/ do "#{$1}#{minwl}" end |
| data.sub! /(private static final int MAX_WORD_LENGTH = )\d+/ do "#{$1}#{maxwl}" end |
| data.sub! /(private static final int MIN_HASH_VALUE = )\d+/ do "#{$1}#{minhv}" end |
| data.sub! /(private static final int MAX_HASH_VALUE = )\d+/ do "#{$1}#{maxhv}" end |
| data.sub! /(private static final byte\[\] asso_values = \{)[^}]*(\})/ do "#{$1}#{values}#{$2}" end |
| data.sub! /(private static final RubyKeyword\[\] wordlist = \{)[^}]*(\})/ do "#{$1}#{wordlist}#{$2}" end |
| |
| File.open(javafile, 'w') {|f| f.write data} |
| |