Sha256: 2af615bfb643c20bc98c2a893a1d2081a0bff5aa10fdf92a8743079f63b398d2

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

module VER
  module Methods
    module Ctags
      def ctags_find_current
        word = get('insert wordstart', 'insert wordend')
        ctags_find(word)
      end

      def ctags_find(needle)
        ctags_content do |tag_name, file_name, ex_cmd|
          next unless tag_name == needle
          return ctags_execute(file_name, ex_cmd)
        end
      end

      def ctags_execute(file_name, ex_cmd)
        case ex_cmd
        when /^\d+$/
          view.find_or_create(file_name) do |view|
            view.text.go_line(ex_cmd.to_i)
          end
        when /^\/(.*)\/$/
          source = $1.gsub!(/(?!\\)([()])/, '\\\\\\1')
          regexp = Regexp.new(source)
          self.view.find_or_create(file_name) do |view|
            view.text.tag_all_matching(:search, regexp, Search::SEARCH_HIGHLIGHT)
            view.text.search_next
          end
        else
          raise ArgumentError, "Unknown Ex command: %p" % [ex_cmd]
        end
      end

      def ctags_content
        dir = filename.dirname
        file = nil

        loop do
          file = dir/'tags'
          break if file.file? || dir.root?
          dir = dir.parent
        end

        return unless file.file?

        file.open 'rb' do |io|
          io.each_line do |line|
            head, tail = line.split(/;"\t/, 2)
            yield(*head.split("\t"))
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ver-2009.11.29 lib/ver/methods/ctags.rb
ver-2009.11.28 lib/ver/methods/ctags.rb