diff options
| author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2024-01-19 15:41:59 +0900 |
|---|---|---|
| committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2024-01-19 16:27:45 +0900 |
| commit | b4ee5266f196afc66686e88a4033262fa0f4933d (patch) | |
| tree | 44fc353a491702e034d540464d9eaabe8db15b8c /lib | |
| parent | d3898e975254aaa7b17b5a48202d3d77f5f2d152 (diff) | |
Extract abbrev as bundled gems
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/abbrev.gemspec | 30 | ||||
| -rw-r--r-- | lib/abbrev.rb | 133 |
2 files changed, 0 insertions, 163 deletions
diff --git a/lib/abbrev.gemspec b/lib/abbrev.gemspec deleted file mode 100644 index 57ae5738b8..0000000000 --- a/lib/abbrev.gemspec +++ /dev/null @@ -1,30 +0,0 @@ -name = File.basename(__FILE__, ".gemspec") -version = ["lib", Array.new(name.count("-")+1, ".").join("/")].find do |dir| - break File.foreach(File.join(__dir__, dir, "#{name.tr('-', '/')}.rb")) do |line| - /^\s*VERSION\s*=\s*"(.*)"/ =~ line and break $1 - end rescue nil -end - -Gem::Specification.new do |spec| - spec.name = name - spec.version = version - spec.authors = ["Akinori MUSHA"] - spec.email = ["knu@idaemons.org"] - - spec.summary = %q{Calculates a set of unique abbreviations for a given set of strings} - spec.description = %q{Calculates a set of unique abbreviations for a given set of strings} - spec.homepage = "https://github.com/ruby/abbrev" - spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") - spec.licenses = ["Ruby", "BSD-2-Clause"] - - spec.metadata["homepage_uri"] = spec.homepage - spec.metadata["source_code_uri"] = spec.homepage - spec.metadata["changelog_uri"] = spec.homepage + "/releases" - - spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do - `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } - end - spec.bindir = "exe" - spec.executables = [] - spec.require_paths = ["lib"] -end diff --git a/lib/abbrev.rb b/lib/abbrev.rb deleted file mode 100644 index 312085c289..0000000000 --- a/lib/abbrev.rb +++ /dev/null @@ -1,133 +0,0 @@ -# frozen_string_literal: true -#-- -# Copyright (c) 2001,2003 Akinori MUSHA <knu@iDaemons.org> -# -# All rights reserved. You can redistribute and/or modify it under -# the same terms as Ruby. -# -# $Idaemons: /home/cvs/rb/abbrev.rb,v 1.2 2001/05/30 09:37:45 knu Exp $ -# $RoughId: abbrev.rb,v 1.4 2003/10/14 19:45:42 knu Exp $ -# $Id$ -#++ - -## -# Calculates the set of unambiguous abbreviations for a given set of strings. -# -# require 'abbrev' -# require 'pp' -# -# pp Abbrev.abbrev(['ruby']) -# #=> {"ruby"=>"ruby", "rub"=>"ruby", "ru"=>"ruby", "r"=>"ruby"} -# -# pp Abbrev.abbrev(%w{ ruby rules }) -# -# _Generates:_ -# { "ruby" => "ruby", -# "rub" => "ruby", -# "rules" => "rules", -# "rule" => "rules", -# "rul" => "rules" } -# -# It also provides an array core extension, Array#abbrev. -# -# pp %w{ summer winter }.abbrev -# -# _Generates:_ -# { "summer" => "summer", -# "summe" => "summer", -# "summ" => "summer", -# "sum" => "summer", -# "su" => "summer", -# "s" => "summer", -# "winter" => "winter", -# "winte" => "winter", -# "wint" => "winter", -# "win" => "winter", -# "wi" => "winter", -# "w" => "winter" } - -module Abbrev - VERSION = "0.1.2" - - # Given a set of strings, calculate the set of unambiguous abbreviations for - # those strings, and return a hash where the keys are all the possible - # abbreviations and the values are the full strings. - # - # Thus, given +words+ is "car" and "cone", the keys pointing to "car" would - # be "ca" and "car", while those pointing to "cone" would be "co", "con", and - # "cone". - # - # require 'abbrev' - # - # Abbrev.abbrev(%w{ car cone }) - # #=> {"ca"=>"car", "con"=>"cone", "co"=>"cone", "car"=>"car", "cone"=>"cone"} - # - # The optional +pattern+ parameter is a pattern or a string. Only input - # strings that match the pattern or start with the string are included in the - # output hash. - # - # Abbrev.abbrev(%w{car box cone crab}, /b/) - # #=> {"box"=>"box", "bo"=>"box", "b"=>"box", "crab" => "crab"} - # - # Abbrev.abbrev(%w{car box cone}, 'ca') - # #=> {"car"=>"car", "ca"=>"car"} - def abbrev(words, pattern = nil) - table = {} - seen = Hash.new(0) - - if pattern.is_a?(String) - pattern = /\A#{Regexp.quote(pattern)}/ # regard as a prefix - end - - words.each do |word| - next if word.empty? - word.size.downto(1) { |len| - abbrev = word[0...len] - - next if pattern && pattern !~ abbrev - - case seen[abbrev] += 1 - when 1 - table[abbrev] = word - when 2 - table.delete(abbrev) - else - break - end - } - end - - words.each do |word| - next if pattern && pattern !~ word - - table[word] = word - end - - table - end - - module_function :abbrev -end - -class Array - # Calculates the set of unambiguous abbreviations for the strings in +self+. - # - # require 'abbrev' - # %w{ car cone }.abbrev - # #=> {"car"=>"car", "ca"=>"car", "cone"=>"cone", "con"=>"cone", "co"=>"cone"} - # - # The optional +pattern+ parameter is a pattern or a string. Only input - # strings that match the pattern or start with the string are included in the - # output hash. - # - # %w{ fast boat day }.abbrev(/^.a/) - # #=> {"fast"=>"fast", "fas"=>"fast", "fa"=>"fast", "day"=>"day", "da"=>"day"} - # - # Abbrev.abbrev(%w{car box cone}, "ca") - # #=> {"car"=>"car", "ca"=>"car"} - # - # See also Abbrev.abbrev - def abbrev(pattern = nil) - Abbrev::abbrev(self, pattern) - end -end |
