/usr/lib/ruby/1.8/migemo-dict.rb is in migemo 0.40-10.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | #
# Ruby/Migemo - a library for Japanese incremental search.
#
# Copyright (C) 2001 Satoru Takabayashi <satoru@namazu.org>
# All rights reserved.
# This is free software with ABSOLUTELY NO WARRANTY.
#
# You can redistribute it and/or modify it under the terms of
# the GNU General Public License version 2.
#
# NOTE: Ruby/Migemo can work only with EUC_JP encoding. ($KCODE="e")
#
require 'bsearch'
class String
def prefix_match (string)
self[0, string.length] <=> string
end
end
class MigemoDictItem
def initialize(key, values)
@key = key
@values = values
raise if @key == nil
raise if @values == nil
end
attr_reader :key
attr_reader :values
end
class MigemoDict
def initialize (filename)
@dict = File.new(filename)
end
private
def decompose (line)
array = line.chomp.split("\t").delete_if do |x| x == nil end
key = array.shift
values = array
raise if key == nil
raise if values == nil
return key, values
end
public
def lookup (pattern)
pattern = pattern.downcase
raise "nil pattern" if pattern == nil
end
end
class MigemoStaticDict < MigemoDict
def initialize (filename)
super(filename)
@index = File.new(filename + ".idx").read.unpack "N*"
end
private
def get_line (index)
@dict.seek(index)
@dict.gets
end
public
def lookup (pattern)
range = @index.bsearch_range do |idx|
key, values = decompose(get_line(idx))
key.prefix_match(pattern)
end
if range
range.each do |i|
key, values = decompose(get_line(@index[i]))
yield(MigemoDictItem.new(key, values))
end
end
end
end
class MigemoUserDict < MigemoDict
def initialize (filename)
super(filename)
@lines = @dict.readlines.delete_if {|x| /^;/ =~ x}.sort
end
def lookup (pattern)
range = @lines.bsearch_range do |line|
key, values = decompose(line)
key.prefix_match(pattern)
end
if range
range.each do |i|
key, values = decompose(@lines[i])
yield(MigemoDictItem.new(key, values))
end
end
end
end
class MigemoRegexDict < MigemoUserDict
end
class MigemoDictCache
def initialize (filename)
@dict = File.new(filename)
@index = File.new(filename + ".idx").read.unpack "N*"
end
def decompose (idx)
@dict.seek(idx)
keylen = @dict.read(4).unpack("N").first
key = @dict.read(keylen).unpack("a*").first
datalen = @dict.read(4).unpack("N").first
data = Marshal.load(@dict.read(datalen))
return key, data
end
private :decompose
def lookup (pattern)
raise if pattern == nil
pattern = pattern.downcase
idx = @index.bsearch_first do |idx|
key, data = decompose(idx)
key <=> pattern
end
if idx
key, data = decompose(@index[idx])
return data
else
nil
end
end
end
|