From 84b8431608174e74a4c0d2394eb330a6621bc74b Mon Sep 17 00:00:00 2001 From: no author Date: Mon, 26 Sep 2005 02:58:54 +0000 Subject: New Repository, initial import --- lib/coderay/helpers/scanner_helper.rb | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 lib/coderay/helpers/scanner_helper.rb (limited to 'lib/coderay/helpers/scanner_helper.rb') diff --git a/lib/coderay/helpers/scanner_helper.rb b/lib/coderay/helpers/scanner_helper.rb new file mode 100644 index 0000000..a2e14bb --- /dev/null +++ b/lib/coderay/helpers/scanner_helper.rb @@ -0,0 +1,63 @@ +module CodeRay +module Scanners + + class Scanner + + # A WordList is a Hash with some additional features. + # It is intended to be used for keyword recognition. + class WordList < Hash + + def initialize default = false, case_mode = :case_match + @case_ignore = + case case_mode + when :case_match then false + when :case_ignore then true + else + raise ArgumentError, + "#{self.class.name}.new: second argument must be :case_ignore or :case_match, but #{case_mode} was given." + end + + if @case_ignore + super() do |h, k| + h[k] = h.fetch k.downcase, default + end + else + super default + end + end + + def include? word + self[word] if @case_ignore + has_key? word + end + + def add words, kind = true + words.each do |word| + self[mind_case(word)] = kind + end + self + end + + alias words keys + + def case_ignore? + @case_mode + end + + private + def mind_case word + if @case_ignore + word.downcase + else + word.dup + end + end + + end + + end + +end +end + +# vim:sw=2:ts=2:et:tw=78 -- cgit v1.2.1