static void autoindent_brace_code (GtkScintilla *sci, PreferencesManager *pref) { gint current_pos; gint current_line; gint previous_line; gint previous_line_indentation; gint previous_line_end; current_pos = gtk_scintilla_get_current_pos(sci); current_line = gtk_scintilla_line_from_position(sci, current_pos); gphpedit_debug (DEBUG_DOCUMENT); if (current_line>0) { gtk_scintilla_begin_undo_action(sci); previous_line = current_line-1; previous_line_indentation = gtk_scintilla_get_line_indentation(sci, previous_line); previous_line_end = gtk_scintilla_get_line_end_position(sci, previous_line); indent_line(sci, current_line, previous_line_indentation); gphpedit_debug_message (DEBUG_DOCUMENT, "previous_line=%d, previous_indent=%d\n", previous_line, previous_line_indentation); gint pos; gboolean tabs_instead_spaces; g_object_get(pref,"tabs_instead_spaces", &tabs_instead_spaces, NULL); if(tabs_instead_spaces){ pos = gtk_scintilla_position_from_line(sci, current_line)+(previous_line_indentation/gtk_scintilla_get_tab_width(sci)); } else { pos = gtk_scintilla_position_from_line(sci, current_line)+(previous_line_indentation); } gtk_scintilla_goto_pos(sci, pos); gtk_scintilla_end_undo_action(sci); } }
void syntax_add_lines(gchar *output) { GtkTreeIter iter; gchar *copy; gchar *token; gchar *line_number; gchar *first_error = NULL; gint line_start; gint line_end; gint indent; first_error = 0; copy = output; while ((token = strtok(copy, "\n"))) { if ((strncmp(token, "PHP Warning: ", MIN(strlen(token), 14))!=0) && (strncmp(token, "Content-type", MIN(strlen(token), 12))!=0)) { gtk_list_store_append (main_window.lint_store, &iter); gtk_list_store_set (main_window.lint_store, &iter, 0, token, -1); line_number = strrchr(token, ' '); line_number++; if (atoi(line_number)>0) { if (!first_error) { first_error = line_number; } indent = gtk_scintilla_get_line_indentation(GTK_SCINTILLA(main_window.current_editor->scintilla), atoi(line_number)-1); line_start = gtk_scintilla_position_from_line(GTK_SCINTILLA(main_window.current_editor->scintilla), atoi(line_number)-1); line_start += (indent/preferences.indentation_size); line_end = gtk_scintilla_get_line_end_position(GTK_SCINTILLA(main_window.current_editor->scintilla), atoi(line_number)-1); gtk_scintilla_start_styling(GTK_SCINTILLA(main_window.current_editor->scintilla), line_start, 128); gtk_scintilla_set_styling(GTK_SCINTILLA(main_window.current_editor->scintilla), line_end-line_start, INDIC2_MASK); } else { g_print("Line number is 0\n"); } } copy = NULL; } if (first_error) { goto_line(first_error); } }
void syntax_add_lines(gchar *output){ GtkTreeIter iter; gchar *copy; gchar *token; int line_number; int first_error; gint line_start; gint line_end; gint indent; line_number=0; first_error=0; copy=output; Editor *editor=main_window_get_current_editor(); while( (token = strtok(copy, "\n")) ) { if( ((strncmp(token, "PHP Warning: ", MIN(strlen(token), 14))!=0)) && ((strncmp(token, "Content-type", MIN(strlen(token), 12))!=0)) ) { gtk_list_store_append(main_window_get_lint_store(), &iter); gtk_list_store_set(main_window_get_lint_store(), &iter, 0, token, -1); line_number = (atoi( (strrchr(token, ' ')) )) -1; if(line_number<=0) g_print("Line number is %d\n", line_number); if(!first_error) first_error = line_number; indent = gtk_scintilla_get_line_indentation(GTK_SCINTILLA(editor->scintilla), line_number); line_start = gtk_scintilla_position_from_line(GTK_SCINTILLA(editor->scintilla), line_number); line_start += indent / preferences.indentation_size; line_end = gtk_scintilla_get_line_end_position(GTK_SCINTILLA(editor->scintilla), line_number); gtk_scintilla_start_styling(GTK_SCINTILLA(editor->scintilla), line_start, 128); gtk_scintilla_set_styling(GTK_SCINTILLA(editor->scintilla), line_end-line_start, INDIC2_MASK); } copy = NULL; } if(first_error) goto_line_int(first_error); }//syntax_add_lines
static void autoindent_brace_code (GtkScintilla *sci, PreferencesManager *pref) { gint current_pos; gint current_line; gint previous_line; gint previous_line_indentation; gint previous_line_start; gint previous_line_end; gchar *previous_char_buffer; gint previous_char_buffer_length; gchar *previous_line_buffer; gint previous_line_buffer_length; current_pos = gtk_scintilla_get_current_pos(sci); current_line = gtk_scintilla_line_from_position(sci, current_pos); gphpedit_debug (DEBUG_DOCUMENT); if (current_line>0) { gtk_scintilla_begin_undo_action(sci); previous_line = current_line-1; previous_line_indentation = gtk_scintilla_get_line_indentation(sci, previous_line); previous_line_end = gtk_scintilla_get_line_end_position(sci, previous_line); previous_char_buffer = gtk_scintilla_get_text_range (sci, previous_line_end-1, previous_line_end, &previous_char_buffer_length); if (is_css_char_autoindent(*previous_char_buffer)) { gint indentation_size; g_object_get(pref, "indentation_size", &indentation_size, NULL); previous_line_indentation+=indentation_size; } else if (is_css_char_autounindent(*previous_char_buffer)) { gint indentation_size; g_object_get(pref, "indentation_size", &indentation_size, NULL); previous_line_indentation-=indentation_size; if (previous_line_indentation < 0) previous_line_indentation = 0; previous_line_start = gtk_scintilla_position_from_line(sci, previous_line); previous_line_buffer = gtk_scintilla_get_text_range (sci, previous_line_start, previous_line_end, &previous_line_buffer_length); gboolean unindent = TRUE; gint char_act = 0; while (char_act <= previous_line_buffer_length) { char c = previous_line_buffer[char_act]; if (!(g_ascii_iscntrl(c) || g_ascii_isspace(c) || is_css_char_autounindent(c))) { unindent = FALSE; break; } char_act++; } if (unindent) gtk_scintilla_set_line_indentation(sci, previous_line, previous_line_indentation); g_free(previous_line_buffer); } g_free(previous_char_buffer); indent_line(sci, current_line, previous_line_indentation); gphpedit_debug_message (DEBUG_DOCUMENT, "previous_line=%d, previous_indent=%d\n", previous_line, previous_line_indentation); gint pos; gboolean tabs_instead_spaces; g_object_get(pref,"tabs_instead_spaces", &tabs_instead_spaces, NULL); if(tabs_instead_spaces) { pos = gtk_scintilla_position_from_line(sci, current_line)+(previous_line_indentation/gtk_scintilla_get_tab_width(sci)); } else { pos = gtk_scintilla_position_from_line(sci, current_line)+(previous_line_indentation); } gtk_scintilla_goto_pos(sci, pos); gtk_scintilla_end_undo_action(sci); } }
void gtk_scintilla_forward_signals(GtkScintilla *sci, struct SCNotification *notification) { switch (notification->nmhdr.code) { case SCN_STYLENEEDED: { gint start = gtk_scintilla_get_end_styled(sci); start = gtk_scintilla_line_from_position(sci, start); start = gtk_scintilla_position_from_line(sci, start); g_signal_emit (sci, _gtk_scintilla_signals[STYLE_NEEDED], 0, start, (gint) notification->position); break; } case SCN_UPDATEUI: g_signal_emit (sci, _gtk_scintilla_signals[UPDATE_UI], 0); gtk_scintilla_update_line_numbers(sci); break; case SCN_CHARADDED: g_signal_emit (sci, _gtk_scintilla_signals[CHAR_ADDED], 0, (gint) notification->ch); break; case SCN_SAVEPOINTREACHED: g_signal_emit (sci, _gtk_scintilla_signals[SAVE_POINT_REACHED], 0); break; case SCN_SAVEPOINTLEFT: g_signal_emit (sci, _gtk_scintilla_signals[SAVE_POINT_LEFT], 0); break; case SCN_MODIFYATTEMPTRO: g_signal_emit (sci, _gtk_scintilla_signals[MODIFY_ATTEMPT_RO], 0); break; case SCN_KEY: { gint gdk_mods = 0; gint sci_mods = (gint)notification->modifiers; gint sci_char = (gint)notification->ch; if (sci_mods & SCMOD_SHIFT) gdk_mods |= GDK_SHIFT_MASK; if (sci_mods & SCMOD_CTRL) gdk_mods |= GDK_CONTROL_MASK; if (sci_mods & SCMOD_ALT) gdk_mods |= GDK_MOD1_MASK; if (sci->accel_group) { gtk_accel_groups_activate(G_OBJECT(sci->accel_group), sci_char, (GdkModifierType)gdk_mods); } g_signal_emit (sci, _gtk_scintilla_signals[KEY], 0, sci_char, sci_mods); break; } case SCN_DOUBLECLICK: g_signal_emit (sci, _gtk_scintilla_signals[DOUBLE_CLICK], 0, (gint) notification->position, (gint) notification->line); break; case SCN_MODIFIED: g_signal_emit (sci, _gtk_scintilla_signals[MODIFIED], 0, (gint) notification->position, (gint) notification->modificationType, (gchar *)notification->text, (gint) notification->length, (gint) notification->linesAdded, (gint) notification->line, (gint) notification->foldLevelNow, (gint) notification->foldLevelPrev); break; case SCN_MACRORECORD: g_signal_emit (sci, _gtk_scintilla_signals[MACRO_RECORD], 0, (gint) notification->message, (gulong) notification->wParam, (glong) notification->lParam); break; case SCN_MARGINCLICK: { gint linenum = gtk_scintilla_line_from_position(sci, notification->position); gtk_scintilla_toggle_fold(sci, linenum); //gtk_scintilla_ensure_visible_enforce_policy(sci, linenum); //gtk_scintilla_goto_line(sci, linenum); g_signal_emit (sci, _gtk_scintilla_signals[MARGIN_CLICK], 0, (gint) notification->modifiers, (gint) notification->position, (gint) notification->margin); break; } case SCN_NEEDSHOWN: g_signal_emit (sci, _gtk_scintilla_signals[NEED_SHOWN], 0, (gint) notification->position, (gint) notification->length); break; case SCN_PAINTED: g_signal_emit (sci, _gtk_scintilla_signals[PAINTED], 0); break; case SCN_USERLISTSELECTION: g_signal_emit (sci, _gtk_scintilla_signals[USER_LIST_SELECTION], 0, (gint) notification->listType, (gchar *) notification->text); break; case SCN_URIDROPPED: g_signal_emit (sci, _gtk_scintilla_signals[URI_DROPPED], 0, (gchar *) notification->text); break; case SCN_DWELLSTART: g_signal_emit (sci, _gtk_scintilla_signals[DWELL_START], 0, (gint) notification->position); break; case SCN_DWELLEND: g_signal_emit (sci, _gtk_scintilla_signals[DWELL_END], 0, (gint) notification->position); break; case SCN_ZOOM: g_signal_emit (sci, _gtk_scintilla_signals[ZOOM], 0); break; default: g_debug("GtkScintilla: Unhandled notification (%d).", notification->nmhdr.code); break; } }