Sha256: 8b6515777e16b85193b1761cf15317f10fd91051170f20f64a10b061f65e95f3

Contents?: true

Size: 1.89 KB

Versions: 27

Compression:

Stored size: 1.89 KB

Contents

module Redcar
  class EditViewSWT
    class WordMoveListener
      MOVE_FORWARD_RE = /\s{3,}|[^\w]{2,}|(\s|[^\w])?\w+/
    
      def initialize(controller)
        @controller = controller
      end
      
      def get_next_offset(e)
        if [Swt::SWT::MOVEMENT_WORD, Swt::SWT::MOVEMENT_WORD_END].include? e.movement
          e.newOffset = next_offset(e.offset, e.lineOffset, e.lineText)
          # SWT gets pissy without this:
          if e.newOffset == e.lineOffset + e.lineText.length + 1
            e.newOffset += 1
          end
        end
      end
      
      def next_offset(offset, line_offset, line_text)
        if offset == line_offset + line_text.length
          offset + 1
        else
          future_text = line_text[(offset - line_offset)..-1]
          if future_text == nil or future_text == ""
            line_offset + line_text.length
          else
            if md = future_text.match(MOVE_FORWARD_RE)
              offset + md.end(0)
            else
              line_offset + line_text.length
            end
          end
        end
      end
      
      def get_previous_offset(e)
        if [Swt::SWT::MOVEMENT_WORD, Swt::SWT::MOVEMENT_WORD_START].include? e.movement
          e.newOffset = previous_offset(e.offset, e.lineOffset, e.lineText)
          # SWT gets pissy without this:
          if e.newOffset == e.lineOffset - 1
            e.newOffset -= 1
          end
        end
      end
      
      def previous_offset(offset, line_offset, line_text)
        if offset == line_offset
          offset - 1
        else
          future_text = line_text[0..(offset - line_offset - 1)].reverse
          if future_text == nil or future_text == ""
            line_offset
          else
            if md = future_text.match(MOVE_FORWARD_RE)
              offset - md.end(0)
            else
              line_offset
            end
          end
        end
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
redcar-0.7 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.6.1 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.6 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.6.1dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.5.1 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.5 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.5.6dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.5.5dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.5.4dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.5.3dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.5.2dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.5.1dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.4.1 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.4 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.3.10.1dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.3.10.0dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.3.9 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.3.9.0dev plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.3.8.4 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb
redcar-0.3.8.3 plugins/edit_view_swt/lib/edit_view_swt/word_movement.rb