SF.net SVN: geany: [2779] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Jul 15 14:29:41 UTC 2008
Revision: 2779
http://geany.svn.sourceforge.net/geany/?rev=2779&view=rev
Author: ntrel
Date: 2008-07-15 07:29:41 -0700 (Tue, 15 Jul 2008)
Log Message:
-----------
Merge the editor-struct branch:
Note: this breaks the plugin API for editor-related document fields
and functions.
Split new GeanyEditor struct type from GeanyDocument fields sci,
line_wrapping, auto_indent, scroll_percent, use_tabs, line_breaking.
GeanyEditor::document allows access back to document fields.
Add GeanyDocument::editor field; this is only valid when the
document is valid, and NULL otherwise. This means any checks for
doc->editor->scintilla != NULL will segfault for invalid
documents - check against doc->is_valid or doc->editor != NULL
instead.
Change plugin API EditorFuncs to use GeanyEditor pointers.
Make editor_set_font() take a pango-style font string, and use a
GeanyEditor pointer.
Use GeanyEditor* instead of GeanyDocument* in editor.c (most global
editor functions still need conversion though, but this may be done
gradually or as required).
Move utils_get_current_function() to symbols.c.
Move utils_replace_filename() to document.c.
Modified Paths:
--------------
trunk/ChangeLog
trunk/plugins/classbuilder.c
trunk/plugins/export.c
trunk/plugins/htmlchars.c
trunk/plugins/vcdiff.c
trunk/src/build.c
trunk/src/callbacks.c
trunk/src/document.c
trunk/src/document.h
trunk/src/editor.c
trunk/src/editor.h
trunk/src/filetypes.c
trunk/src/keybindings.c
trunk/src/keyfile.c
trunk/src/main.c
trunk/src/msgwindow.c
trunk/src/navqueue.c
trunk/src/notebook.c
trunk/src/plugindata.h
trunk/src/prefs.c
trunk/src/printing.c
trunk/src/search.c
trunk/src/symbols.c
trunk/src/symbols.h
trunk/src/tools.c
trunk/src/treeviews.c
trunk/src/ui_utils.c
trunk/src/utils.c
trunk/src/utils.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/ChangeLog 2008-07-15 14:29:41 UTC (rev 2779)
@@ -1,3 +1,34 @@
+2008-07-15 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/build.c, src/utils.c, src/utils.h, src/keybindings.c,
+ src/printing.c, src/tools.c, src/prefs.c, src/navqueue.c,
+ src/plugindata.h, src/treeviews.c, src/msgwindow.c, src/callbacks.c,
+ src/notebook.c, src/keyfile.c, src/filetypes.c, src/search.c,
+ src/document.c, src/document.h, src/main.c, src/editor.c,
+ src/symbols.c, src/editor.h, src/symbols.h, src/ui_utils.c,
+ plugins/export.c, plugins/vcdiff.c, plugins/htmlchars.c,
+ plugins/classbuilder.c:
+ Merge the editor-struct branch:
+ Note: this breaks the plugin API for editor-related document fields
+ and functions.
+ Split new GeanyEditor struct type from GeanyDocument fields sci,
+ line_wrapping, auto_indent, scroll_percent, use_tabs, line_breaking.
+ GeanyEditor::document allows access back to document fields.
+ Add GeanyDocument::editor field; this is only valid when the
+ document is valid, and NULL otherwise. This means any checks for
+ doc->editor->scintilla != NULL will segfault for invalid
+ documents - check against doc->is_valid or doc->editor != NULL
+ instead.
+ Change plugin API EditorFuncs to use GeanyEditor pointers.
+ Make editor_set_font() take a pango-style font string, and use a
+ GeanyEditor pointer.
+ Use GeanyEditor* instead of GeanyDocument* in editor.c (most global
+ editor functions still need conversion though, but this may be done
+ gradually or as required).
+ Move utils_get_current_function() to symbols.c.
+ Move utils_replace_filename() to document.c.
+
+
2008-07-14 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* data/filetype_extensions.conf, data/filetypes.f77,
Modified: trunk/plugins/classbuilder.c
===================================================================
--- trunk/plugins/classbuilder.c 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/plugins/classbuilder.c 2008-07-15 14:29:41 UTC (rev 2779)
@@ -30,6 +30,7 @@
#include "support.h"
#include "filetypes.h"
#include "document.h"
+#include "editor.h"
#include "ui_utils.h"
#include "pluginmacros.h"
@@ -732,7 +733,7 @@
{
text = get_template_class_source(class_info);
doc = p_document->new_file(class_info->source, NULL, NULL);
- p_sci->set_text(doc->sci, text);
+ p_sci->set_text(doc->editor->sci, text);
g_free(text);
}
@@ -740,7 +741,7 @@
{
text = get_template_class_header(class_info);
doc = p_document->new_file(class_info->header, NULL, NULL);
- p_sci->set_text(doc->sci, text);
+ p_sci->set_text(doc->editor->sci, text);
g_free(text);
}
Modified: trunk/plugins/export.c
===================================================================
--- trunk/plugins/export.c 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/plugins/export.c 2008-07-15 14:29:41 UTC (rev 2779)
@@ -357,25 +357,25 @@
GString *body;
GString *cmds;
GString *latex;
- gint style_max = pow(2, p_sci->send_message(doc->sci, SCI_GETSTYLEBITS, 0, 0));
+ gint style_max = pow(2, p_sci->send_message(doc->editor->sci, SCI_GETSTYLEBITS, 0, 0));
/* first read all styles from Scintilla */
for (i = 0; i < style_max; i++)
{
- styles[i][FORE] = p_sci->send_message(doc->sci, SCI_STYLEGETFORE, i, 0);
- styles[i][BACK] = p_sci->send_message(doc->sci, SCI_STYLEGETBACK, i, 0);
- styles[i][BOLD] = p_sci->send_message(doc->sci, SCI_STYLEGETBOLD, i, 0);
- styles[i][ITALIC] = p_sci->send_message(doc->sci, SCI_STYLEGETITALIC, i, 0);
+ styles[i][FORE] = p_sci->send_message(doc->editor->sci, SCI_STYLEGETFORE, i, 0);
+ styles[i][BACK] = p_sci->send_message(doc->editor->sci, SCI_STYLEGETBACK, i, 0);
+ styles[i][BOLD] = p_sci->send_message(doc->editor->sci, SCI_STYLEGETBOLD, i, 0);
+ styles[i][ITALIC] = p_sci->send_message(doc->editor->sci, SCI_STYLEGETITALIC, i, 0);
styles[i][USED] = 0;
}
/* read the document and write the LaTeX code */
body = g_string_new("");
- for (i = 0; i < p_sci->get_length(doc->sci); i++)
+ for (i = 0; i < p_sci->get_length(doc->editor->sci); i++)
{
- style = p_sci->get_style_at(doc->sci, i);
- c = p_sci->get_char_at(doc->sci, i);
- c_next = p_sci->get_char_at(doc->sci, i + 1);
+ style = p_sci->get_style_at(doc->editor->sci, i);
+ c = p_sci->get_char_at(doc->editor->sci, i);
+ c_next = p_sci->get_char_at(doc->editor->sci, i + 1);
if (style != old_style || ! block_open)
{
@@ -564,15 +564,15 @@
GString *body;
GString *css;
GString *html;
- gint style_max = pow(2, p_sci->send_message(doc->sci, SCI_GETSTYLEBITS, 0, 0));
+ gint style_max = pow(2, p_sci->send_message(doc->editor->sci, SCI_GETSTYLEBITS, 0, 0));
/* first read all styles from Scintilla */
for (i = 0; i < style_max; i++)
{
- styles[i][FORE] = ROTATE_RGB(p_sci->send_message(doc->sci, SCI_STYLEGETFORE, i, 0));
- styles[i][BACK] = ROTATE_RGB(p_sci->send_message(doc->sci, SCI_STYLEGETBACK, i, 0));
- styles[i][BOLD] = p_sci->send_message(doc->sci, SCI_STYLEGETBOLD, i, 0);
- styles[i][ITALIC] = p_sci->send_message(doc->sci, SCI_STYLEGETITALIC, i, 0);
+ styles[i][FORE] = ROTATE_RGB(p_sci->send_message(doc->editor->sci, SCI_STYLEGETFORE, i, 0));
+ styles[i][BACK] = ROTATE_RGB(p_sci->send_message(doc->editor->sci, SCI_STYLEGETBACK, i, 0));
+ styles[i][BOLD] = p_sci->send_message(doc->editor->sci, SCI_STYLEGETBOLD, i, 0);
+ styles[i][ITALIC] = p_sci->send_message(doc->editor->sci, SCI_STYLEGETITALIC, i, 0);
styles[i][USED] = 0;
}
@@ -581,18 +581,18 @@
font_name = pango_font_description_get_family(font_desc);
/*font_size = pango_font_description_get_size(font_desc) / PANGO_SCALE;*/
/* take the zoom level also into account */
- font_size = p_sci->send_message(doc->sci, SCI_STYLEGETSIZE, 0, 0);
+ font_size = p_sci->send_message(doc->editor->sci, SCI_STYLEGETSIZE, 0, 0);
if (use_zoom)
- font_size += p_sci->send_message(doc->sci, SCI_GETZOOM, 0, 0);
+ font_size += p_sci->send_message(doc->editor->sci, SCI_GETZOOM, 0, 0);
/* read the document and write the HTML body */
body = g_string_new("");
- for (i = 0; i < p_sci->get_length(doc->sci); i++)
+ for (i = 0; i < p_sci->get_length(doc->editor->sci); i++)
{
- style = p_sci->get_style_at(doc->sci, i);
- c = p_sci->get_char_at(doc->sci, i);
+ style = p_sci->get_style_at(doc->editor->sci, i);
+ c = p_sci->get_char_at(doc->editor->sci, i);
/* p_sci->get_char_at() takes care of index boundaries and return 0 if i is too high */
- c_next = p_sci->get_char_at(doc->sci, i + 1);
+ c_next = p_sci->get_char_at(doc->editor->sci, i + 1);
if ((style != old_style || ! span_open) && ! isspace(c))
{
Modified: trunk/plugins/htmlchars.c
===================================================================
--- trunk/plugins/htmlchars.c 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/plugins/htmlchars.c 2008-07-15 14:29:41 UTC (rev 2779)
@@ -28,6 +28,7 @@
#include "support.h"
#include "plugindata.h"
#include "document.h"
+#include "editor.h"
#include "keybindings.h"
#include "ui_utils.h"
#include "utils.h"
@@ -445,12 +446,12 @@
if (doc != NULL)
{
gchar *str;
- gint pos = p_sci->get_current_position(doc->sci);
+ gint pos = p_sci->get_current_position(doc->editor->sci);
gtk_tree_model_get(model, iter, COLUMN_HTML_NAME, &str, -1);
if (NZV(str))
{
- p_sci->insert_text(doc->sci, pos, str);
+ p_sci->insert_text(doc->editor->sci, pos, str);
g_free(str);
result = TRUE;
}
Modified: trunk/plugins/vcdiff.c
===================================================================
--- trunk/plugins/vcdiff.c 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/plugins/vcdiff.c 2008-07-15 14:29:41 UTC (rev 2779)
@@ -33,6 +33,7 @@
#include "support.h"
#include "plugindata.h"
#include "document.h"
+#include "editor.h"
#include "filetypes.h"
#include "utils.h"
#include "project.h"
@@ -284,9 +285,9 @@
}
else
{
- p_sci->set_text(doc->sci, text);
+ p_sci->set_text(doc->editor->sci, text);
book = GTK_NOTEBOOK(geany->main_widgets->notebook);
- page = gtk_notebook_page_num(book, GTK_WIDGET(doc->sci));
+ page = gtk_notebook_page_num(book, GTK_WIDGET(doc->editor->sci));
gtk_notebook_set_current_page(book, page);
p_document->set_text_changed(doc, FALSE);
}
Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/src/build.c 2008-07-15 14:29:41 UTC (rev 2779)
@@ -380,7 +380,8 @@
{
case GBO_COMPILE:
case GBO_MAKE_OBJECT:
- editor_clear_indicators(doc);
+ g_return_if_fail(doc);
+ editor_clear_indicators(doc->editor);
break;
case GBO_BUILD:
@@ -392,7 +393,7 @@
for (i = 0; i < documents_array->len; i++)
{
if (documents[i]->is_valid)
- editor_clear_indicators(documents[i]);
+ editor_clear_indicators(documents[i]->editor);
}
break;
}
@@ -858,7 +859,8 @@
{
GeanyDocument *doc = document_find_by_filename(filename);
- editor_set_indicator_on_line(doc, line - 1); /* will check valid idx */
+ if (doc)
+ editor_set_indicator_on_line(doc->editor, line - 1);
color = COLOR_RED; /* error message parsed on the line */
}
g_free(filename);
Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/src/callbacks.c 2008-07-15 14:29:41 UTC (rev 2779)
@@ -112,7 +112,7 @@
{
if (insert_callback_from_menu)
{
- editor_info.click_pos = sci_get_current_position(doc->sci);
+ editor_info.click_pos = sci_get_current_position(doc->editor->sci);
insert_callback_from_menu = FALSE;
}
}
@@ -305,7 +305,7 @@
gtk_editable_cut_clipboard(GTK_EDITABLE(focusw));
else
if (IS_SCINTILLA(focusw) && doc != NULL)
- sci_cut(doc->sci);
+ sci_cut(doc->editor->sci);
else
if (GTK_IS_TEXT_VIEW(focusw))
{
@@ -327,7 +327,7 @@
gtk_editable_copy_clipboard(GTK_EDITABLE(focusw));
else
if (IS_SCINTILLA(focusw) && doc != NULL)
- sci_copy(doc->sci);
+ sci_copy(doc->editor->sci);
else
if (GTK_IS_TEXT_VIEW(focusw))
{
@@ -360,12 +360,12 @@
gchar *content = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_NONE));
if (content != NULL)
{
- sci_replace_sel(doc->sci, content);
+ sci_replace_sel(doc->editor->sci, content);
g_free(content);
}
}
#else
- sci_paste(doc->sci);
+ sci_paste(doc->editor->sci);
#endif
}
else
@@ -390,7 +390,7 @@
gtk_editable_delete_selection(GTK_EDITABLE(focusw));
else
if (IS_SCINTILLA(focusw) && doc != NULL)
- sci_clear(doc->sci);
+ sci_clear(doc->editor->sci);
else
if (GTK_IS_TEXT_VIEW(focusw))
{
@@ -658,9 +658,9 @@
if (doc != NULL)
{
if (done++ % 3 == 0)
- sci_set_line_numbers(doc->sci, editor_prefs.show_linenumber_margin,
- (sci_get_zoom(doc->sci) / 2));
- sci_zoom_in(doc->sci);
+ sci_set_line_numbers(doc->editor->sci, editor_prefs.show_linenumber_margin,
+ (sci_get_zoom(doc->editor->sci) / 2));
+ sci_zoom_in(doc->editor->sci);
}
}
@@ -672,9 +672,9 @@
GeanyDocument *doc = document_get_current();
if (doc != NULL)
{
- if (sci_get_zoom(doc->sci) == 0)
- sci_set_line_numbers(doc->sci, editor_prefs.show_linenumber_margin, 0);
- sci_zoom_out(doc->sci);
+ if (sci_get_zoom(doc->editor->sci) == 0)
+ sci_set_line_numbers(doc->editor->sci, editor_prefs.show_linenumber_margin, 0);
+ sci_zoom_out(doc->editor->sci);
}
}
@@ -686,8 +686,8 @@
GeanyDocument *doc = document_get_current();
if (doc != NULL)
{
- sci_zoom_off(doc->sci);
- sci_set_line_numbers(doc->sci, editor_prefs.show_linenumber_margin, 0);
+ sci_zoom_off(doc->editor->sci);
+ sci_set_line_numbers(doc->editor->sci, editor_prefs.show_linenumber_margin, 0);
}
}
@@ -779,8 +779,8 @@
{
GeanyDocument *doc = document_get_current();
if (ignore_callback || doc == NULL) return;
- sci_convert_eols(doc->sci, SC_EOL_CRLF);
- sci_set_eol_mode(doc->sci, SC_EOL_CRLF);
+ sci_convert_eols(doc->editor->sci, SC_EOL_CRLF);
+ sci_set_eol_mode(doc->editor->sci, SC_EOL_CRLF);
}
@@ -790,8 +790,8 @@
{
GeanyDocument *doc = document_get_current();
if (ignore_callback || doc == NULL) return;
- sci_convert_eols(doc->sci, SC_EOL_LF);
- sci_set_eol_mode(doc->sci, SC_EOL_LF);
+ sci_convert_eols(doc->editor->sci, SC_EOL_LF);
+ sci_set_eol_mode(doc->editor->sci, SC_EOL_LF);
}
@@ -801,8 +801,8 @@
{
GeanyDocument *doc = document_get_current();
if (ignore_callback || doc == NULL) return;
- sci_convert_eols(doc->sci, SC_EOL_CR);
- sci_set_eol_mode(doc->sci, SC_EOL_CR);
+ sci_convert_eols(doc->editor->sci, SC_EOL_CR);
+ sci_set_eol_mode(doc->editor->sci, SC_EOL_CR);
}
@@ -863,7 +863,7 @@
if (doc == NULL)
return;
- sci = doc->sci;
+ sci = doc->editor->sci;
if (! sci_can_copy(sci))
{
keybindings_send_command(GEANY_KEY_GROUP_SELECT, GEANY_KEYS_SELECT_WORD);
@@ -969,7 +969,7 @@
{
GeanyDocument *doc = document_get_current();
if (doc != NULL)
- editor_set_line_wrapping(doc, ! doc->line_wrapping);
+ editor_set_line_wrapping(doc->editor, ! doc->editor->line_wrapping);
}
}
@@ -984,7 +984,7 @@
if (doc == NULL)
return;
doc->readonly = ! doc->readonly;
- sci_set_readonly(doc->sci, doc->readonly);
+ sci_set_readonly(doc->editor->sci, doc->readonly);
ui_update_tab_status(doc);
ui_update_statusbar(doc, -1);
}
@@ -999,7 +999,7 @@
{
GeanyDocument *doc = document_get_current();
if (doc != NULL)
- doc->auto_indent = ! doc->auto_indent;
+ doc->editor->auto_indent = ! doc->editor->auto_indent;
}
}
@@ -1015,10 +1015,10 @@
if (doc == NULL)
return;
- if (sci_can_copy(doc->sci))
+ if (sci_can_copy(doc->editor->sci))
{ /* take selected text if there is a selection */
- search_text = g_malloc(sci_get_selected_text_length(doc->sci) + 1);
- sci_get_selected_text(doc->sci, search_text);
+ search_text = g_malloc(sci_get_selected_text_length(doc->editor->sci) + 1);
+ sci_get_selected_text(doc->editor->sci, search_text);
flags = SCFIND_MATCHCASE;
}
else
@@ -1042,7 +1042,7 @@
g_return_if_fail(doc != NULL);
- sci_set_current_position(doc->sci, editor_info.click_pos, FALSE);
+ sci_set_current_position(doc->editor->sci, editor_info.click_pos, FALSE);
symbols_goto_tag(editor_info.current_word, definition);
}
@@ -1066,8 +1066,8 @@
if (doc == NULL)
return;
- pos = sci_get_current_position(doc->sci);
- editor_find_current_word(doc->sci, pos, colour, sizeof colour, GEANY_WORDCHARS"#");
+ pos = sci_get_current_position(doc->editor->sci);
+ editor_find_current_word(doc->editor->sci, pos, colour, sizeof colour, GEANY_WORDCHARS"#");
tools_color_chooser(colour);
}
@@ -1101,7 +1101,7 @@
change_direction ? forward : !forward, FALSE, NULL);
if (result > -1)
- editor_display_current_line(doc, 0.3F);
+ editor_display_current_line(doc->editor, 0.3F);
set_search_bar_background((result > -1) ? TRUE : FALSE);
}
@@ -1186,13 +1186,13 @@
GeanyDocument *doc = document_get_current();
gint line = strtol(gtk_entry_get_text(GTK_ENTRY(user_data)), NULL, 10);
- if (doc != NULL && line > 0 && line <= sci_get_line_count(doc->sci))
+ if (doc != NULL && line > 0 && line <= sci_get_line_count(doc->editor->sci))
{
gint pos;
line--; /* the user counts lines from 1, we begin at 0 so bring the user line to our one */
- pos = sci_get_position_from_line(doc->sci, line);
- editor_goto_pos(doc, pos, TRUE);
+ pos = sci_get_position_from_line(doc->editor->sci, line);
+ editor_goto_pos(doc->editor, pos, TRUE);
}
else
{
@@ -1288,14 +1288,14 @@
return;
}
- /* utils_get_current_function returns -1 on failure, so sci_get_position_from_line
+ /* symbols_get_current_function returns -1 on failure, so sci_get_position_from_line
* returns the current position, so it should be safe */
- line = utils_get_current_function(doc, &cur_tag);
- pos = sci_get_position_from_line(doc->sci, line - 1);
+ line = symbols_get_current_function(doc, &cur_tag);
+ pos = sci_get_position_from_line(doc->editor->sci, line - 1);
text = templates_get_template_function(doc->file_type->id, cur_tag);
- sci_insert_text(doc->sci, pos, text);
+ sci_insert_text(doc->editor->sci, pos, text);
g_free(text);
}
@@ -1333,7 +1333,7 @@
verify_click_pos(doc); /* make sure that the click_pos is valid */
- sci_insert_text(doc->sci, editor_info.click_pos, text);
+ sci_insert_text(doc->editor->sci, editor_info.click_pos, text);
g_free(text);
}
@@ -1353,7 +1353,7 @@
verify_click_pos(doc); /* make sure that the click_pos is valid */
- sci_insert_text(doc->sci, editor_info.click_pos, text);
+ sci_insert_text(doc->editor->sci, editor_info.click_pos, text);
g_free(text);
}
@@ -1370,10 +1370,10 @@
return;
text = templates_get_template_changelog();
- sci_insert_text(doc->sci, 0, text);
+ sci_insert_text(doc->editor->sci, 0, text);
/* sets the cursor to the right position to type the changelog text,
* the template has 21 chars + length of name and email */
- sci_goto_pos(doc->sci, 21 + strlen(template_prefs.developer) + strlen(template_prefs.mail), TRUE);
+ sci_goto_pos(doc->editor->sci, 21 + strlen(template_prefs.developer) + strlen(template_prefs.mail), TRUE);
g_free(text);
}
@@ -1394,8 +1394,8 @@
fname = doc->file_name;
text = templates_get_template_fileheader(FILETYPE_ID(ft), fname);
- sci_insert_text(doc->sci, 0, text);
- sci_goto_pos(doc->sci, 0, FALSE);
+ sci_insert_text(doc->editor->sci, 0, text);
+ sci_goto_pos(doc->editor->sci, 0, FALSE);
g_free(text);
}
@@ -1456,8 +1456,8 @@
{
verify_click_pos(doc); /* make sure that the click_pos is valid */
- sci_insert_text(doc->sci, editor_info.click_pos, time_str);
- sci_goto_pos(doc->sci, editor_info.click_pos + strlen(time_str), FALSE);
+ sci_insert_text(doc->editor->sci, editor_info.click_pos, time_str);
+ sci_goto_pos(doc->editor->sci, editor_info.click_pos + strlen(time_str), FALSE);
}
else
{
@@ -1490,10 +1490,10 @@
text = g_strconcat("#include <", user_data, ">\n", NULL);
}
- sci_insert_text(doc->sci, editor_info.click_pos, text);
+ sci_insert_text(doc->editor->sci, editor_info.click_pos, text);
g_free(text);
if (pos >= 0)
- sci_goto_pos(doc->sci, pos, FALSE);
+ sci_goto_pos(doc->editor->sci, pos, FALSE);
}
@@ -1548,7 +1548,7 @@
GeanyDocument *doc = document_get_current();
if (doc != NULL)
- editor_clear_indicators(doc);
+ editor_clear_indicators(doc->editor);
}
@@ -1591,7 +1591,7 @@
GeanyDocument *doc = document_get_current();
if (doc != NULL)
- sci_select_all(doc->sci);
+ sci_select_all(doc->editor->sci);
}
@@ -1695,24 +1695,24 @@
if (doc == NULL)
return;
- if (sci_get_lines_selected(doc->sci) > 1)
+ if (sci_get_lines_selected(doc->editor->sci) > 1)
{
- sci_cmd(doc->sci, SCI_TAB);
+ sci_cmd(doc->editor->sci, SCI_TAB);
}
else
{
gint line, ind_pos, old_pos, new_pos, step;
- old_pos = sci_get_current_position(doc->sci);
- line = sci_get_line_from_position(doc->sci, old_pos);
- ind_pos = sci_get_line_indent_position(doc->sci, line);
+ old_pos = sci_get_current_position(doc->editor->sci);
+ line = sci_get_line_from_position(doc->editor->sci, old_pos);
+ ind_pos = sci_get_line_indent_position(doc->editor->sci, line);
/* when using tabs increase cur pos by 1, when using space increase it by tab_width */
- step = (doc->use_tabs) ? 1 : editor_prefs.tab_width;
+ step = (doc->editor->use_tabs) ? 1 : editor_prefs.tab_width;
new_pos = (old_pos > ind_pos) ? old_pos + step : old_pos;
- sci_set_current_position(doc->sci, ind_pos, TRUE);
- sci_cmd(doc->sci, SCI_TAB);
- sci_set_current_position(doc->sci, new_pos, TRUE);
+ sci_set_current_position(doc->editor->sci, ind_pos, TRUE);
+ sci_cmd(doc->editor->sci, SCI_TAB);
+ sci_set_current_position(doc->editor->sci, new_pos, TRUE);
}
}
@@ -1725,31 +1725,31 @@
if (doc == NULL)
return;
- if (sci_get_lines_selected(doc->sci) > 1)
+ if (sci_get_lines_selected(doc->editor->sci) > 1)
{
- sci_cmd(doc->sci, SCI_BACKTAB);
+ sci_cmd(doc->editor->sci, SCI_BACKTAB);
}
else
{
gint line, ind_pos, old_pos, new_pos, step, indent;
- old_pos = sci_get_current_position(doc->sci);
- line = sci_get_line_from_position(doc->sci, old_pos);
- ind_pos = sci_get_line_indent_position(doc->sci, line);
- step = (doc->use_tabs) ? 1 : editor_prefs.tab_width;
+ old_pos = sci_get_current_position(doc->editor->sci);
+ line = sci_get_line_from_position(doc->editor->sci, old_pos);
+ ind_pos = sci_get_line_indent_position(doc->editor->sci, line);
+ step = (doc->editor->use_tabs) ? 1 : editor_prefs.tab_width;
new_pos = (old_pos >= ind_pos) ? old_pos - step : old_pos;
- if (ind_pos == sci_get_position_from_line(doc->sci, line))
+ if (ind_pos == sci_get_position_from_line(doc->editor->sci, line))
return;
- sci_set_current_position(doc->sci, ind_pos, TRUE);
- indent = sci_get_line_indentation(doc->sci, line);
+ sci_set_current_position(doc->editor->sci, ind_pos, TRUE);
+ indent = sci_get_line_indentation(doc->editor->sci, line);
indent -= editor_prefs.tab_width;
if (indent < 0)
indent = 0;
- sci_set_line_indentation(doc->sci, line, indent);
+ sci_set_line_indentation(doc->editor->sci, line, indent);
- sci_set_current_position(doc->sci, new_pos, TRUE);
+ sci_set_current_position(doc->editor->sci, new_pos, TRUE);
}
}
@@ -1923,8 +1923,8 @@
if (doc == NULL)
return;
- sci_marker_delete_all(doc->sci, 0); /* delete the yellow tag marker */
- sci_marker_delete_all(doc->sci, 1); /* delete user markers */
+ sci_marker_delete_all(doc->editor->sci, 0); /* delete the yellow tag marker */
+ sci_marker_delete_all(doc->editor->sci, 1); /* delete user markers */
}
@@ -1947,10 +1947,10 @@
if (doc == NULL)
return;
- if (sci_can_copy(doc->sci))
+ if (sci_can_copy(doc->editor->sci))
{ /* take selected text if there is a selection */
- word = g_malloc(sci_get_selected_text_length(doc->sci) + 1);
- sci_get_selected_text(doc->sci, word);
+ word = g_malloc(sci_get_selected_text_length(doc->editor->sci) + 1);
+ sci_get_selected_text(doc->editor->sci, word);
}
else
{
@@ -2074,7 +2074,7 @@
if (doc == NULL || ignore_callback)
return;
- editor_set_use_tabs(doc, TRUE);
+ editor_set_use_tabs(doc->editor, TRUE);
ui_update_statusbar(doc, -1);
}
@@ -2088,7 +2088,7 @@
if (doc == NULL || ignore_callback)
return;
- editor_set_use_tabs(doc, FALSE);
+ editor_set_use_tabs(doc->editor, FALSE);
ui_update_statusbar(doc, -1);
}
@@ -2153,7 +2153,7 @@
doc = document_get_current();
g_return_if_fail(doc != NULL);
- doc->line_breaking = !doc->line_breaking;
+ doc->editor->line_breaking = !doc->editor->line_breaking;
}
void
Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/src/document.c 2008-07-15 14:29:41 UTC (rev 2779)
@@ -192,7 +192,7 @@
for (i = 0; i < documents_array->len; i++)
{
- if (documents[i]->is_valid && documents[i]->sci == sci)
+ if (documents[i]->is_valid && documents[i]->editor->sci == sci)
return documents[i];
}
return NULL;
@@ -206,7 +206,7 @@
return -1;
return gtk_notebook_page_num(GTK_NOTEBOOK(main_widgets.notebook),
- GTK_WIDGET(doc->sci));
+ GTK_WIDGET(doc->editor->sci));
}
@@ -296,7 +296,7 @@
g_return_if_fail(doc != NULL);
- sci = doc->sci;
+ sci = doc->editor->sci;
sci_set_mark_long_lines(sci, editor_prefs.long_line_type,
editor_prefs.long_line_column, editor_prefs.long_line_color);
@@ -311,7 +311,7 @@
sci_set_folding_margin_visible(sci, editor_prefs.folding);
- doc->auto_indent = (editor_prefs.indent_mode != INDENT_NONE);
+ doc->editor->auto_indent = (editor_prefs.indent_mode != INDENT_NONE);
sci_assign_cmdkey(sci, SCK_HOME,
editor_prefs.smart_home_key ? SCI_VCHOMEWRAP : SCI_HOMEWRAP);
@@ -329,17 +329,13 @@
new_doc->is_valid = FALSE;
new_doc->has_tags = FALSE;
- new_doc->auto_indent = (editor_prefs.indent_mode != INDENT_NONE);
- new_doc->line_wrapping = editor_prefs.line_wrapping;
new_doc->readonly = FALSE;
new_doc->file_name = NULL;
new_doc->file_type = NULL;
new_doc->tm_file = NULL;
new_doc->encoding = NULL;
new_doc->has_bom = FALSE;
- new_doc->sci = NULL;
- new_doc->scroll_percent = -1.0F;
- new_doc->line_breaking = FALSE;
+ new_doc->editor = NULL;
new_doc->mtime = 0;
new_doc->changed = FALSE;
new_doc->last_check = time(NULL);
@@ -362,7 +358,7 @@
for (i = 0; i < documents_array->len; i++)
{
- if (documents[i]->sci == NULL)
+ if (documents[i]->editor == NULL)
{
return (gint) i;
}
@@ -380,7 +376,7 @@
* document), we need to force a redraw, so the expose event is triggered.
* This ensures we don't start colourising before all documents are opened/saved,
* only once the editor is drawn. */
- gtk_widget_queue_draw(GTK_WIDGET(doc->sci));
+ gtk_widget_queue_draw(GTK_WIDGET(doc->editor->sci));
}
@@ -388,8 +384,6 @@
* @return The index of the created document */
static GeanyDocument *document_create(const gchar *utf8_filename)
{
- PangoFontDescription *pfd;
- gchar *fname;
GeanyDocument *this;
gint new_idx;
gint cur_pages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
@@ -416,16 +410,10 @@
this->file_name = g_strdup(utf8_filename);
- this->sci = editor_create_new_sci(this);
+ this->editor = editor_create(this);
document_apply_update_prefs(this);
- pfd = pango_font_description_from_string(interface_prefs.editor_font);
- fname = g_strdup_printf("!%s", pango_font_description_get_family(pfd));
- editor_set_font(this, fname, pango_font_description_get_size(pfd) / PANGO_SCALE);
- pango_font_description_free(pfd);
- g_free(fname);
-
treeviews_openfiles_add(this); /* sets this->iter */
notebook_new_tab(this);
@@ -494,15 +482,16 @@
g_free(doc->real_path);
tm_workspace_remove_object(doc->tm_file, TRUE, TRUE);
+ g_free(doc->editor);
+ doc->editor = NULL;
+
doc->is_valid = FALSE;
- doc->sci = NULL;
doc->file_name = NULL;
doc->real_path = NULL;
doc->file_type = NULL;
doc->encoding = NULL;
doc->has_bom = FALSE;
doc->tm_file = NULL;
- doc->scroll_percent = -1.0F;
document_undo_clear(doc);
if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) == 0)
{
@@ -557,21 +546,21 @@
g_assert(doc != NULL);
- sci_set_undo_collection(doc->sci, FALSE); /* avoid creation of an undo action */
+ sci_set_undo_collection(doc->editor->sci, FALSE); /* avoid creation of an undo action */
if (text)
- sci_set_text(doc->sci, text);
+ sci_set_text(doc->editor->sci, text);
else
- sci_clear_all(doc->sci);
+ sci_clear_all(doc->editor->sci);
- sci_set_eol_mode(doc->sci, file_prefs.default_eol_character);
+ sci_set_eol_mode(doc->editor->sci, file_prefs.default_eol_character);
/* convert the eol chars in the template text in case they are different from
* from file_prefs.default_eol */
if (text != NULL)
- sci_convert_eols(doc->sci, file_prefs.default_eol_character);
+ sci_convert_eols(doc->editor->sci, file_prefs.default_eol_character);
- editor_set_use_tabs(doc, editor_prefs.use_tabs);
- sci_set_undo_collection(doc->sci, TRUE);
- sci_empty_undo_buffer(doc->sci);
+ editor_set_use_tabs(doc->editor, editor_prefs.use_tabs);
+ sci_set_undo_collection(doc->editor->sci, TRUE);
+ sci_empty_undo_buffer(doc->editor->sci);
doc->mtime = time(NULL);
@@ -585,18 +574,18 @@
document_set_filetype(doc, ft); /* also clears taglist */
if (ft == NULL)
- highlighting_set_styles(doc->sci, GEANY_FILETYPES_NONE);
+ highlighting_set_styles(doc->editor->sci, GEANY_FILETYPES_NONE);
ui_set_window_title(doc);
build_menu_update(doc);
document_update_tag_list(doc, FALSE);
document_set_text_changed(doc, FALSE);
ui_document_show_hide(doc); /* update the document menu */
- sci_set_line_numbers(doc->sci, editor_prefs.show_linenumber_margin, 0);
- sci_goto_pos(doc->sci, 0, TRUE);
+ sci_set_line_numbers(doc->editor->sci, editor_prefs.show_linenumber_margin, 0);
+ sci_goto_pos(doc->editor->sci, 0, TRUE);
/* "the" SCI signal (connect after initial setup(i.e. adding text)) */
- g_signal_connect((GtkWidget*) doc->sci, "sci-notify", G_CALLBACK(on_editor_notification), doc);
+ g_signal_connect((GtkWidget*) doc->editor->sci, "sci-notify", G_CALLBACK(on_editor_notification), doc);
if (geany_object)
{
@@ -857,25 +846,25 @@
/* Sets the cursor position on opening a file. First it sets the line when cl_options.goto_line
* is set, otherwise it sets the line when pos is greater than zero and finally it sets the column
* if cl_options.goto_column is set. */
-static void set_cursor_position(GeanyDocument *doc, gint pos)
+static void set_cursor_position(GeanyEditor *editor, gint pos)
{
if (cl_options.goto_line >= 0)
{ /* goto line which was specified on command line and then undefine the line */
- sci_goto_line(doc->sci, cl_options.goto_line - 1, TRUE);
- doc->scroll_percent = 0.5F;
+ sci_goto_line(editor->sci, cl_options.goto_line - 1, TRUE);
+ editor->scroll_percent = 0.5F;
cl_options.goto_line = -1;
}
else if (pos > 0)
{
- sci_set_current_position(doc->sci, pos, FALSE);
- doc->scroll_percent = 0.5F;
+ sci_set_current_position(editor->sci, pos, FALSE);
+ editor->scroll_percent = 0.5F;
}
if (cl_options.goto_column >= 0)
{ /* goto column which was specified on command line and then undefine the column */
- gint cur_pos = sci_get_current_position(doc->sci);
- sci_set_current_position(doc->sci, cur_pos + cl_options.goto_column, FALSE);
- doc->scroll_percent = 0.5F;
+ gint cur_pos = sci_get_current_position(editor->sci);
+ sci_set_current_position(editor->sci, cur_pos + cl_options.goto_column, FALSE);
+ editor->scroll_percent = 0.5F;
cl_options.goto_column = -1;
}
}
@@ -917,20 +906,20 @@
{
/* force using tabs for indentation for Makefiles */
if (FILETYPE_ID(doc->file_type) == GEANY_FILETYPES_MAKE)
- editor_set_use_tabs(doc, TRUE);
+ editor_set_use_tabs(doc->editor, TRUE);
/* force using spaces for indentation for Fortran 77 */
else if (FILETYPE_ID(doc->file_type) == GEANY_FILETYPES_F77)
- editor_set_use_tabs(doc, FALSE);
+ editor_set_use_tabs(doc->editor, FALSE);
else if (! editor_prefs.detect_tab_mode)
- editor_set_use_tabs(doc, editor_prefs.use_tabs);
+ editor_set_use_tabs(doc->editor, editor_prefs.use_tabs);
else
{ /* detect & set tabs/spaces */
- gboolean use_tabs = detect_use_tabs(doc->sci);
+ gboolean use_tabs = detect_use_tabs(doc->editor->sci);
if (use_tabs != editor_prefs.use_tabs)
ui_set_statusbar(TRUE, _("Setting %s indentation mode."),
(use_tabs) ? _("Tabs") : _("Spaces"));
- editor_set_use_tabs(doc, use_tabs);
+ editor_set_use_tabs(doc->editor, use_tabs);
}
}
@@ -984,11 +973,11 @@
ui_add_recent_file(utf8_filename); /* either add or reorder recent item */
gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook),
gtk_notebook_page_num(GTK_NOTEBOOK(main_widgets.notebook),
- (GtkWidget*) doc->sci));
+ (GtkWidget*) doc->editor->sci));
g_free(utf8_filename);
g_free(locale_filename);
document_check_disk_status(doc, TRUE); /* force a file changed check */
- set_cursor_position(doc, pos);
+ set_cursor_position(doc->editor, pos);
return doc;
}
}
@@ -1007,20 +996,20 @@
if (! reload) doc = document_create(utf8_filename);
g_return_val_if_fail(doc != NULL, NULL); /* really should not happen */
- sci_set_undo_collection(doc->sci, FALSE); /* avoid creation of an undo action */
- sci_empty_undo_buffer(doc->sci);
+ sci_set_undo_collection(doc->editor->sci, FALSE); /* avoid creation of an undo action */
+ sci_empty_undo_buffer(doc->editor->sci);
/* add the text to the ScintillaObject */
- sci_set_readonly(doc->sci, FALSE); /* to allow replacing text */
- sci_set_text(doc->sci, filedata.data); /* NULL terminated data */
+ sci_set_readonly(doc->editor->sci, FALSE); /* to allow replacing text */
+ sci_set_text(doc->editor->sci, filedata.data); /* NULL terminated data */
queue_colourise(doc); /* Ensure the document gets colourised. */
/* detect & set line endings */
editor_mode = utils_get_line_endings(filedata.data, filedata.len);
- sci_set_eol_mode(doc->sci, editor_mode);
+ sci_set_eol_mode(doc->editor->sci, editor_mode);
g_free(filedata.data);
- sci_set_undo_collection(doc->sci, TRUE);
+ sci_set_undo_collection(doc->editor->sci, TRUE);
doc->mtime = filedata.mtime; /* get the modification time from file and keep it */
g_free(doc->encoding); /* if reloading, free old encoding */
@@ -1029,13 +1018,13 @@
store_saved_encoding(doc); /* store the opened encoding for undo/redo */
doc->readonly = readonly || filedata.readonly;
- sci_set_readonly(doc->sci, doc->readonly);
+ sci_set_readonly(doc->editor->sci, doc->readonly);
/* update line number margin width */
- sci_set_line_numbers(doc->sci, editor_prefs.show_linenumber_margin, 0);
+ sci_set_line_numbers(doc->editor->sci, editor_prefs.show_linenumber_margin, 0);
/* set the cursor position according to pos, cl_options.goto_line and cl_options.goto_column */
- set_cursor_position(doc, pos);
+ set_cursor_position(doc->editor, pos);
if (! reload)
{
@@ -1044,7 +1033,7 @@
doc->real_path = get_real_path_from_utf8(doc->file_name);
/* "the" SCI signal (connect after initial setup(i.e. adding text)) */
- g_signal_connect((GtkWidget*) doc->sci, "sci-notify",
+ g_signal_connect((GtkWidget*) doc->editor->sci, "sci-notify",
G_CALLBACK(on_editor_notification), doc);
use_ft = (ft != NULL) ? ft : filetypes_detect_from_file(doc);
@@ -1060,7 +1049,7 @@
/* set indentation settings after setting the filetype */
if (reload)
- editor_set_use_tabs(doc, doc->use_tabs); /* resetup sci */
+ editor_set_use_tabs(doc->editor, doc->editor->use_tabs); /* resetup sci */
else
set_indentation(doc);
@@ -1163,7 +1152,7 @@
return FALSE;
/* try to set the cursor to the position before reloading */
- pos = sci_get_current_position(doc->sci);
+ pos = sci_get_current_position(doc->editor->sci);
new_doc = document_open_file_full(doc, NULL, pos, doc->readonly,
doc->file_type, forced_enc);
return (new_doc != NULL);
@@ -1200,8 +1189,8 @@
gint line_start;
/* for some reason we can use byte count instead of character count here */
- *line = sci_get_line_from_position(doc->sci, byte_pos);
- line_start = sci_get_position_from_line(doc->sci, *line);
+ *line = sci_get_line_from_position(doc->editor->sci, byte_pos);
+ line_start = sci_get_position_from_line(doc->editor->sci, *line);
/* get the column in the line */
*column = byte_pos - line_start;
@@ -1209,7 +1198,7 @@
* skip one byte(i++) and decrease the column number which is based on byte count */
for (i = line_start; i < (line_start + *column); i++)
{
- if (sci_get_char_at(doc->sci, i) < 0)
+ if (sci_get_char_at(doc->editor->sci, i) < 0)
{
(*column)--;
i++;
@@ -1218,6 +1207,34 @@
}
+static void replace_header_filename(GeanyDocument *doc)
+{
+ gchar *filebase;
+ gchar *filename;
+ struct TextToFind ttf;
+
+ if (doc == NULL || doc->file_type == NULL) return;
+
+ filebase = g_strconcat(GEANY_STRING_UNTITLED, ".", (doc->file_type)->extension, NULL);
+ filename = g_path_get_basename(doc->file_name);
+
+ /* only search the first 3 lines */
+ ttf.chrg.cpMin = 0;
+ ttf.chrg.cpMax = sci_get_position_from_line(doc->editor->sci, 3);
+ ttf.lpstrText = (gchar*)filebase;
+
+ if (sci_find_text(doc->editor->sci, SCFIND_MATCHCASE, &ttf) != -1)
+ {
+ sci_target_start(doc->editor->sci, ttf.chrgText.cpMin);
+ sci_target_end(doc->editor->sci, ttf.chrgText.cpMax);
+ sci_target_replace(doc->editor->sci, filename, FALSE);
+ }
+
+ g_free(filebase);
+ g_free(filename);
+}
+
+
/*
* Save the %document, detecting the filetype.
*
@@ -1252,7 +1269,7 @@
ignore_callback = FALSE;
}
}
- utils_replace_filename(doc);
+ replace_header_filename(doc);
ret = document_save_file(doc, TRUE);
if (ret)
@@ -1291,7 +1308,7 @@
/* don't read over the doc length */
gint max_len = MIN((gint)bytes_read + 6, (gint)*len - 1);
context = g_malloc(7); /* read 6 bytes from Sci + '\0' */
- sci_get_text_range(doc->sci, bytes_read, max_len, context);
+ sci_get_text_range(doc->editor->sci, bytes_read, max_len, context);
/* take only one valid Unicode character from the context and discard the leftover */
unic = g_utf8_get_char_validated(context, -1);
@@ -1396,7 +1413,7 @@
if (file_prefs.final_new_line)
editor_ensure_final_newline(doc);
- len = sci_get_length(doc->sci) + 1;
+ len = sci_get_length(doc->editor->sci) + 1;
if (doc->has_bom && encodings_is_unicode_charset(doc->encoding))
{ /* always write a UTF-8 BOM because in this moment the text itself is still in UTF-8
* encoding, it will be converted to doc->encoding below and this conversion
@@ -1405,13 +1422,13 @@
data[0] = (gchar) 0xef;
data[1] = (gchar) 0xbb;
data[2] = (gchar) 0xbf;
- sci_get_text(doc->sci, len, data + 3);
+ sci_get_text(doc->editor->sci, len, data + 3);
len += 3;
}
else
{
data = (gchar*) g_malloc(len);
- sci_get_text(doc->sci, len, data);
+ sci_get_text(doc->editor->sci, len, data);
}
/* save in original encoding, skip when it is already UTF-8 or has the encoding "None" */
@@ -1456,8 +1473,8 @@
/* set line numbers again, to reset the margin width, if
* there are more lines than before */
- sci_set_line_numbers(doc->sci, editor_prefs.show_linenumber_margin, 0);
- sci_set_savepoint(doc->sci);
+ sci_set_line_numbers(doc->editor->sci, editor_prefs.show_linenumber_margin, 0);
+ sci_set_savepoint(doc->editor->sci);
/* stat the file to get the timestamp, otherwise on Windows the actual
* timestamp can be ahead of time(NULL) */
@@ -1501,38 +1518,38 @@
if (! *text)
return TRUE;
- start_pos = (inc) ? sci_get_selection_start(doc->sci) :
- sci_get_selection_end(doc->sci); /* equal if no selection */
+ start_pos = (inc) ? sci_get_selection_start(doc->editor->sci) :
+ sci_get_selection_end(doc->editor->sci); /* equal if no selection */
/* search cursor to end */
ttf.chrg.cpMin = start_pos;
- ttf.chrg.cpMax = sci_get_length(doc->sci);
+ ttf.chrg.cpMax = sci_get_length(doc->editor->sci);
ttf.lpstrText = (gchar *)text;
- search_pos = sci_find_text(doc->sci, flags, &ttf);
+ search_pos = sci_find_text(doc->editor->sci, flags, &ttf);
/* if no match, search start to cursor */
if (search_pos == -1)
{
ttf.chrg.cpMin = 0;
ttf.chrg.cpMax = start_pos + strlen(text);
- search_pos = sci_find_text(doc->sci, flags, &ttf);
+ search_pos = sci_find_text(doc->editor->sci, flags, &ttf);
}
if (search_pos != -1)
{
- gint line = sci_get_line_from_position(doc->sci, ttf.chrgText.cpMin);
+ gint line = sci_get_line_from_position(doc->editor->sci, ttf.chrgText.cpMin);
/* unfold maybe folded results */
- sci_ensure_line_is_visible(doc->sci, line);
+ sci_ensure_line_is_visible(doc->editor->sci, line);
- sci_set_selection_start(doc->sci, ttf.chrgText.cpMin);
- sci_set_selection_end(doc->sci, ttf.chrgText.cpMax);
+ sci_set_selection_start(doc->editor->sci, ttf.chrgText.cpMin);
+ sci_set_selection_end(doc->editor->sci, ttf.chrgText.cpMax);
- if (! editor_line_in_view(doc->sci, line))
+ if (! editor_line_in_view(doc->editor->sci, line))
{ /* we need to force scrolling in case the cursor is outside of the current visible area
* GeanyDocument::scroll_percent doesn't work because sci isn't always updated
* while searching */
- editor_scroll_to_line(doc->sci, -1, 0.3F);
+ editor_scroll_to_line(doc->editor->sci, -1, 0.3F);
}
return TRUE;
}
@@ -1543,7 +1560,7 @@
ui_set_statusbar(FALSE, _("\"%s\" was not found."), text);
}
utils_beep();
- sci_goto_pos(doc->sci, start_pos, FALSE); /* clear selection */
+ sci_goto_pos(doc->editor->sci, start_pos, FALSE); /* clear selection */
return FALSE;
}
}
@@ -1563,33 +1580,33 @@
if (flags & SCFIND_REGEXP)
search_backwards = FALSE;
- selection_start = sci_get_selection_start(doc->sci);
- selection_end = sci_get_selection_end(doc->sci);
+ selection_start = sci_get_selection_start(doc->editor->sci);
+ selection_end = sci_get_selection_end(doc->editor->sci);
if ((selection_end - selection_start) > 0)
{ /* there's a selection so go to the end */
if (search_backwards)
- sci_goto_pos(doc->sci, selection_start, TRUE);
+ sci_goto_pos(doc->editor->sci, selection_start, TRUE);
else
- sci_goto_pos(doc->sci, selection_end, TRUE);
+ sci_goto_pos(doc->editor->sci, selection_end, TRUE);
}
- sci_set_search_anchor(doc->sci);
+ sci_set_search_anchor(doc->editor->sci);
if (search_backwards)
- search_pos = sci_search_prev(doc->sci, flags, text);
+ search_pos = sci_search_prev(doc->editor->sci, flags, text);
else
- search_pos = sci_search_next(doc->sci, flags, text);
+ search_pos = sci_search_next(doc->editor->sci, flags, text);
if (search_pos != -1)
{
/* unfold maybe folded results */
- sci_ensure_line_is_visible(doc->sci,
- sci_get_line_from_position(doc->sci, search_pos));
+ sci_ensure_line_is_visible(doc->editor->sci,
+ sci_get_line_from_position(doc->editor->sci, search_pos));
if (scroll)
- doc->scroll_percent = 0.3F;
+ doc->editor->scroll_percent = 0.3F;
}
else
{
- gint sci_len = sci_get_length(doc->sci);
+ gint sci_len = sci_get_length(doc->editor->sci);
/* if we just searched the whole text, give up searching. */
if ((selection_end == 0 && ! search_backwards) ||
@@ -1607,11 +1624,11 @@
{
gint ret;
- sci_set_current_position(doc->sci, (search_backwards) ? sci_len : 0, FALSE);
+ sci_set_current_position(doc->editor->sci, (search_backwards) ? sci_len : 0, FALSE);
ret = document_find_text(doc, text, flags, search_backwards, scroll, parent);
if (ret == -1)
{ /* return to original cursor position if not found */
- sci_set_current_position(doc->sci, selection_start, FALSE);
+ sci_set_current_position(doc->editor->sci, selection_start, FALSE);
}
return ret;
}
@@ -1634,8 +1651,8 @@
if (flags & SCFIND_REGEXP)
search_backwards = FALSE;
- selection_start = sci_get_selection_start(doc->sci);
- selection_end = sci_get_selection_end(doc->sci);
+ selection_start = sci_get_selection_start(doc->editor->sci);
+ selection_end = sci_get_selection_end(doc->editor->sci);
if (selection_end == selection_start)
{
/* no selection so just find the next match */
@@ -1645,9 +1662,9 @@
/* there's a selection so go to the start before finding to search through it
* this ensures there is a match */
if (search_backwards)
- sci_goto_pos(doc->sci, selection_end, TRUE);
+ sci_goto_pos(doc->editor->sci, selection_end, TRUE);
else
- sci_goto_pos(doc->sci, selection_start, TRUE);
+ sci_goto_pos(doc->editor->sci, selection_start, TRUE);
search_pos = document_find_text(doc, find_text, flags, search_backwards, TRUE, NULL);
/* return if the original selected text did not match (at the start of the selection) */
@@ -1658,11 +1675,11 @@
{
gint replace_len;
/* search next/prev will select matching text, which we use to set the replace target */
- sci_target_from_selection(doc->sci);
- replace_len = sci_target_replace(doc->sci, replace_text, flags & SCFIND_REGEXP);
+ sci_target_from_selection(doc->editor->sci);
+ replace_len = sci_target_replace(doc->editor->sci, replace_text, flags & SCFIND_REGEXP);
/* select the replacement - find text will skip past the selected text */
- sci_set_selection_start(doc->sci, search_pos);
- sci_set_selection_end(doc->sci, search_pos + replace_len);
+ sci_set_selection_start(doc->editor->sci, search_pos);
+ sci_set_selection_end(doc->editor->sci, search_pos + replace_len);
}
else
{
@@ -1727,7 +1744,7 @@
g_return_val_if_fail(doc != NULL && find_text != NULL && replace_text != NULL, 0);
if (! *find_text || doc->readonly) return 0;
- sci = doc->sci;
+ sci = doc->editor->sci;
sci_start_undo_action(sci);
ttf.chrg.cpMin = start;
@@ -1801,8 +1818,8 @@
g_return_if_fail(doc != NULL && find_text != NULL && replace_text != NULL);
if (! *find_text) return;
- selection_start = sci_get_selection_start(doc->sci);
- selection_end = sci_get_selection_end(doc->sci);
+ selection_start = sci_get_selection_start(doc->editor->sci);
+ selection_end = sci_get_selection_end(doc->editor->sci);
/* do we have a selection? */
if ((selection_end - selection_start) == 0)
{
@@ -1810,24 +1827,24 @@
return;
}
- selection_mode = sci_get_selection_mode(doc->sci);
- selected_lines = sci_get_lines_selected(doc->sci);
+ selection_mode = sci_get_selection_mode(doc->editor->sci);
+ selected_lines = sci_get_lines_selected(doc->editor->sci);
/* handle rectangle, multi line selections (it doesn't matter on a single line) */
if (selection_mode == SC_SEL_RECTANGLE && selected_lines > 1)
{
gint first_line, line;
- sci_start_undo_action(doc->sci);
+ sci_start_undo_action(doc->editor->sci);
- first_line = sci_get_line_from_position(doc->sci, selection_start);
+ first_line = sci_get_line_from_position(doc->editor->sci, selection_start);
/* Find the last line with chars selected (not EOL char) */
- last_line = sci_get_line_from_position(doc->sci,
+ last_line = sci_get_line_from_position(doc->editor->sci,
selection_end - editor_get_eol_char_len(doc));
last_line = MAX(first_line, last_line);
for (line = first_line; line < (first_line + selected_lines); line++)
{
- gint line_start = sci_get_pos_at_line_sel_start(doc->sci, line);
- gint line_end = sci_get_pos_at_line_sel_end(doc->sci, line);
+ gint line_start = sci_get_pos_at_line_sel_start(doc->editor->sci, line);
+ gint line_end = sci_get_pos_at_line_sel_end(doc->editor->sci, line);
/* skip line if there is no selection */
if (line_start != INVALID_POSITION)
@@ -1842,11 +1859,11 @@
replaced = TRUE;
/* this gets the greatest column within the selection after replacing */
max_column = MAX(max_column,
- new_sel_end - sci_get_position_from_line(doc->sci, line));
+ new_sel_end - sci_get_position_from_line(doc->editor->sci, line));
}
}
}
- sci_end_undo_action(doc->sci);
+ sci_end_undo_action(doc->editor->sci);
}
else /* handle normal line selection */
{
@@ -1862,26 +1879,26 @@
if (selection_mode == SC_SEL_RECTANGLE && selected_lines > 1)
{
/* now we can scroll to the selection and destroy it because we rebuild it later */
- /*sci_goto_pos(doc->sci, selection_start, FALSE);*/
+ /*sci_goto_pos(doc->editor->sci, selection_start, FALSE);*/
/* Note: the selection will be wrapped to last_line + 1 if max_column is greater than
* the highest column on the last line. The wrapped selection is completely different
* from the original one, so skip the selection at all */
/* TODO is there a better way to handle the wrapped selection? */
- if ((sci_get_line_length(doc->sci, last_line) - 1) >= max_column)
+ if ((sci_get_line_length(doc->editor->sci, last_line) - 1) >= max_column)
{ /* for keeping and adjusting the selection in multi line rectangle selection we
* need the last line of the original selection and the greatest column number after
* replacing and set the selection end to the last line at the greatest column */
- sci_set_selection_start(doc->sci, selection_start);
- sci_set_selection_end(doc->sci,
- sci_get_position_from_line(doc->sci, last_line) + max_column);
- sci_set_selection_mode(doc->sci, selection_mode);
+ sci_set_selection_start(doc->editor->sci, selection_start);
+ sci_set_selection_end(doc->editor->sci,
+ sci_get_position_from_line(doc->editor->sci, last_line) + max_column);
+ sci_set_selection_mode(doc->editor->sci, selection_mode);
}
}
else
{
- sci_set_selection_start(doc->sci, selection_start);
- sci_set_selection_end(doc->sci, selection_end);
+ sci_set_selection_start(doc->editor->sci, selection_start);
+ sci_set_selection_end(doc->editor->sci, selection_end);
}
}
else /* no replacements */
@@ -1899,7 +1916,7 @@
g_return_val_if_fail(doc != NULL && find_text != NULL && replace_text != NULL, FALSE);
if (! *find_text) return FALSE;
- len = sci_get_length(doc->sci);
+ len = sci_get_length(doc->editor->sci);
count = document_replace_range(
doc, find_text, replace_text, flags, 0, len, TRUE, NULL);
@@ -2002,7 +2019,7 @@
gboolean ret = FALSE;
guint n;
const GString *s;
- ScintillaObject *sci = doc ? doc->sci : NULL;
+ ScintillaObject *sci = doc ? doc->editor->sci : NULL;
if (sci != NULL && editor_lexer_get_type_keyword_idx(sci_get_lexer(sci)) == -1)
return FALSE;
@@ -2022,10 +2039,9 @@
for (n = 0; n < documents_array->len; n++)
{
- ScintillaObject *wid = documents[n]->sci;
-
- if (wid)
+ if (documents[n]->is_valid)
{
+ ScintillaObject *wid = documents[n]->editor->sci;
gint keyword_idx = editor_lexer_get_type_keyword_idx(sci_get_lexer(wid));
if (keyword_idx > 0)
@@ -2066,7 +2082,7 @@
tm_workspace_remove_object(doc->tm_file, TRUE, TRUE);
doc->tm_file = NULL;
}
- highlighting_set_styles(doc->sci, type->id);
+ highlighting_set_styles(doc->editor->sci, type->id);
build_menu_update(doc);
queue_colourise(doc);
}
@@ -2142,7 +2158,7 @@
}
fdoc->redo_actions = NULL;
- if (! main_status.quitting && doc->sci != NULL)
+ if (! main_status.quitting && doc->editor != NULL)
document_set_text_changed(doc, FALSE);
/*geany_debug("%s: new undo stack height: %d, new redo stack height: %d", __func__,
@@ -2179,7 +2195,7 @@
if (doc == NULL)
return FALSE;
- if (g_trash_stack_height(&fdoc->undo_actions) > 0 || sci_can_undo(doc->sci))
+ if (g_trash_stack_height(&fdoc->undo_actions) > 0 || sci_can_undo(doc->editor->sci))
return TRUE;
else
return FALSE;
@@ -2191,7 +2207,7 @@
Document *fdoc = DOCUMENT(doc);
doc->changed =
- (sci_is_modified(doc->sci) ||
+ (sci_is_modified(doc->editor->sci) ||
doc->has_bom != fdoc->saved_encoding.has_bom ||
! utils_str_equal(doc->encoding, fdoc->saved_encoding.encoding));
document_set_text_changed(doc, doc->changed);
@@ -2212,7 +2228,7 @@
{
/* fallback, should not be necessary */
geany_debug("%s: fallback used", __func__);
- sci_undo(doc->sci);
+ sci_undo(doc->editor->sci);
}
else
{
@@ -2222,7 +2238,7 @@
{
document_redo_add(doc, UNDO_SCINTILLA, NULL);
- sci_undo(doc->sci);
+ sci_undo(doc->editor->sci);
break;
}
case UNDO_BOM:
@@ -2266,7 +2282,7 @@
if (doc == NULL)
return FALSE;
- if (g_trash_stack_height(&fdoc->redo_actions) > 0 || sci_can_redo(doc->sci))
+ if (g_trash_stack_height(&fdoc->redo_actions) > 0 || sci_can_redo(doc->editor->sci))
return TRUE;
else
return FALSE;
@@ -2287,7 +2303,7 @@
{
/* fallback, should not be necessary */
geany_debug("%s: fallback used", __func__);
- sci_redo(doc->sci);
+ sci_redo(doc->editor->sci);
}
else
{
@@ -2297,7 +2313,7 @@
{
document_undo_add(doc, UNDO_SCINTILLA, NULL);
- sci_redo(doc->sci);
+ sci_redo(doc->editor->sci);
break;
}
case UNDO_BOM:
@@ -2389,20 +2405,20 @@
gchar *text;
GeanyDocument *doc;
- len = sci_get_length(old_doc->sci) + 1;
+ len = sci_get_length(old_doc->editor->sci) + 1;
text = (gchar*) g_malloc(len);
- sci_get_text(old_doc->sci, len, text);
+ sci_get_text(old_doc->editor->sci, len, text);
/* use old file type (or maybe NULL for auto detect would be better?) */
doc = document_new_file(utf8_filename, old_doc->file_type, text);
g_free(text);
/* copy file properties */
- doc->line_wrapping = old_doc->line_wrapping;
+ doc->editor->line_wrapping = old_doc->editor->line_wrapping;
doc->readonly = old_doc->readonly;
doc->has_bom = old_doc->has_bom;
document_set_encoding(doc, old_doc->encoding);
- sci_set_lines_wrapped(doc->sci, doc->line_wrapping);
- sci_set_readonly(doc->sci, doc->readonly);
+ sci_set_lines_wrapped(doc->editor->sci, doc->editor->line_wrapping);
+ sci_set_readonly(doc->editor->sci, doc->readonly);
ui_document_show_hide(doc);
return doc;
Modified: trunk/src/document.h
===================================================================
--- trunk/src/document.h 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/src/document.h 2008-07-15 14:29:41 UTC (rev 2779)
@@ -82,30 +82,20 @@
gchar *encoding;
/** Internally used flag to indicate whether the file of this %document has a byte-order-mark. */
gboolean has_bom;
+ struct GeanyEditor *editor; /**< The editor associated with the document. */
/** The filetype for this %document, it's only a reference to one of the elements of the global
* filetypes array. */
GeanyFiletype *file_type;
/** TMWorkObject object for this %document. */
TMWorkObject *tm_file;
- /** The Scintilla object for this %document. */
- ScintillaObject *sci;
/** Whether this %document is read-only. */
gboolean readonly;
/** Whether this %document has been changed since it was last saved. */
gboolean changed;
- /** %Document-specific line wrapping setting. */
- gboolean line_wrapping;
- /** %Document-specific indentation setting. */
- gboolean auto_indent;
- /** Percentage to scroll view by on paint, if positive. */
- gfloat scroll_percent;
/** Time of the last disk check. */
time_t last_check;
/** Modification time of this %document on disk. */
time_t mtime;
- /** %Document-specific indentation setting. */
- gboolean use_tabs;
- gboolean line_breaking; /**< Whether to split long lines as you type. */
/** The link-dereferenced, locale-encoded file name.
* If non-NULL, this indicates the file once existed on disk (not just as an
* unsaved document with a filename set).
Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c 2008-07-14 23:43:21 UTC (rev 2778)
+++ trunk/src/editor.c 2008-07-15 14:29:41 UTC (rev 2779)
@@ -72,13 +72,13 @@
static gchar indent[100];
-static void on_new_line_added(GeanyDocument *doc);
-static gboolean handle_xml(GeanyDocument *doc, gchar ch);
-static void get_indent(GeanyDocument *doc, gint pos, gboolean use_this_line);
-static void auto_multiline(GeanyDocument *doc, gint pos);
+static void on_new_line_added(GeanyEditor *editor);
+static gboolean handle_xml(GeanyEditor *editor, gchar ch);
+static void get_indent(GeanyEditor *editor, gint pos, gboolean use_this_line);
+static void auto_multiline(GeanyEditor *editor, gint pos);
static gboolean is_comment(gint lexer, gint prev_style, gint style);
static void auto_close_bracket(ScintillaObject *sci, gint pos, gchar c);
-static void editor_auto_table(GeanyDocument *doc, gint pos);
+static void auto_table(GeanyEditor *editor, gint pos);
@@ -181,20 +181,20 @@
if (doc == NULL)
return FALSE;
- editor_info.click_pos = sci_get_position_from_xy(doc->sci, (gint)event->x, (gint)event->y, FALSE);
+ editor_info.click_pos = sci_get_position_from_xy(doc->editor->sci, (gint)event->x, (gint)event->y, FALSE);
if (event->button == 1)
{
if (GDK_BUTTON_PRESS == event->type && editor_prefs.disable_dnd)
{
- gint ss = sci_get_selection_start(doc->sci);
- sci_set_selection_end(doc->sci, ss);
+ gint ss = sci_get_selection_start(doc->editor->sci);
+ sci_set_selection_end(doc->editor->sci, ss);
}
return document_check_disk_status(doc, FALSE);
}
if (event->button == 3)
{
- editor_find_current_word(doc->sci, editor_info.click_pos,
+ editor_find_current_word(doc->editor->sci, editor_info.click_pos,
current_word, sizeof current_word, NULL);
ui_update_popup_goto_items((current_word[0] != '\0') ? TRUE : FALSE);
@@ -265,7 +265,7 @@
gint line = sci_get_line_from_position(sci, nt->position);
gboolean set = sci_is_marker_set_at_line(sci, line, 1);
- /*sci_marker_delete_all(doc->sci, 1);*/
+ /*sci_marker_delete_all(doc->editor->sci, 1);*/
sci_set_marker_at_line(sci, line, ! set, 1); /* toggle the marker */
}
/* left click on the folding margin to toggle folding state of current line */
@@ -276,27 +276,27 @@
}
-static void on_update_ui(GeanyDocument *doc, G_GNUC_UNUSED SCNotification *nt)
+static void on_update_ui(GeanyEditor *editor, G_GNUC_UNUSED SCNotification *nt)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
gint pos = sci_get_current_position(sci);
/* undo / redo menu update */
- ui_update_popup_reundo_items(doc);
+ ui_update_popup_reundo_items(editor->document);
/* brace highlighting */
editor_highlight_braces(sci, pos);
- ui_update_statusbar(doc, pos);
+ ui_update_statusbar(editor->document, pos);
/* Visible lines are only laid out accurately once [SCN_UPDATEUI] is sent,
* so we need to only call sci_scroll_to_line here, because the document
* may have line wrapping and folding enabled.
* http://scintilla.sourceforge.net/ScintillaDoc.html#LineWrapping */
- if (doc->scroll_percent > 0.0F)
+ if (editor->scroll_percent > 0.0F)
{
- editor_scroll_to_line(sci, -1, doc->scroll_percent);
- doc->scroll_percent = -1.0F; /* disable further scrolling */
+ editor_scroll_to_line(sci, -1, editor->scroll_percent);
+ editor->scroll_percent = -1.0F; /* disable further scrolling */
}
#if 0
/** experimental code for inverting selections */
@@ -315,12 +315,12 @@
}
-static void check_line_breaking(GeanyDocument *doc, gint pos, gchar c)
+static void check_line_breaking(GeanyEditor *editor, gint pos, gchar c)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
gint line, lstart;
- if (!doc->line_breaking)
+ if (!editor->line_breaking)
return;
if (c == GDK_space)
@@ -341,7 +341,7 @@
if (c == GDK_space)
{
gint col, len, diff;
- const gchar *eol = editor_get_eol_char(doc);
+ const gchar *eol = editor_get_eol_char(editor->document);
/* break the line after the space */
sci_insert_text(sci, pos + 1, eol);
@@ -358,7 +358,7 @@
pos = sci_get_position_from_line(sci, line);
sci_set_current_position(sci, pos, FALSE);
/* add indentation, comment multilines, etc */
- on_new_line_added(doc);
+ on_new_line_added(editor);
/* correct cursor position (might not be at line end) */
pos = sci_get_position_from_line(sci, line);
@@ -370,9 +370,9 @@
}
-static void on_char_added(GeanyDocument *doc, SCNotification *nt)
+static void on_char_added(GeanyEditor *editor, SCNotification *nt)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
gint pos = sci_get_current_position(sci);
switch (nt->ch)
@@ -380,23 +380,23 @@
case '\r':
{ /* simple indentation (only for CR format) */
if (sci_get_eol_mode(sci) == SC_EOL_CR)
- on_new_line_added(doc);
+ on_new_line_added(editor);
break;
}
case '\n':
{ /* simple indentation (for CR/LF and LF format) */
- on_new_line_added(doc);
+ on_new_line_added(editor);
break;
}
case '>':
case '/':
{ /* close xml-tags */
- handle_xml(doc, nt->ch);
+ handle_xml(editor, nt->ch);
break;
}
case '(':
{ /* show calltips */
- editor_show_calltip(doc, --pos);
+ editor_show_calltip(editor->document, --pos);
break;
}
case ')':
@@ -418,19 +418,20 @@
if (sci_get_lexer(sci) == SCLEX_LATEX)
{
auto_close_bracket(sci, pos, nt->ch); /* Tex auto-closing */
- editor_show_calltip(doc, --pos);
+ editor_show_calltip(editor->document, --pos);
}
break;
}
case '}':
{ /* closing bracket handling */
- if (doc->auto_indent)
- editor_close_block(doc, pos - 1);
+ if (editor->auto_indent)
+ editor_close_block(editor->document, pos - 1);
break;
}
- default: editor_start_auto_complete(doc, pos, FALSE);
+ default:
+ editor_start_auto_complete(editor->document, pos, FALSE);
}
- check_line_breaking(doc, pos, nt->ch);
+ check_line_breaking(editor, pos, nt->ch);
}
@@ -567,14 +568,15 @@
/* callback func called by all editors when a signal arises */
-void on_editor_notification(GtkWidget *editor, gint scn, gpointer lscn, gpointer user_data)
+void on_editor_notification(GtkWidget *widget, gint scn, gpointer lscn, gpointer user_data)
{
SCNotification *nt;
ScintillaObject *sci;
- GeanyDocument *doc;
+ GeanyDocument *doc = user_data;
+ GeanyEditor *editor;
- doc = user_data;
- sci = doc->sci;
+ editor = doc->editor;
+ sci = editor->sci;
nt = lscn;
switch (nt->nmhdr.code)
@@ -599,7 +601,7 @@
break;
case SCN_UPDATEUI:
- on_update_ui(doc, nt);
+ on_update_ui(editor, nt);
break;
case SCN_MODIFIED:
@@ -617,7 +619,7 @@
break;
}
case SCN_CHARADDED:
- on_char_added(doc, nt);
+ on_char_added(editor, nt);
break;
case SCN_USERLISTSELECTION:
@@ -722,53 +724,54 @@
}
-static void check_python_indent(GeanyDocument *doc, gint pos)
+static void check_python_indent(GeanyEditor *editor, gint pos)
{
- gint last_char = pos - editor_get_eol_char_len(doc) - 1;
+ ScintillaObject *sci = editor->sci;
+ gint last_char = pos - editor_get_eol_char_len(editor->document) - 1;
/* add extra indentation for Python after colon */
- if (sci_get_char_at(doc->sci, last_char) == ':' &&
- sci_get_style_at(doc->sci, last_char) == SCE_P_OPERATOR)
+ if (sci_get_char_at(sci, last_char) == ':' &&
+ sci_get_style_at(sci, last_char) == SCE_P_OPERATOR)
{
/* creates and inserts one tabulator sign or
* whitespace of the amount of the tab width */
- gchar *text = get_whitespace(editor_prefs.tab_width, doc->use_tabs);
- sci_add_text(doc->sci, text);
+ gchar *text = get_whitespace(editor_prefs.tab_width, editor->use_tabs);
+ sci_add_text(sci, text);
g_free(text);
}
}
-static void on_new_line_added(GeanyDocument *doc)
+static void on_new_line_added(GeanyEditor *editor)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
gint pos = sci_get_current_position(sci);
gint line = sci_get_current_line(sci);
/* simple indentation */
- if (doc->auto_indent)
+ if (editor->auto_indent)
{
- get_indent(doc, pos, FALSE);
+ get_indent(editor, pos, FALSE);
sci_add_text(sci, indent);
if (editor_prefs.indent_mode > INDENT_BASIC &&
- FILETYPE_ID(doc->file_type) == GEANY_FILETYPES_PYTHON)
- check_python_indent(doc, pos);
+ FILETYPE_ID(editor->document->file_type) == GEANY_FILETYPES_PYTHON)
+ check_python_indent(editor, pos);
}
if (editor_prefs.auto_continue_multiline)
{ /* " * " auto completion in multiline C/C++/D/Java comments */
- auto_multiline(doc, pos);
+ auto_multiline(editor, pos);
}
if (editor_prefs.complete_snippets)
{
- editor_auto_latex(doc, pos);
+ editor_auto_latex(editor->document, pos);
}
if (editor_prefs.newline_strip)
{ /* strip the trailing spaces on the previous line */
- editor_strip_line_trailing_spaces(doc, line - 1);
+ editor_strip_line_trailing_spaces(editor->document, line - 1);
}
}
@@ -815,9 +818,9 @@
/* "use_this_line" to auto-indent only if it is a real new line
* and ignore the case of editor_close_block */
-static void get_indent(GeanyDocument *doc, gint pos, gboolean use_this_line)
+static void get_indent(GeanyEditor *editor, gint pos, gboolean use_this_line)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
guint i, len, j = 0;
gint prev_line;
gchar *linebuf;
@@ -846,7 +849,7 @@
* " { return bless({}, shift); }" (Perl) */
if (linebuf[i] == '{' && i == (len - 1))
{
- do_indent(indent, sizeof(indent), &j, doc->use_tabs);
+ do_indent(indent, sizeof(indent), &j, editor->use_tabs);
break;
}
else
@@ -859,7 +862,7 @@
* e.g. for (...) { */
if (linebuf[k] == '{')
{
- do_indent(indent, sizeof(indent), &j, doc->use_tabs);
+ do_indent(indent, sizeof(indent), &j, editor->use_tabs);
}
break;
}
@@ -940,7 +943,7 @@
if (doc == NULL || doc->file_type == NULL)
return;
- sci = doc->sci;
+ sci = doc->editor->sci;
if (! lexer_has_braces(sci))
return;
@@ -972,7 +975,7 @@
{
gint line_start;
- get_indent(doc, start_brace, TRUE);
+ get_indent(doc->editor, start_brace, TRUE);
text = g_strconcat(indent, "}", NULL);
line_start = sci_get_position_from_line(sci, line);
sci_set_anchor(sci, line_start);
@@ -1199,7 +1202,7 @@
if (doc == NULL || doc->file_type == NULL)
return FALSE;
- sci = doc->sci;
+ sci = doc->editor->sci;
lexer = SSM(sci, SCI_GETLEXER, 0, 0);
@@ -1283,7 +1286,7 @@
if (doc == NULL || doc->file_type == NULL)
return FALSE;
- sci = doc->sci;
+ sci = doc->editor->sci;
tags = tm_workspace_find(root, tm_tag_max_t, attrs, TRUE, doc->file_type->lang);
if (NULL != tags && tags->len > 0)
@@ -1337,7 +1340,7 @@
doc == NULL || doc->file_type == NULL)
return FALSE;
- sci = doc->sci;
+ sci = doc->editor->sci;
ft = doc->file_type;
line = sci_get_line_from_position(sci, pos);
@@ -1398,10 +1401,11 @@
if (doc == NULL || doc->file_type == NULL)
return;
- sci = doc->sci;
+ sci = doc->editor->sci;
if (sci_get_char_at(sci, pos - 2) == '}')
{
+ GeanyEditor *editor = doc->editor;
gchar *eol, *buf, *construct;
gchar env[50];
gint line = sci_get_line_from_position(sci, pos - 2);
@@ -1452,8 +1456,8 @@
}
/* get the indentation */
- if (doc->auto_indent)
- get_indent(doc, pos, TRUE);
+ if (editor->auto_indent)
+ get_indent(editor, pos, TRUE);
eol = g_strconcat(editor_get_eol_char(doc), indent, NULL);
construct = g_strdup_printf("%s\\end%s{%s}", eol, full_cmd, env);
@@ -1539,16 +1543,16 @@
}
-static gboolean snippets_complete_constructs(GeanyDocument *doc, gint pos, const gchar *word)
+static gboolean snippets_complete_constructs(GeanyEditor *editor, gint pos, const gchar *word)
{
gchar *str;
gchar *pattern;
gchar *lindent;
gchar *whitespace;
gint step, str_len;
- gint ft_id = FILETYPE_ID(doc->file_type);
+ gint ft_id = FILETYPE_ID(editor->document->file_type);
GHashTable *specials;
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
str = g_strdup(word);
g_strstrip(str);
@@ -1560,9 +1564,9 @@
return FALSE;
}
- get_indent(doc, pos, TRUE);
- lindent = g_strconcat(editor_get_eol_char(doc), indent, NULL);
- whitespace = get_whitespace(editor_prefs.tab_width, doc->use_tabs);
+ get_indent(editor, pos, TRUE);
+ lindent = g_strconcat(editor_get_eol_char(editor->document), indent, NULL);
+ whitespace = get_whitespace(editor_prefs.tab_width, editor->use_tabs);
/* remove the typed word, it will be added again by the used auto completion
* (not really necessary but this makes the auto completion more flexible,
@@ -1591,7 +1595,7 @@
pattern = utils_str_replace(pattern, "%ws%", whitespace);
/* replace any %template% wildcards */
- pattern = snippets_replace_wildcards(doc, pattern);
+ pattern = snippets_replace_wildcards(editor->document, pattern);
/* find the %cursor% pos (has to be done after all other operations) */
step = utils_strpos(pattern, "%cursor%");
@@ -1639,7 +1643,7 @@
if (doc == NULL)
return FALSE;
- sci = doc->sci;
+ sci = doc->editor->sci;
/* return if we are editing an existing line (chars on right of cursor) */
if (! editor_prefs.complete_snippets_whilst_editing && ! at_eol(sci, pos))
return FALSE;
@@ -1654,7 +1658,7 @@
if (! isspace(sci_get_char_at(sci, pos - 1))) /* pos points to the line end char so use pos -1 */
{
sci_start_undo_action(sci); /* needed because we insert a space separately from construct */
- result = snippets_complete_constructs(doc, pos, current_word);
+ result = snippets_complete_constructs(doc->editor, pos, current_word);
sci_end_undo_action(sci);
if (result)
SSM(sci, SCI_CANCEL, 0, 0); /* cancel any autocompletion list, etc */
@@ -1679,9 +1683,9 @@
}
-static void insert_closing_tag(GeanyDocument *doc, gint pos, gchar ch, const gchar *tag_name)
+static void insert_closing_tag(GeanyEditor *editor, gint pos, gchar ch, const gchar *tag_name)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
gchar *to_insert = NULL;
if (ch == '/')
@@ -1702,7 +1706,7 @@
{
SSM(sci, SCI_SETSEL, pos, pos);
if (utils_str_equal(tag_name, "table"))
- editor_auto_table(doc, pos);
+ auto_table(editor, pos);
}
sci_end_undo_action(sci);
g_free(to_insert);
@@ -1715,9 +1719,9 @@
* @param ch The character we are dealing with, currently only works with the '>' character
* @return True if handled, false otherwise
*/
-static gboolean handle_xml(GeanyDocument *doc, gchar ch)
+static gboolean handle_xml(GeanyEditor *editor, gchar ch)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
gint lexer = SSM(sci, SCI_GETLEXER, 0, 0);
gint pos, min;
gchar *str_found, sel[512];
@@ -1731,7 +1735,7 @@
pos = sci_get_current_position(sci);
/* return if we are in PHP but not in a string or outside of <? ?> tags */
- if (doc->file_type->id == GEANY_FILETYPES_PHP)
+ if (editor->document->file_type->id == GEANY_FILETYPES_PHP)
{
gint style = sci_get_style_at(sci, pos);
if (style != SCE_HPHP_SIMPLESTRING && style != SCE_HPHP_HSTRING &&
@@ -1774,7 +1778,7 @@
}
else if (NZV(str_found))
{
- insert_closing_tag(doc, pos, ch, str_found);
+ insert_closing_tag(editor, pos, ch, str_found);
result = TRUE;
}
g_free(str_found);
@@ -1782,15 +1786,15 @@
}
-static void editor_auto_table(GeanyDocument *doc, gint pos)
+static void auto_table(GeanyEditor *editor, gint pos)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
gchar *table;
gint indent_pos;
if (SSM(sci, SCI_GETLEXER, 0, 0) != SCLEX_HTML) return;
- get_indent(doc, pos, TRUE);
+ get_indent(editor, pos, TRUE);
indent_pos = sci_get_line_indent_position(sci, sci_get_line_from_position(sci, pos));
if ((pos - 7) != indent_pos) /* 7 == strlen("<table>") */
{
@@ -1829,9 +1833,9 @@
str_end = g_strdup_printf("%s%s", doc->file_type->comment_close, eol);
/* insert the comment strings */
- sci_insert_text(doc->sci, line_start, str_begin);
- line_len = sci_get_position_from_line(doc->sci, last_line + 2);
- sci_insert_text(doc->sci, line_len, str_end);
+ sci_insert_text(doc->editor->sci, line_start, str_begin);
+ line_len = sci_get_position_from_line(doc->editor->sci, last_line + 2);
+ sci_insert_text(doc->editor->sci, line_len, str_end);
g_free(str_begin);
g_free(str_end);
@@ -1849,28 +1853,28 @@
/* remove comment open chars */
pos = document_find_text(doc, doc->file_type->comment_open, 0, TRUE, FALSE, NULL);
- SSM(doc->sci, SCI_DELETEBACK, 0, 0);
+ SSM(doc->editor->sci, SCI_DELETEBACK, 0, 0);
/* check whether the line is empty and can be deleted */
- line = sci_get_line_from_position(doc->sci, pos);
- len = sci_get_line_length(doc->sci, line);
- linebuf = sci_get_line(doc->sci, line);
+ line = sci_get_line_from_position(doc->editor->sci, pos);
+ len = sci_get_line_length(doc->editor->sci, line);
+ linebuf = sci_get_line(doc->editor->sci, line);
x = 0;
while (linebuf[x] != '\0' && isspace(linebuf[x])) x++;
- if (x == len) SSM(doc->sci, SCI_LINEDELETE, 0, 0);
+ if (x == len) SSM(doc->editor->sci, SCI_LINEDELETE, 0, 0);
g_free(linebuf);
/* remove comment close chars */
pos = document_find_text(doc, doc->file_type->comment_close, 0, FALSE, FALSE, NULL);
- SSM(doc->sci, SCI_DELETEBACK, 0, 0);
+ SSM(doc->editor->sci, SCI_DELETEBACK, 0, 0);
/* check whether the line is empty and can be deleted */
- line = sci_get_line_from_position(doc->sci, pos);
- len = sci_get_line_length(doc->sci, line);
- linebuf = sci_get_line(doc->sci, line);
+ line = sci_get_line_from_position(doc->editor->sci, pos);
+ len = sci_get_line_length(doc->editor->sci, line);
+ linebuf = sci_get_line(doc->editor->sci, line);
x = 0;
while (linebuf[x] != '\0' && isspace(linebuf[x])) x++;
- if (x == len) SSM(doc->sci, SCI_LINEDELETE, 0, 0);
+ if (x == len) SSM(doc->editor->sci, SCI_LINEDELETE, 0, 0);
g_free(linebuf);
}
@@ -1894,29 +1898,29 @@
if (line < 0)
{ /* use selection or current line */
- sel_start = sci_get_selection_start(doc->sci);
- sel_end = sci_get_selection_end(doc->sci);
+ sel_start = sci_get_selection_start(doc->editor->sci);
+ sel_end = sci_get_selection_end(doc->editor->sci);
- first_line = sci_get_line_from_position(doc->sci, sel_start);
+ first_line = sci_get_line_from_position(doc->editor->sci, sel_start);
/* Find the last line with chars selected (not EOL char) */
- last_line = sci_get_line_from_position(doc->sci,
+ last_line = sci_get_line_from_position(doc->editor->sci,
sel_end - editor_get_eol_char_len(doc));
last_line = MAX(first_line, last_line);
}
else
{
first_line = last_line = line;
- sel_start = sel_end = sci_get_position_from_line(doc->sci, line);
+ sel_start = sel_end = sci_get_position_from_line(doc->editor->sci, line);
}
ft = doc->file_type;
/* detection of HTML vs PHP code, if non-PHP set filetype to XML */
- line_start = sci_get_position_from_line(doc->sci, first_line);
+ line_start = sci_get_position_from_line(doc->editor->sci, first_line);
if (ft->id == GEANY_FILETYPES_PHP)
{
- if (sci_get_style_at(doc->sci, line_start) < 118 ||
- sci_get_style_at(doc->sci, line_start) > 127)
+ if (sci_get_style_at(doc->editor->sci, line_start) < 118 ||
+ sci_get_style_at(doc->editor->sci, line_start) > 127)
ft = filetypes[GEANY_FILETYPES_XML];
}
@@ -1929,20 +1933,20 @@
if (co_len == 0)
return 0;
- SSM(doc->sci, SCI_BEGINUNDOACTION, 0, 0);
+ SSM(doc->editor->sci, SCI_BEGINUNDOACTION, 0, 0);
for (i = first_line; (i <= last_line) && (! break_loop); i++)
{
gint buf_len;
- line_start = sci_get_position_from_line(doc->sci, i);
- line_len = sci_get_line_length(doc->sci, i);
+ line_start = sci_get_position_from_line(doc->editor->sci, i);
+ line_len = sci_get_line_length(doc->editor->sci, i);
x = 0;
buf_len = MIN((gint)sizeof(sel) - 1, line_len - 1);
if (buf_len <= 0)
continue;
- sci_get_text_range(doc->sci, line_start, line_start + buf_len, sel);
+ sci_get_text_range(doc->editor->sci, line_start, line_start + buf_len, sel);
sel[buf_len] = '\0';
while (isspace(sel[x])) x++;
@@ -1971,15 +1975,15 @@
continue;
}
- SSM(doc->sci, SCI_SETSEL, line_start + x, line_start + x + co_len);
- sci_replace_sel(doc->sci, "");
+ SSM(doc->editor->sci, SCI_SETSEL, line_start + x, line_start + x + co_len);
+ sci_replace_sel(doc->editor->sci, "");
count++;
}
/* use multi line comment */
else
{
gint style_comment;
- gint lexer = SSM(doc->sci, SCI_GETLEXER, 0, 0);
+ gint lexer = SSM(doc->editor->sci, SCI_GETLEXER, 0, 0);
/* process only lines which are already comments */
switch (lexer)
@@ -1987,8 +1991,8 @@
case SCLEX_XML:
case SCLEX_HTML:
{
- if (sci_get_style_at(doc->sci, line_start) >= 118 &&
- sci_get_style_at(doc->sci, line_start) <= 127)
+ if (sci_get_style_at(doc->editor->sci, line_start) >= 118 &&
+ sci_get_style_at(doc->editor->sci, line_start) <= 127)
style_comment = SCE_HPHP_COMMENT;
else style_comment = SCE_H_COMMENT;
break;
@@ -1999,7 +2003,7 @@
case SCLEX_D: style_comment = SCE_D_COMMENT; break;
default: style_comment = SCE_C_COMMENT;
}
- if (sci_get_style_at(doc->sci, line_start + x) == style_comment)
+ if (sci_get_style_at(doc->editor->sci, line_start + x) == style_comment)
{
real_uncomment_multiline(doc);
count = 1;
@@ -2011,7 +2015,7 @@
}
}
}
- SSM(doc->sci, SCI_ENDUNDOACTION, 0, 0);
+ SSM(doc->editor->sci, SCI_ENDUNDOACTION, 0, 0);
/* restore selection if there is one
* but don't touch the selection if caller is editor_do_comment_toggle */
@@ -2019,14 +2023,14 @@
{
if (single_line)
{
- sci_set_selection_start(doc->sci, sel_start - co_len);
- sci_set_selection_end(doc->sci, sel_end - (count * co_len));
+ sci_set_selection_start(doc->editor->sci, sel_start - co_len);
+ sci_set_selection_end(doc->editor->sci, sel_end - (count * co_len));
}
else
{
gint eol_len = editor_get_eol_char_len(doc);
- sci_set_selection_start(doc->sci, sel_start - co_len - eol_len);
- sci_set_selection_end(doc->sci, sel_end - co_len - eol_len);
+ sci_set_selection_start(doc->editor->sci, sel_start - co_len - eol_len);
+ sci_set_selection_end(doc->editor->sci, sel_end - co_len - eol_len);
}
}
@@ -2050,24 +2054,24 @@
if (doc == NULL || doc->file_type == NULL)
return;
- sel_start = sci_get_selection_start(doc->sci);
- sel_end = sci_get_selection_end(doc->sci);
+ sel_start = sci_get_selection_start(doc->editor->sci);
+ sel_end = sci_get_selection_end(doc->editor->sci);
ft = doc->file_type;
- first_line = sci_get_line_from_position(doc->sci,
- sci_get_selection_start(doc->sci));
+ first_line = sci_get_line_from_position(doc->editor->sci,
+ sci_get_selection_start(doc->editor->sci));
/* Find the last line with chars selected (not EOL char) */
- last_line = sci_get_line_from_position(doc->sci,
- sci_get_selection_end(doc->sci) - editor_get_eol_char_len(doc));
+ last_line = sci_get_line_from_position(doc->editor->sci,
+ sci_get_selection_end(doc->editor->sci) - editor_get_eol_char_len(doc));
last_line = MAX(first_line, last_line);
/* detection of HTML vs PHP code, if non-PHP set filetype to XML */
- first_line_start = sci_get_position_from_line(doc->sci, first_line);
+ first_line_start = sci_get_position_from_line(doc->editor->sci, first_line);
if (ft->id == GEANY_FILETYPES_PHP)
{
- if (sci_get_style_at(doc->sci, first_line_start) < 118 ||
- sci_get_style_at(doc->sci, first_line_start) > 127)
+ if (sci_get_style_at(doc->editor->sci, first_line_start) < 118 ||
+ sci_get_style_at(doc->editor->sci, first_line_start) > 127)
ft = filetypes[GEANY_FILETYPES_XML];
}
@@ -2080,20 +2084,20 @@
if (co_len == 0)
return;
- SSM(doc->sci, SCI_BEGINUNDOACTION, 0, 0);
+ SSM(doc->editor->sci, SCI_BEGINUNDOACTION, 0, 0);
for (i = first_line; (i <= last_line) && (! break_loop); i++)
{
gint buf_len;
- line_start = sci_get_position_from_line(doc->sci, i);
- line_len = sci_get_line_length(doc->sci, i);
+ line_start = sci_get_position_from_line(doc->editor->sci, i);
+ line_len = sci_get_line_length(doc->editor->sci, i);
x = 0;
buf_len = MIN((gint)sizeof(sel) - 1, line_len - 1);
if (buf_len < 0)
continue;
- sci_get_text_range(doc->sci, line_start, line_start + buf_len, sel);
+ sci_get_text_range(doc->editor->sci, line_start, line_start + buf_len, sel);
sel[buf_len] = '\0';
while (isspace(sel[x])) x++;
@@ -2127,7 +2131,7 @@
else
{
gint style_comment;
- gint lexer = SSM(doc->sci, SCI_GETLEXER, 0, 0);
+ gint lexer = SSM(doc->editor->sci, SCI_GETLEXER, 0, 0);
/* skip lines which are already comments */
switch (lexer)
@@ -2135,8 +2139,8 @@
case SCLEX_XML:
case SCLEX_HTML:
{
- if (sci_get_style_at(doc->sci, line_start) >= 118 &&
- sci_get_style_at(doc->sci, line_start) <= 127)
+ if (sci_get_style_at(doc->editor->sci, line_start) >= 118 &&
+ sci_get_style_at(doc->editor->sci, line_start) <= 127)
style_comment = SCE_HPHP_COMMENT;
else style_comment = SCE_H_COMMENT;
break;
@@ -2149,7 +2153,7 @@
case SCLEX_PERL: style_comment = SCE_PL_POD; break;
default: style_comment = SCE_C_COMMENT;
}
- if (sci_get_style_at(doc->sci, line_start + x) == style_comment)
+ if (sci_get_style_at(doc->editor->sci, line_start + x) == style_comment)
{
real_uncomment_multiline(doc);
count_uncommented++;
@@ -2166,7 +2170,7 @@
}
}
- SSM(doc->sci, SCI_ENDUNDOACTION, 0, 0);
+ SSM(doc->editor->sci, SCI_ENDUNDOACTION, 0, 0);
co_len += tm_len;
@@ -2178,12 +2182,12 @@
gint a = (first_line_was_comment) ? - co_len : co_len;
/* don't modify sel_start when the selection starts within indentation */
- get_indent(doc, sel_start, TRUE);
+ get_indent(doc->editor, sel_start, TRUE);
if ((sel_start - first_line_start) <= (gint) strlen(indent))
a = 0;
- sci_set_selection_start(doc->sci, sel_start + a);
- sci_set_selection_end(doc->sci, sel_end +
+ sci_set_selection_start(doc->editor->sci, sel_start + a);
+ sci_set_selection_end(doc->editor->sci, sel_end +
(count_commented * co_len) - (count_uncommented * co_len));
}
else
@@ -2191,19 +2195,19 @@
gint eol_len = editor_get_eol_char_len(doc);
if (count_uncommented > 0)
{
- sci_set_selection_start(doc->sci, sel_start - co_len - eol_len);
- sci_set_selection_end(doc->sci, sel_end - co_len - eol_len);
+ sci_set_selection_start(doc->editor->sci, sel_start - co_len - eol_len);
+ sci_set_selection_end(doc->editor->sci, sel_end - co_len - eol_len);
}
else
{
- sci_set_selection_start(doc->sci, sel_start + co_len + eol_len);
- sci_set_selection_end(doc->sci, sel_end + co_len + eol_len);
+ sci_set_selection_start(doc->editor->sci, sel_start + co_len + eol_len);
+ sci_set_selection_end(doc->editor->sci, sel_end + co_len + eol_len);
}
}
}
else if (count_uncommented > 0)
{
- sci_set_current_position(doc->sci, sel_start - co_len, TRUE);
+ sci_set_current_position(doc->editor->sci, sel_start - co_len, TRUE);
}
}
@@ -2223,29 +2227,29 @@
if (line < 0)
{ /* use selection or current line */
- sel_start = sci_get_selection_start(doc->sci);
- sel_end = sci_get_selection_end(doc->sci);
+ sel_start = sci_get_selection_start(doc->editor->sci);
+ sel_end = sci_get_selection_end(doc->editor->sci);
- first_line = sci_get_line_from_position(doc->sci, sel_start);
+ first_line = sci_get_line_from_position(doc->editor->sci, sel_start);
/* Find the last line with chars selected (not EOL char) */
- last_line = sci_get_line_from_position(doc->sci,
+ last_line = sci_get_line_from_position(doc->editor->sci,
sel_end - editor_get_eol_char_len(doc));
last_line = MAX(first_line, last_line);
}
else
{
first_line = last_line = line;
- sel_start = sel_end = sci_get_position_from_line(doc->sci, line);
+ sel_start = sel_end = sci_get_position_from_line(doc->editor->sci, line);
}
ft = doc->file_type;
/* detection of HTML vs PHP code, if non-PHP set filetype to XML */
- line_start = sci_get_position_from_line(doc->sci, first_line);
+ line_start = sci_get_position_from_line(doc->editor->sci, first_line);
if (ft->id == GEANY_FILETYPES_PHP)
{
- if (sci_get_style_at(doc->sci, line_start) < 118 ||
- sci_get_style_at(doc->sci, line_start) > 127)
+ if (sci_get_style_at(doc->editor->sci, line_start) < 118 ||
+ sci_get_style_at(doc->editor->sci, line_start) > 127)
ft = filetypes[GEANY_FILETYPES_XML];
}
@@ -2258,20 +2262,20 @@
if (co_len == 0)
return;
- SSM(doc->sci, SCI_BEGINUNDOACTION, 0, 0);
+ SSM(doc->editor->sci, SCI_BEGINUNDOACTION, 0, 0);
for (i = first_line; (i <= last_line) && (! break_loop); i++)
{
gint buf_len;
- line_start = sci_get_position_from_line(doc->sci, i);
- line_len = sci_get_line_length(doc->sci, i);
+ line_start = sci_get_position_from_line(doc->editor->sci, i);
+ line_len = sci_get_line_length(doc->editor->sci, i);
x = 0;
buf_len = MIN((gint)sizeof(sel) - 1, line_len - 1);
if (buf_len < 0)
continue;
- sci_get_text_range(doc->sci, line_start, line_start + buf_len, sel);
+ sci_get_text_range(doc->editor->sci, line_start, line_start + buf_len, sel);
sel[buf_len] = '\0';
while (isspace(sel[x])) x++;
@@ -2291,17 +2295,17 @@
if (toggle)
{
gchar *text = g_strconcat(co, GEANY_TOGGLE_MARK, NULL);
- sci_insert_text(doc->sci, start, text);
+ sci_insert_text(doc->editor->sci, start, text);
g_free(text);
}
else
- sci_insert_text(doc->sci, start, co);
+ sci_insert_text(doc->editor->sci, start, co);
}
/* use multi line comment */
else
{
gint style_comment;
- gint lexer = SSM(doc->sci, SCI_GETLEXER, 0, 0);
+ gint lexer = SSM(doc->editor->sci, SCI_GETLEXER, 0, 0);
/* skip lines which are already comments */
switch (lexer)
@@ -2309,8 +2313,8 @@
case SCLEX_XML:
case SCLEX_HTML:
{
- if (sci_get_style_at(doc->sci, line_start) >= 118 &&
- sci_get_style_at(doc->sci, line_start) <= 127)
+ if (sci_get_style_at(doc->editor->sci, line_start) >= 118 &&
+ sci_get_style_at(doc->editor->sci, line_start) <= 127)
style_comment = SCE_HPHP_COMMENT;
else style_comment = SCE_H_COMMENT;
break;
@@ -2321,7 +2325,7 @@
case SCLEX_D: style_comment = SCE_D_COMMENT; break;
default: style_comment = SCE_C_COMMENT;
}
- if (sci_get_style_at(doc->sci, line_start + x) == style_comment) continue;
+ if (sci_get_style_at(doc->editor->sci, line_start + x) == style_comment) continue;
real_comment_multiline(doc, line_start, last_line);
@@ -2331,7 +2335,7 @@
}
}
}
- SSM(doc->sci, SCI_ENDUNDOACTION, 0, 0);
+ SSM(doc->editor->sci, SCI_ENDUNDOACTION, 0, 0);
/* restore selection if there is one
* but don't touch the selection if caller is editor_do_comment_toggle */
@@ -2339,14 +2343,14 @@
{
if (single_line)
{
- sci_set_selection_start(doc->sci, sel_start + co_len);
- sci_set_selection_end(doc->sci, sel_end + ((i - first_line) * co_len));
+ sci_set_selection_start(doc->editor->sci, sel_start + co_len);
+ sci_set_selection_end(doc->editor->sci, sel_end + ((i - first_line) * co_len));
}
else
{
gint eol_len = editor_get_eol_char_len(doc);
- sci_set_selection_start(doc->sci, sel_start + co_len + eol_len);
- sci_set_selection_end(doc->sci, sel_end + co_len + eol_len);
+ sci_set_selection_start(doc->editor->sci, sel_start + co_len + eol_len);
+ sci_set_selection_end(doc->editor->sci, sel_end + co_len + eol_len);
}
}
}
@@ -2386,10 +2390,11 @@
}
-static void auto_multiline(GeanyDocument *doc, gint pos)
+static void auto_multiline(GeanyEditor *editor, gint pos)
{
- ScintillaObject *sci = doc->sci;
- gint style = SSM(sci, SCI_GETSTYLEAT, pos - 1 - editor_get_eol_char_len(doc), 0);
+ ScintillaObject *sci = editor->sci;
+ gint eol_len = editor_get_eol_char_len(editor->document);
+ gint style = SSM(sci, SCI_GETSTYLEAT, pos - 1 - eol_len, 0);
gint lexer = SSM(sci, SCI_GETLEXER, 0, 0);
if ((lexer == SCLEX_CPP && (style == SCE_C_COMMENT || style == SCE_C_COMMENTDOC)) ||
@@ -2667,22 +2672,25 @@
gint line;
gint pos;
gboolean have_multiline_comment = FALSE;
+ GeanyEditor *editor;
if (doc == NULL || doc->file_type == NULL || doc->file_type->comment_open == NULL)
return;
+ editor = doc->editor;
if (doc->file_type->comment_close != NULL && strlen(doc->file_type->comment_close) > 0)
have_multiline_comment = TRUE;
/* insert three lines one line above of the current position */
- line = sci_get_line_from_position(doc->sci, editor_info.click_pos);
- pos = sci_get_position_from_line(doc->sci, line);
+ line = sci_get_line_from_position(editor->sci, editor_info.click_pos);
+ pos = sci_get_position_from_line(editor->sci, line);
/* use the indent on the current line but only when comment indentation is used
* and we don't have multi line comment characters */
- if (doc->auto_indent && ! have_multiline_comment && doc->file_type->comment_use_indent)
+ if (editor->auto_indent &&
+ ! have_multiline_comment && doc->file_type->comment_use_indent)
{
- get_indent(doc, editor_info.click_pos, TRUE);
+ get_indent(editor, editor_info.click_pos, TRUE);
text = g_strdup_printf("%s\n%s\n%s\n", indent, indent, indent);
text_len = strlen(text);
}
@@ -2691,13 +2699,13 @@
text = g_strdup("\n\n\n");
text_len = 3;
}
- sci_insert_text(doc->sci, pos, text);
+ sci_insert_text(editor->sci, pos, text);
g_free(text);
/* select the inserted lines for commenting */
- sci_set_selection_start(doc->sci, pos);
- sci_set_selection_end(doc->sci, pos + text_len);
+ sci_set_selection_start(editor->sci, pos);
+ sci_set_selection_end(editor->sci, pos + text_len);
editor_do_comment(doc, -1, TRUE, FALSE);
@@ -2710,9 +2718,9 @@
else
pos += strlen(indent);
- sci_set_current_position(doc->sci, pos, TRUE);
+ sci_set_current_position(editor->sci, pos, TRUE);
/* reset the selection */
- sci_set_anchor(doc->sci, pos);
+ sci_set_anchor(editor->sci, pos);
}
@@ -2742,11 +2750,11 @@
}
-void editor_insert_alternative_whitespace(GeanyDocument *doc)
+void editor_insert_alternative_whitespace(GeanyEditor *editor)
{
- /* creates and inserts one tabulator sign or whitespace of the amount of the tab width */
- gchar *text = get_whitespace(editor_prefs.tab_width, ! doc->use_tabs);
- sci_add_text(doc->sci, text);
+ /* creates and inserts one tab or whitespace of the amount of the tab width */
+ gchar *text = get_whitespace(editor_prefs.tab_width, ! editor->use_tabs);
+ sci_add_text(editor->sci, text);
g_free(text);
}
@@ -2887,18 +2895,18 @@
{
/* skip the first line or if the indentation of the previous and current line are equal */
if (i == 0 ||
- SSM(doc->sci, SCI_GETLINEINDENTATION, i - 1, 0) ==
- SSM(doc->sci, SCI_GETLINEINDENTATION, i, 0))
+ SSM(doc->editor->sci, SCI_GETLINEINDENTATION, i - 1, 0) ==
+ SSM(doc->editor->sci, SCI_GETLINEINDENTATION, i, 0))
continue;
- sel_start = SSM(doc->sci, SCI_POSITIONFROMLINE, i, 0);
- sel_end = SSM(doc->sci, SCI_GETLINEINDENTPOSITION, i, 0);
+ sel_start = SSM(doc->editor->sci, SCI_POSITIONFROMLINE, i, 0);
+ sel_end = SSM(doc->editor->sci, SCI_GETLINEINDENTPOSITION, i, 0);
if (sel_start < sel_end)
{
- SSM(doc->sci, SCI_SETSEL, sel_start, sel_end);
- sci_replace_sel(doc->sci, "");
+ SSM(doc->editor->sci, SCI_SETSEL, sel_start, sel_end);
+ sci_replace_sel(doc->editor->sci, "");
}
- sci_insert_text(doc->sci, sel_start, indent);
+ sci_insert_text(doc->editor->sci, sel_start, indent);
}
}
@@ -2912,7 +2920,7 @@
g_return_if_fail(doc != NULL);
- sci = doc->sci;
+ sci = doc->editor->sci;
first_sel_start = sci_get_selection_start(sci);
first_sel_end = sci_get_selection_end(sci);
@@ -2929,7 +2937,7 @@
/* get previous line and use it for get_indent to use that line
* (otherwise it would fail on a line only containing "{" in advanced indentation mode) */
- get_indent(doc, sci_get_position_from_line(sci, first_line - 1), TRUE);
+ get_indent(doc->editor, sci_get_position_from_line(sci, first_line - 1), TRUE);
smart_line_indentation(doc, first_line, last_line);
@@ -2960,33 +2968,33 @@
g_return_if_fail(doc != NULL);
- sel_start = sci_get_selection_start(doc->sci);
- sel_end = sci_get_selection_end(doc->sci);
+ sel_start = sci_get_selection_start(doc->editor->sci);
+ sel_end = sci_get_selection_end(doc->editor->sci);
- first_line = sci_get_line_from_position(doc->sci, sel_start);
+ first_line = sci_get_line_from_position(doc->editor->sci, sel_start);
/* Find the last line with chars selected (not EOL char) */
- last_line = sci_get_line_from_position(doc->sci, sel_end - editor_get_eol_char_len(doc));
+ last_line = sci_get_line_from_position(doc->editor->sci, sel_end - editor_get_eol_char_len(doc));
last_line = MAX(first_line, last_line);
if (pos == -1)
pos = sel_start;
- SSM(doc->sci, SCI_BEGINUNDOACTION, 0, 0);
+ SSM(doc->editor->sci, SCI_BEGINUNDOACTION, 0, 0);
for (i = first_line; i <= last_line; i++)
{
- indentation_end = SSM(doc->sci, SCI_GETLINEINDENTPOSITION, i, 0);
+ indentation_end = SSM(doc->editor->sci, SCI_GETLINEINDENTPOSITION, i, 0);
if (decrease)
{
- line_start = SSM(doc->sci, SCI_POSITIONFROMLINE, i, 0);
+ line_start = SSM(doc->editor->sci, SCI_POSITIONFROMLINE, i, 0);
/* searching backwards for a space to remove */
- while (sci_get_char_at(doc->sci, indentation_end) != ' ' && indentation_end > line_start)
+ while (sci_get_char_at(doc->editor->sci, indentation_end) != ' ' && indentation_end > line_start)
indentation_end--;
- if (sci_get_char_at(doc->sci, indentation_end) == ' ')
+ if (sci_get_char_at(doc->editor->sci, indentation_end) == ' ')
{
- SSM(doc->sci, SCI_SETSEL, indentation_end, indentation_end + 1);
- sci_replace_sel(doc->sci, "");
+ SSM(doc->editor->sci, SCI_SETSEL, indentation_end, indentation_end + 1);
+ sci_replace_sel(doc->editor->sci, "");
count--;
if (i == first_line)
first_line_offset = -1;
@@ -2994,7 +3002,7 @@
}
else
{
- sci_insert_text(doc->sci, indentation_end, " ");
+ sci_insert_text(doc->editor->sci, indentation_end, " ");
count++;
if (i == first_line)
first_line_offset = 1;
@@ -3007,15 +3015,15 @@
gint start = sel_start + first_line_offset;
if (first_line_offset < 0)
start = MAX(sel_start + first_line_offset,
- SSM(doc->sci, SCI_POSITIONFROMLINE, first_line, 0));
+ SSM(doc->editor->sci, SCI_POSITIONFROMLINE, first_line, 0));
- sci_set_selection_start(doc->sci, start);
- sci_set_selection_end(doc->sci, sel_end + count);
+ sci_set_selection_start(doc->editor->sci, start);
+ sci_set_selection_end(doc->editor->sci, sel_end + count);
}
else
- sci_set_current_position(doc->sci, pos + count, FALSE);
+ sci_set_current_position(doc->editor->sci, pos + count, FALSE);
- SSM(doc->sci, SCI_ENDUNDOACTION, 0, 0);
+ SSM(doc->editor->sci, SCI_ENDUNDOACTION, 0, 0);
}
@@ -3035,18 +3043,18 @@
if (doc == NULL)
return NULL;
- if (sci_get_lines_selected(doc->sci) == 1)
+ if (sci_get_lines_selected(doc->editor->sci) == 1)
{
- gint len = sci_get_selected_text_length(doc->sci);
+ gint len = sci_get_selected_text_length(doc->editor->sci);
s = g_malloc(len + 1);
- sci_get_selected_text(doc->sci, s);
+ sci_get_selected_text(doc->editor->sci, s);
}
- else if (sci_get_lines_selected(doc->sci) == 0 && use_current_word)
+ else if (sci_get_lines_selected(doc->editor->sci) == 0 && use_current_word)
{ /* use the word at current cursor position */
gchar word[GEANY_MAX_WORD_LENGTH];
- editor_find_current_word(doc->sci, -1, word, sizeof(word), wordchars);
+ editor_find_current_word(doc->editor->sci, -1, word, sizeof(word), wordchars);
if (word[0] != '\0')
s = g_strdup(word);
}
@@ -3076,70 +3084,70 @@
/* If the current line is outside the current view window, scroll the line
* so it appears at percent_of_view. */
-void editor_display_current_line(GeanyDocument *doc, gfloat percent_of_view)
+void editor_display_current_line(GeanyEditor *editor, gfloat percent_of_view)
{
- ScintillaObject *sci = doc->sci;
+ ScintillaObject *sci = editor->sci;
gint line = sci_get_current_line(sci);
/* unfold maybe folded results */
- sci_ensure_line_is_visible(doc->sci, line);
+ sci_ensure_line_is_visible(editor->sci, line);
/* scroll the line if it's off screen */
if (! editor_line_in_view(sci, line))
- doc->scroll_percent = percent_of_view;
+ editor->scroll_percent = percent_of_view;
}
/**
- * Deletes all currently set indicators in the @a document.
+ * Deletes all currently set indicators in the @a editor window.
* Error indicators (red squiggly underlines) and usual line markers are removed.
*
- * @param doc The document to operate on.
+ * @param editor The editor to operate on.
**/
-void editor_clear_indicators(GeanyDocument *doc)
+void editor_clear_indicators(GeanyEditor *editor)
{
glong last_pos;
- g_return_if_fail(doc != NULL);
+ g_return_if_fail(editor != NULL);
- last_pos = sci_get_length(doc->sci);
+ last_pos = sci_get_length(editor->sci);
if (last_pos > 0)
{
- sci_start_styling(doc->sci, 0, INDIC2_MASK);
- sci_set_styling(doc->sci, last_pos, 0);
+ sci_start_styling(editor->sci, 0, INDIC2_MASK);
+ sci_set_styling(editor->sci, last_pos, 0);
}
- sci_marker_delete_all(doc->sci, 0); /* remove the yellow error line marker */
+ sci_marker_delete_all(editor->sci, 0); /* remove the yellow error line marker */
}
/**
- * This is a convenience function for document_set_indicator(). It sets an error indicator
+ * This is a convenience function for editor_set_indicator(). It sets an error indicator
* (red squiggly underline) on the whole given line.
* Whitespace at the start and the end of the line is not marked.
*
- * @param doc The document to operate on.
+ * @param editor The editor to operate on.
* @param line The line number which should be marked.
**/
-void editor_set_indicator_on_line(GeanyDocument *doc, gint line)
+void editor_set_indicator_on_line(GeanyEditor *editor, gint line)
{
gint start, end;
guint i = 0, len;
gchar *linebuf;
- if (doc == NULL)
+ if (editor == NULL)
return;
- start = sci_get_position_from_line(doc->sci, line);
- end = sci_get_position_from_line(doc->sci, line + 1);
+ start = sci_get_position_from_line(editor->sci, line);
+ end = sci_get_position_from_line(editor->sci, line + 1);
/* skip blank lines */
if ((start + 1) == end ||
- sci_get_line_length(doc->sci, line) == editor_get_eol_char_len(doc))
+ sci_get_line_length(editor->sci, line) == editor_get_eol_char_len(editor->document))
return;
/* don't set the indicator on whitespace */
len = end - start;
- linebuf = sci_get_line(doc->sci, line);
+ linebuf = sci_get_line(editor->sci, line);
while (isspace(linebuf[i])) i++;
while (len > 1 && len > i && isspace(linebuf[len-1]))
@@ -3149,7 +3157,7 @@
}
g_free(linebuf);
- editor_set_indicator(doc, start + i, end);
+ editor_set_indicator(editor, start + i, end);
}
@@ -3158,23 +3166,23 @@
* No error checking or whitespace removal is performed, this should be done by the calling
* function if necessary.
*
- * @param doc The document to operate on.
+ * @param editor The editor to operate on.
* @param start The starting position for the marker.
* @param end The ending position for the marker.
**/
-void editor_set_indicator(GeanyDocument *doc, gint start, gint end)
+void editor_set_indicator(GeanyEditor *editor, gint start, gint end)
{
gint current_mask;
- if (doc == NULL || start >= end)
+ if (editor == NULL || start >= end)
return;
- current_mask = sci_get_style_at(doc->sci, start);
+ current_mask = sci_get_style_at(editor->sci, start);
current_mask &= INDICS_MASK;
current_mask |= INDIC2_MASK;
- sci_start_styling(doc->sci, start, INDIC2_MASK);
- sci_set_styling(doc->sci, end - start, current_mask);
+ sci_start_styling(editor->sci, start, INDIC2_MASK);
+ sci_set_styling(editor->sci, end - start, current_mask);
}
@@ -3184,26 +3192,26 @@
{
g_return_if_fail(doc != NULL);
- if (sci_can_copy(doc->sci))
+ if (sci_can_copy(doc->editor->sci))
{
- gint start = sci_get_selection_start(doc->sci);
+ gint start = sci_get_selection_start(doc->editor->sci);
const gchar *replacement = colour;
- if (sci_get_char_at(doc->sci, start) == '0' &&
- sci_get_char_at(doc->sci, start + 1) == 'x')
+ if (sci_get_char_at(doc->editor->sci, start) == '0' &&
+ sci_get_char_at(doc->editor->sci, start + 1) == 'x')
{
- sci_set_selection_start(doc->sci, start + 2);
- sci_set_selection_end(doc->sci, start + 8);
+ sci_set_selection_start(doc->editor->sci, start + 2);
+ sci_set_selection_end(doc->editor->sci, start + 8);
replacement++; /* skip the leading "0x" */
}
- else if (sci_get_char_at(doc->sci, start - 1) == '#')
+ else if (sci_get_char_at(doc->editor->sci, start - 1) == '#')
{ /* double clicking something like #00ffff may only select 00ffff because of wordchars */
replacement++; /* so skip the '#' to only replace the colour value */
}
- sci_replace_sel(doc->sci, replacement);
+ sci_replace_sel(doc->editor->sci, replacement);
}
else
- sci_add_text(doc->sci, colour);
+ sci_add_text(doc->editor->sci, colour);
}
@@ -3212,7 +3220,7 @@
if (doc == NULL)
return "";
- switch (sci_get_eol_mode(doc->sci))
+ switch (sci_get_eol_mode(doc->editor->sci))
{
case SC_EOL_CRLF: return _("Win (CRLF)"); break;
case SC_EOL_CR: return _("Mac (CR)"); break;
@@ -3227,7 +3235,7 @@
if (doc == NULL)
return 0;
- switch (sci_get_eol_mode(doc->sci))
+ switch (sci_get_eol_mode(doc->editor->sci))
{
case SC_EOL_CRLF: return 2; break;
default: return 1; break;
@@ -3241,7 +3249,7 @@
if (doc == NULL)
return "";
- switch (sci_get_eol_mode(doc->sci))
+ switch (sci_get_eol_mode(doc->editor->sci))
{
case SC_EOL_CRLF: return "\r\n"; break;
case SC_EOL_CR: return "\r"; break;
@@ -3256,19 +3264,19 @@
if (doc == NULL || ! editor_prefs.folding) return;
- lines = sci_get_line_count(doc->sci);
- first = sci_get_first_visible_line(doc->sci);
+ lines = sci_get_line_count(doc->editor->sci);
+ first = sci_get_first_visible_line(doc->editor->sci);
for (i = 0; i < lines; i++)
{
- gint level = sci_get_fold_level(doc->sci, i);
+ gint level = sci_get_fold_level(doc->editor->sci, i);
if (level & SC_FOLDLEVELHEADERFLAG)
{
- if (sci_get_fold_expanded(doc->sci, i) == want_fold)
- sci_toggle_fold(doc->sci, i);
+ if (sci_get_fold_expanded(doc->editor->sci, i) == want_fold)
+ sci_toggle_fold(doc->editor->sci, i);
}
}
- editor_scroll_to_line(doc->sci, first, 0.0F);
+ editor_scroll_to_line(doc->editor->sci, first, 0.0F);
}
@@ -3294,31 +3302,31 @@
if (doc == NULL)
return;
- sci_start_undo_action(doc->sci);
- tab_len = sci_get_tab_width(doc->sci);
+ sci_start_undo_action(doc->editor->sci);
+ tab_len = sci_get_tab_width(doc->editor->sci);
ttf.chrg.cpMin = 0;
- ttf.chrg.cpMax = sci_get_length(doc->sci);
+ ttf.chrg.cpMax = sci_get_length(doc->editor->sci);
ttf.lpstrText = (gchar*) "\t";
while (TRUE)
{
- search_pos = sci_find_text(doc->sci, SCFIND_MATCHCASE, &ttf);
+ search_pos = sci_find_text(doc->editor->sci, SCFIND_MATCHCASE, &ttf);
if (search_pos == -1)
break;
- pos_in_line = sci_get_col_from_position(doc->sci,search_pos);
+ pos_in_line = sci_get_col_from_position(doc->editor->sci,search_pos);
current_tab_true_length = tab_len - (pos_in_line % tab_len);
tab_str = g_strnfill(current_tab_true_length, ' ');
- sci_target_start(doc->sci, search_pos);
- sci_target_end(doc->sci, search_pos + 1);
- sci_target_replace(doc->sci, tab_str, FALSE);
+ sci_target_start(doc->editor->sci, search_pos);
+ sci_target_end(doc->editor->sci, search_pos + 1);
+ sci_target_replace(doc->editor->sci, tab_str, FALSE);
/* next search starts after replacement */
ttf.chrg.cpMin = search_pos + current_tab_true_length - 1;
/* update end of range now text has changed */
ttf.chrg.cpMax += current_tab_true_length - 1;
g_free(tab_str);
}
- sci_end_undo_action(doc->sci);
+ sci_end_undo_action(doc->editor->sci);
}
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list