Class: Textbringer::CMode
- Inherits:
-
ProgrammingMode
- Object
- Mode
- FundamentalMode
- ProgrammingMode
- Textbringer::CMode
- Defined in:
- lib/textbringer/modes/c_mode.rb
Constant Summary collapse
- KEYWORDS =
%w( auto break case char const continue default double do else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while _Bool _Complex _Imaginary )
- TOKEN_NAMES =
[ :preprocessing_directive, :comment, :keyword, :identifier, :constant, :string_literal, :punctuator, :space, :partial_comment, :unknown ]
- TOKEN_REGEXP =
/\G(?: (?<preprocessing_directive> ^[ \t\f\v]*(?:\#|%:).*(?:\\\n.*)*[^\\]\n ) | (?<comment> (?<multiline_comment> \/\* (?> (?:.|\n)*? \*\/ ) ) | (?<singleline_comment> \/\/ .*(?:\\\n.*)*(?<!\\)\n ) ) | (?<partial_comment> (?<partial_multiline_comment> \/\* (?:.|\n)* ) | (?<partial_singleline_comment> \/\/ .*? \\\n (?:.|\n)* ) ) | (?<keyword> (?: #{KEYWORDS.join("|")} ) \b ) | (?<constant> (?<floating_constant> (?<decimal_floating_constant> (?<fractional_constant> (?<digit_sequence> [0-9]+ )? \. \g<digit_sequence> | \g<digit_sequence> \. ) (?<exponent_part> [eE] [+\-]? \g<digit_sequence> )? (?<floating_suffix> [flFL] )? ) | (?<hexadecimal_floating_constant> (?<hexadecimal_prefix> 0x | 0X ) (?<hexadecimal_fractional_constant> (?<hexadecimal_digit_sequence> [0-9a-fA-F]+ )? \. \g<hexadecimal_digit_sequence> | \g<hexadecimal_digit_sequence> \. ) (?<binary_exponent_part> [pP] [+\-]? \g<digit_sequence> ) \g<floating_suffix>? | \g<hexadecimal_prefix> \g<hexadecimal_digit_sequence> \g<binary_exponent_part> \g<floating_suffix>? ) ) | (?<integer_constant> (?<decimal_constant> [1-9][0-9]* ) (?<integer_suffix> (?<unsigned_suffix> [uU] ) (?<long_suffix> [lL] )? \g<unsigned_suffix> (?<long_long_suffix> ll | LL )? \g<long_suffix> \g<unsigned_suffix>? \g<long_long_suffix> \g<unsigned_suffix>? )? | (?<hexadecimal_constant> \g<hexadecimal_prefix> \g<hexadecimal_digit_sequence> ) \g<integer_suffix>? | (?<octal_constant> 0 (?<octal_digit> [0-7] )* ) \g<integer_suffix>? ) | (?<character_constant> ' (?<c_char_sequence> (?<c_char> [^'\\\r\n] | (?<escape_sequence> (?<simple_escape_sequence> \\ ['"?\\abfnrtv] ) | (?<octal_escape_sequence> \\ \g<octal_digit>{1,3} ) | (?<hexadecimal_escape_sequence> \\x \g<hexadecimal_digit_sequence> ) | (?<universal_character_name> \\u[0-9a-fA-F]{4} | \\U[0-9a-fA-F]{8} ) ) )+ ) ' | L' \g<c_char_sequence> ' ) ) | (?<string_literal> " (?<s_char_sequence> (?<s_char> [^"\\\r\n] | \g<escape_sequence> )+ ) " | L" \g<s_char_sequence>? " ) | (?<identifier> (?<identifier_nondigit> [_a-zA-Z] | \g<universal_character_name> ) (?: \g<identifier_nondigit> | [0-9] )* ) | (?<punctuator> \[ | \] | \( | \) | \{ | \} | \.\.\. | \. | \+\+ | \+= | \+ | -> | -- | -= | - | \*= | \* | \/= | \/ | && | &= | & | \|\| | \|= | \| | != | ! | ~ | == | = | \^= | \^ | <: | <% | <<= | << | <= | < | >>= | >> | >= | > | \? | ; | :> | : | , | \#\# | \# | %> | %:%: | %: | %= | % ) | (?<space> \s+ ) | (?<unknown>.) )/x
Constants inherited from ProgrammingMode
ProgrammingMode::PROGRAMMING_MODE_MAP
Constants inherited from Mode
Constants included from Commands
Textbringer::Commands::CLIPBOARD_AVAILABLE, Textbringer::Commands::CTAGS, Textbringer::Commands::HELP_RING, Textbringer::Commands::ISEARCH_MODE_MAP, Textbringer::Commands::ISEARCH_STATUS, Textbringer::Commands::KEYBOARD_MACROS, Textbringer::Commands::REGISTERS, Textbringer::Commands::RE_SEARCH_STATUS, Textbringer::Commands::UNIVERSAL_ARGUMENT_MAP
Constants included from Utils
Utils::COMPLETION, Utils::HOOKS, Utils::Y_OR_N_MAP
Instance Attribute Summary
Attributes inherited from Mode
Instance Method Summary collapse
- #compile(cmd = read_from_minibuffer("Compile: ", default: default_compile_command)) ⇒ Object
- #default_compile_command ⇒ Object
-
#initialize(buffer) ⇒ CMode
constructor
A new instance of CMode.
- #lex(s) ⇒ Object
- #symbol_pattern ⇒ Object
Methods inherited from ProgrammingMode
#indent_line, #indent_region, #reindent_then_newline_and_indent
Methods inherited from Mode
define_generic_command, define_local_command, define_syntax, inherited, list, #name, #syntax_table
Methods included from Commands
[], #command_help, command_table, #current_prefix_arg, define_command, #execute_keyboard_macro, #get_tags, #isearch_done, #isearch_mode, #isearch_pre_command_hook, #isearch_prompt, #isearch_repeat, #isearch_repeat_backward, #isearch_repeat_forward, #isearch_search, list, #match_beginning, #match_end, #match_string, #number_prefix_arg, #prefix_numeric_value, #read_keyboard_macro, #read_register, #replace_match, undefine_command, #universal_argument_mode
Methods included from Utils
add_hook, background, complete_for_minibuffer, message, next_tick, next_tick!, read_buffer, read_char, read_command_name, read_encoding, read_event, read_file_name, read_from_minibuffer, read_key_sequence, read_single_char, received_keyboard_quit?, remove_hook, ruby_install_name, run_hooks, self_insert_and_exit_minibuffer, set_transient_map, show_exception, sit_for, sleep_for, y_or_n?, yes_or_no?
Constructor Details
Instance Method Details
#compile(cmd = read_from_minibuffer("Compile: ", default: default_compile_command)) ⇒ Object
45 46 47 48 49 |
# File 'lib/textbringer/modes/c_mode.rb', line 45 def compile(cmd = read_from_minibuffer("Compile: ", default: default_compile_command)) shell_execute(cmd, buffer_name: "*Compile result*", mode: BacktraceMode) end |
#default_compile_command ⇒ Object
55 56 57 |
# File 'lib/textbringer/modes/c_mode.rb', line 55 def default_compile_command "make" end |
#lex(s) ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/textbringer/modes/c_mode.rb', line 178 def lex(s) tokens = [] line = 1 column = 0 s.scan(TOKEN_REGEXP) do text = $& token_name = TOKEN_NAMES.find { |name| $~[name] } if text.empty? raise EditorError, "Empty token: (#{line},#{column}) #{$~.inspect}" end tokens.push([[line, column], token_name, text]) lf_count = text.count("\n") if lf_count > 0 line += lf_count column = text.slice(/[^\n]*\z/).size else column += text.size end end tokens end |
#symbol_pattern ⇒ Object
51 52 53 |
# File 'lib/textbringer/modes/c_mode.rb', line 51 def symbol_pattern /[A-Za-z0-9\_\\]/ end |