class Textbringer::ProgrammingMode

Public Class Methods

new(buffer) click to toggle source
Calls superclass method Textbringer::Mode::new
# File lib/textbringer/modes/programming_mode.rb, line 26
def initialize(buffer)
  super(buffer)
  buffer.keymap = PROGRAMMING_MODE_MAP
end

Public Instance Methods

comment_start() click to toggle source
# File lib/textbringer/modes/programming_mode.rb, line 107
def comment_start
  nil
end
indent_line() click to toggle source

Return true if modified.

# File lib/textbringer/modes/programming_mode.rb, line 32
def indent_line
  result = false
  level = calculate_indentation
  return result if level.nil? || level < 0
  @buffer.save_excursion do
    @buffer.beginning_of_line
    @buffer.composite_edit do
      if @buffer.looking_at?(/[ \t]+/)
        s = @buffer.match_string(0)
        break if /\t/ !~ s && s.size == level
        @buffer.delete_region(@buffer.match_beginning(0),
                              @buffer.match_end(0))
      else
        break if level == 0
      end
      @buffer.indent_to(level)
    end
    result = true
  end
  pos = @buffer.point
  @buffer.beginning_of_line
  @buffer.forward_char while /[ \t]/ =~ @buffer.char_after
  if @buffer.point < pos
    @buffer.goto_char(pos)
  end
  result
end
indent_new_comment_line() click to toggle source
# File lib/textbringer/modes/programming_mode.rb, line 91
def indent_new_comment_line
  if comment_start.nil?
    @buffer.newline
    return
  end
  s = @buffer.save_excursion {
    @buffer.beginning_of_line
    if @buffer.looking_at?(/[ \t]*#{comment_start}+[ \t]*/)
      @buffer.match_string(0)
    else
      ""
    end
  }
  @buffer.insert("\n" + s)
end
indent_region(s = @buffer.mark, e = @buffer.point) click to toggle source
# File lib/textbringer/modes/programming_mode.rb, line 75
def indent_region(s = @buffer.mark, e = @buffer.point)
  s, e = Buffer.region_boundaries(s, e)
  end_mark = @buffer.new_mark(e)
  begin
    @buffer.save_excursion do
      @buffer.goto_char(s)
      until @buffer.end_of_buffer? || @buffer.point_after_mark?(end_mark)
        indent_line
        @buffer.forward_line
      end
    end
  ensure
    end_mark.delete
  end
end
reindent_then_newline_and_indent() click to toggle source
# File lib/textbringer/modes/programming_mode.rb, line 60
def reindent_then_newline_and_indent
  @buffer.composite_edit do
    indent_line
    @buffer.save_excursion do
      pos = @buffer.point
      @buffer.beginning_of_line
      if /\A[ \t]+\z/.match?(@buffer.substring(@buffer.point, pos))
        @buffer.delete_region(@buffer.point, pos)
      end
    end
    @buffer.insert("\n")
    indent_line
  end
end

Private Instance Methods

calculate_indentation() click to toggle source
# File lib/textbringer/modes/programming_mode.rb, line 113
def calculate_indentation
  raise EditorError, "indent_line is not defined in the current mode"
end