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