SF.net SVN: geany: [2588] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Thu May 15 13:43:29 UTC 2008
Revision: 2588
http://geany.svn.sourceforge.net/geany/?rev=2588&view=rev
Author: eht16
Date: 2008-05-15 06:43:29 -0700 (Thu, 15 May 2008)
Log Message:
-----------
Move several editing related functions from document.c to editor.c.
Fix two compiler warnings about non-literal format strings.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/callbacks.c
trunk/src/document.c
trunk/src/document.h
trunk/src/editor.c
trunk/src/editor.h
trunk/src/keybindings.c
trunk/src/keyfile.c
trunk/src/main.c
trunk/src/prefs.c
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-05-14 17:58:56 UTC (rev 2587)
+++ trunk/ChangeLog 2008-05-15 13:43:29 UTC (rev 2588)
@@ -1,3 +1,10 @@
+2008-05-15 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/*.c src/*.h:
+ Move several editing related functions from document.c to editor.c.
+ Fix two compiler warnings about non-literal format strings.
+
+
2008-05-14 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* geany.glade, src/document.c, src/document.h, src/editor.c,
Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/callbacks.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -814,7 +814,7 @@
{
gint idx = document_get_cur_idx();
- document_replace_tabs(idx);
+ editor_replace_tabs(idx);
}
@@ -971,7 +971,7 @@
{
gint idx = document_get_cur_idx();
if (! DOC_IDX_VALID(idx)) return;
- document_set_line_wrapping(idx, ! doc_list[idx].line_wrapping);
+ editor_set_line_wrapping(idx, ! doc_list[idx].line_wrapping);
}
}
@@ -1496,7 +1496,7 @@
{
gint idx = document_get_cur_idx();
- document_fold_all(idx);
+ editor_fold_all(idx);
}
@@ -1506,7 +1506,7 @@
{
gint idx = document_get_cur_idx();
- document_unfold_all(idx);
+ editor_unfold_all(idx);
}
@@ -2046,7 +2046,7 @@
{
gint idx = document_get_cur_idx();
- document_set_use_tabs(idx, TRUE);
+ editor_set_use_tabs(idx, TRUE);
ui_update_statusbar(idx, -1);
}
@@ -2057,7 +2057,7 @@
{
gint idx = document_get_cur_idx();
- document_set_use_tabs(idx, FALSE);
+ editor_set_use_tabs(idx, FALSE);
ui_update_statusbar(idx, -1);
}
@@ -2068,7 +2068,7 @@
{
gint idx = document_get_cur_idx();
- document_strip_trailing_spaces(idx);
+ editor_strip_trailing_spaces(idx);
}
Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/document.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -282,30 +282,6 @@
}
-void document_set_use_tabs(gint idx, gboolean use_tabs)
-{
- document *doc = &doc_list[idx];
-
- g_return_if_fail(DOC_IDX_VALID(idx));
-
- doc->use_tabs = use_tabs;
- sci_set_use_tabs(doc->sci, use_tabs);
- /* remove indent spaces on backspace, if using spaces to indent */
- SSM(doc->sci, SCI_SETBACKSPACEUNINDENTS, ! use_tabs, 0);
-}
-
-
-void document_set_line_wrapping(gint idx, gboolean wrap)
-{
- document *doc = &doc_list[idx];
-
- g_return_if_fail(DOC_IDX_VALID(idx));
-
- doc->line_wrapping = wrap;
- sci_set_lines_wrapped(doc->sci, wrap);
-}
-
-
/* Apply just the prefs that can change in the Preferences dialog */
void document_apply_update_prefs(gint idx)
{
@@ -483,7 +459,7 @@
pfd = pango_font_description_from_string(prefs.editor_font);
fname = g_strdup_printf("!%s", pango_font_description_get_family(pfd));
- document_set_font(new_idx, fname, pango_font_description_get_size(pfd) / PANGO_SCALE);
+ editor_set_font(new_idx, fname, pango_font_description_get_size(pfd) / PANGO_SCALE);
pango_font_description_free(pfd);
g_free(fname);
@@ -613,7 +589,7 @@
if (text != NULL)
sci_convert_eols(doc_list[idx].sci, prefs.default_eol_character);
- document_set_use_tabs(idx, editor_prefs.use_tabs);
+ editor_set_use_tabs(idx, editor_prefs.use_tabs);
sci_set_undo_collection(doc_list[idx].sci, TRUE);
sci_empty_undo_buffer(doc_list[idx].sci);
@@ -863,9 +839,9 @@
tmp_enc_idx == GEANY_ENCODING_UTF_7 || /* filter out UTF-7/8 and None where no NULL bytes */
tmp_enc_idx == GEANY_ENCODING_NONE)) /* are allowed */
{
- gchar *warn_msg = _("The file \"%s\" could not be opened properly and has been truncated. "
- "This can occur if the file contains a NULL byte. "
- "Be aware that saving it can cause data loss.\nThe file was set to read-only.");
+#define warn_msg _("The file \"%s\" could not be opened properly and has been truncated. " \
+ "This can occur if the file contains a NULL byte. " \
+ "Be aware that saving it can cause data loss.\nThe file was set to read-only.")
if (main_status.main_window_realized)
dialogs_show_msgbox(GTK_MESSAGE_WARNING, warn_msg, utf8_filename);
@@ -1061,10 +1037,10 @@
g_free(filedata.data);
if (reload)
- document_set_use_tabs(idx, doc_list[idx].use_tabs); /* resetup sci */
+ editor_set_use_tabs(idx, doc_list[idx].use_tabs); /* resetup sci */
else
if (! editor_prefs.detect_tab_mode)
- document_set_use_tabs(idx, editor_prefs.use_tabs);
+ editor_set_use_tabs(idx, editor_prefs.use_tabs);
else
{ /* detect & set tabs/spaces */
gboolean use_tabs = detect_use_tabs(doc_list[idx].sci);
@@ -1072,7 +1048,7 @@
if (use_tabs != editor_prefs.use_tabs)
ui_set_statusbar(TRUE, _("Setting %s indentation mode."),
(use_tabs) ? _("Tabs") : _("Spaces"));
- document_set_use_tabs(idx, use_tabs);
+ editor_set_use_tabs(idx, use_tabs);
}
sci_set_undo_collection(doc_list[idx].sci, TRUE);
@@ -1437,11 +1413,11 @@
}
/* replaces tabs by spaces */
- if (prefs.replace_tabs) document_replace_tabs(idx);
+ if (prefs.replace_tabs) editor_replace_tabs(idx);
/* strip trailing spaces */
- if (prefs.strip_trailing_spaces) document_strip_trailing_spaces(idx);
+ if (prefs.strip_trailing_spaces) editor_strip_trailing_spaces(idx);
/* ensure the file has a newline at the end */
- if (prefs.final_new_line) document_ensure_final_newline(idx);
+ if (prefs.final_new_line) editor_ensure_final_newline(idx);
len = sci_get_length(doc_list[idx].sci) + 1;
if (doc_list[idx].has_bom && encodings_is_unicode_charset(doc_list[idx].encoding))
@@ -1859,7 +1835,7 @@
first_line = sci_get_line_from_position(doc_list[idx].sci, selection_start);
/* Find the last line with chars selected (not EOL char) */
last_line = sci_get_line_from_position(doc_list[idx].sci,
- selection_end - utils_get_eol_char_len(idx));
+ selection_end - editor_get_eol_char_len(idx));
last_line = MAX(first_line, last_line);
for (line = first_line; line < (first_line + selected_lines); line++)
{
@@ -1945,21 +1921,6 @@
}
-void document_set_font(gint idx, const gchar *font_name, gint size)
-{
- gint style;
-
- for (style = 0; style <= 127; style++)
- sci_set_font(doc_list[idx].sci, style, font_name, size);
- /* line number and braces */
- sci_set_font(doc_list[idx].sci, STYLE_LINENUMBER, font_name, size);
- sci_set_font(doc_list[idx].sci, STYLE_BRACELIGHT, font_name, size);
- sci_set_font(doc_list[idx].sci, STYLE_BRACEBAD, font_name, size);
- /* zoom to 100% to prevent confusion */
- sci_zoom_off(doc_list[idx].sci);
-}
-
-
void document_update_tag_list(gint idx, gboolean update)
{
/* We must call treeviews_update_tag_list() before returning,
@@ -2144,152 +2105,6 @@
}
-gchar *document_get_eol_mode(gint idx)
-{
- if (idx == -1) return '\0';
-
- switch (sci_get_eol_mode(doc_list[idx].sci))
- {
- case SC_EOL_CRLF: return _("Win (CRLF)"); break;
- case SC_EOL_CR: return _("Mac (CR)"); break;
- case SC_EOL_LF:
- default: return _("Unix (LF)"); break;
- }
-}
-
-
-static void fold_all(gint idx, gboolean want_fold)
-{
- gint lines, first, i;
-
- if (! DOC_IDX_VALID(idx) || ! editor_prefs.folding) return;
-
- lines = sci_get_line_count(doc_list[idx].sci);
- first = sci_get_first_visible_line(doc_list[idx].sci);
-
- for (i = 0; i < lines; i++)
- {
- gint level = sci_get_fold_level(doc_list[idx].sci, i);
- if (level & SC_FOLDLEVELHEADERFLAG)
- {
- if (sci_get_fold_expanded(doc_list[idx].sci, i) == want_fold)
- sci_toggle_fold(doc_list[idx].sci, i);
- }
- }
- editor_scroll_to_line(doc_list[idx].sci, first, 0.0F);
-}
-
-
-void document_unfold_all(gint idx)
-{
- fold_all(idx, FALSE);
-}
-
-
-void document_fold_all(gint idx)
-{
- fold_all(idx, TRUE);
-}
-
-
-void document_replace_tabs(gint idx)
-{
- gint search_pos, pos_in_line, current_tab_true_length;
- gint tab_len;
- gchar *tab_str;
- struct TextToFind ttf;
-
- if (! DOC_IDX_VALID(idx)) return;
-
- sci_start_undo_action(doc_list[idx].sci);
- tab_len = sci_get_tab_width(doc_list[idx].sci);
- ttf.chrg.cpMin = 0;
- ttf.chrg.cpMax = sci_get_length(doc_list[idx].sci);
- ttf.lpstrText = (gchar*) "\t";
-
- while (TRUE)
- {
- search_pos = sci_find_text(doc_list[idx].sci, SCFIND_MATCHCASE, &ttf);
- if (search_pos == -1)
- break;
-
- pos_in_line = sci_get_col_from_position(doc_list[idx].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_list[idx].sci, search_pos);
- sci_target_end(doc_list[idx].sci, search_pos + 1);
- sci_target_replace(doc_list[idx].sci, tab_str, FALSE);
- ttf.chrg.cpMin = search_pos + current_tab_true_length - 1; /* next search starts after replacement */
- ttf.chrg.cpMax += current_tab_true_length - 1; /* update end of range now text has changed */
- g_free(tab_str);
- }
- sci_end_undo_action(doc_list[idx].sci);
-}
-
-
-void document_strip_line_trailing_spaces(gint idx, gint line)
-{
- gint line_start = sci_get_position_from_line(doc_list[idx].sci, line);
- gint line_end = sci_get_line_end_position(doc_list[idx].sci, line);
- gint i = line_end - 1;
- gchar ch = sci_get_char_at(doc_list[idx].sci, i);
-
- while ((i >= line_start) && ((ch == ' ') || (ch == '\t')))
- {
- i--;
- ch = sci_get_char_at(doc_list[idx].sci, i);
- }
- if (i < (line_end-1))
- {
- sci_target_start(doc_list[idx].sci, i + 1);
- sci_target_end(doc_list[idx].sci, line_end);
- sci_target_replace(doc_list[idx].sci, "", FALSE);
- }
-}
-
-
-void document_strip_trailing_spaces(gint idx)
-{
- gint max_lines = sci_get_line_count(doc_list[idx].sci);
- gint line;
-
- sci_start_undo_action(doc_list[idx].sci);
-
- for (line = 0; line < max_lines; line++)
- {
- document_strip_line_trailing_spaces(idx, line);
- }
- sci_end_undo_action(doc_list[idx].sci);
-}
-
-
-void document_ensure_final_newline(gint idx)
-{
- gint max_lines = sci_get_line_count(doc_list[idx].sci);
- gboolean append_newline = (max_lines == 1);
- gint end_document = sci_get_position_from_line(doc_list[idx].sci, max_lines);
-
- if (max_lines > 1)
- {
- append_newline = end_document > sci_get_position_from_line(doc_list[idx].sci, max_lines - 1);
- }
- if (append_newline)
- {
- const gchar *eol = "\n";
- switch (sci_get_eol_mode(doc_list[idx].sci))
- {
- case SC_EOL_CRLF:
- eol = "\r\n";
- break;
- case SC_EOL_CR:
- eol = "\r";
- break;
- }
- sci_insert_text(doc_list[idx].sci, end_document, eol);
- }
-}
-
-
/**
* Sets the encoding of a %document.
* This function only set the encoding of the %document, it does not any conversions. The new
@@ -2554,7 +2369,7 @@
/* Gets the status colour of the document, or NULL if default widget
* colouring should be used. */
-GdkColor *document_get_status(gint idx)
+GdkColor *document_get_status_color(gint idx)
{
static GdkColor red = {0, 0xFFFF, 0, 0};
static GdkColor green = {0, 0, 0x7FFF, 0};
@@ -2647,35 +2462,6 @@
}
-/* Inserts the given colour (format should be #...), if there is a selection starting with 0x...
- * the replacement will also start with 0x... */
-void document_insert_colour(gint idx, const gchar *colour)
-{
- g_return_if_fail(DOC_IDX_VALID(idx));
-
- if (sci_can_copy(doc_list[idx].sci))
- {
- gint start = sci_get_selection_start(doc_list[idx].sci);
- const gchar *replacement = colour;
-
- if (sci_get_char_at(doc_list[idx].sci, start) == '0' &&
- sci_get_char_at(doc_list[idx].sci, start + 1) == 'x')
- {
- sci_set_selection_start(doc_list[idx].sci, start + 2);
- sci_set_selection_end(doc_list[idx].sci, start + 8);
- replacement++; /* skip the leading "0x" */
- }
- else if (sci_get_char_at(doc_list[idx].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_list[idx].sci, replacement);
- }
- else
- sci_add_text(doc_list[idx].sci, colour);
-}
-
-
gint document_clone(gint old_idx, const gchar *utf8_filename)
{
/* create a new file and copy file content and properties */
Modified: trunk/src/document.h
===================================================================
--- trunk/src/document.h 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/document.h 2008-05-15 13:43:29 UTC (rev 2588)
@@ -154,26 +154,22 @@
void document_finalize(void);
-
void document_set_text_changed(gint idx);
void document_apply_update_prefs(gint idx);
-
gboolean document_remove(guint page_num);
gboolean document_account_for_unsaved(void);
gboolean document_close_all(void);
-
gint document_new_file_if_non_open();
gint document_new_file(const gchar *filename, filetype *ft, const gchar *text);
gint document_clone(gint old_idx, const gchar *utf8_filename);
-
gint document_open_file(const gchar *locale_filename, gboolean readonly,
filetype *ft, const gchar *forced_enc);
@@ -192,7 +188,6 @@
gboolean document_save_file(gint idx, gboolean force);
-
gboolean document_search_bar_find(gint idx, const gchar *text, gint flags, gboolean inc);
gint document_find_text(gint idx, const gchar *text, gint flags, gboolean search_backwards,
@@ -207,26 +202,10 @@
void document_replace_sel(gint idx, const gchar *find_text, const gchar *replace_text, gint flags,
gboolean escaped_chars);
-void document_set_font(gint idx, const gchar *font_name, gint size);
-
void document_update_tag_list(gint idx, gboolean update);
void document_set_filetype(gint idx, filetype *type);
-gchar *document_get_eol_mode(gint idx);
-
-void document_fold_all(gint idx);
-
-void document_unfold_all(gint idx);
-
-void document_replace_tabs(gint idx);
-
-void document_strip_line_trailing_spaces(gint idx, gint line);
-
-void document_strip_trailing_spaces(gint idx);
-
-void document_ensure_final_newline(gint idx);
-
void document_set_encoding(gint idx, const gchar *new_encoding);
@@ -263,16 +242,10 @@
void document_undo_add(gint idx, guint type, gpointer data);
-GdkColor *document_get_status(gint idx);
+GdkColor *document_get_status_color(gint idx);
void document_delay_colourise(void);
void document_colourise_new(void);
-void document_insert_colour(gint idx, const gchar *colour);
-
-void document_set_use_tabs(gint idx, gboolean use_tabs);
-
-void document_set_line_wrapping(gint idx, gboolean wrap);
-
#endif
Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/editor.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -36,6 +36,7 @@
#include "SciLexer.h"
#include "geany.h"
+#include "support.h"
#include "editor.h"
#include "document.h"
#include "filetypes.h"
@@ -240,7 +241,7 @@
gint indent_size = sci_get_line_indentation(sci, line);
/* break the line after the space */
- sci_insert_text(sci, pos + 1, utils_get_eol_char(idx));
+ sci_insert_text(sci, pos + 1, editor_get_eol_char(idx));
if (doc->auto_indent)
sci_set_line_indentation(sci, line + 1, indent_size);
@@ -582,7 +583,7 @@
static void check_python_indent(gint idx, gint pos)
{
document *doc = &doc_list[idx];
- gint last_char = pos - utils_get_eol_char_len(idx) - 1;
+ gint last_char = pos - editor_get_eol_char_len(idx) - 1;
/* add extra indentation for Python after colon */
if (sci_get_char_at(doc->sci, last_char) == ':' &&
@@ -626,7 +627,7 @@
if (editor_prefs.newline_strip)
{ /* strip the trailing spaces on the previous line */
- document_strip_line_trailing_spaces(idx, line - 1);
+ editor_strip_line_trailing_spaces(idx, line - 1);
}
}
@@ -807,7 +808,7 @@
line_len = sci_get_line_length(sci, line);
/* set eol_char_len to 0 if on last line, because there is no EOL char */
eol_char_len = (line == (SSM(sci, SCI_GETLINECOUNT, 0, 0) - 1)) ? 0 :
- utils_get_eol_char_len(document_find_by_sci(sci));
+ editor_get_eol_char_len(document_find_by_sci(sci));
/* check that the line is empty, to not kill text in the line */
line_buf = sci_get_line(sci, line);
@@ -1281,7 +1282,7 @@
/* get the indentation */
if (doc_list[idx].auto_indent) get_indent(&doc_list[idx], pos, TRUE);
- eol = g_strconcat(utils_get_eol_char(idx), indent, NULL);
+ eol = g_strconcat(editor_get_eol_char(idx), indent, NULL);
construct = g_strdup_printf("%s\\end%s{%s}", eol, full_cmd, env);
@@ -1368,7 +1369,7 @@
}
get_indent(&doc_list[idx], pos, TRUE);
- lindent = g_strconcat(utils_get_eol_char(idx), indent, NULL);
+ lindent = g_strconcat(editor_get_eol_char(idx), indent, NULL);
whitespace = get_whitespace(editor_prefs.tab_width, doc_list[idx].use_tabs);
/* remove the typed word, it will be added again by the used auto completion
@@ -1618,7 +1619,7 @@
if (idx == -1 || ! doc_list[idx].is_valid || doc_list[idx].file_type == NULL) return;
- eol = utils_get_eol_char(idx);
+ eol = editor_get_eol_char(idx);
str_begin = g_strdup_printf("%s%s", doc_list[idx].file_type->comment_open, eol);
str_end = g_strdup_printf("%s%s", doc_list[idx].file_type->comment_close, eol);
@@ -1693,7 +1694,7 @@
first_line = sci_get_line_from_position(doc_list[idx].sci, sel_start);
/* Find the last line with chars selected (not EOL char) */
last_line = sci_get_line_from_position(doc_list[idx].sci,
- sel_end - utils_get_eol_char_len(idx));
+ sel_end - editor_get_eol_char_len(idx));
last_line = MAX(first_line, last_line);
}
else
@@ -1817,7 +1818,7 @@
}
else
{
- gint eol_len = utils_get_eol_char_len(idx);
+ gint eol_len = editor_get_eol_char_len(idx);
sci_set_selection_start(doc_list[idx].sci, sel_start - co_len - eol_len);
sci_set_selection_end(doc_list[idx].sci, sel_end - co_len - eol_len);
}
@@ -1852,7 +1853,7 @@
sci_get_selection_start(doc_list[idx].sci));
/* Find the last line with chars selected (not EOL char) */
last_line = sci_get_line_from_position(doc_list[idx].sci,
- sci_get_selection_end(doc_list[idx].sci) - utils_get_eol_char_len(idx));
+ sci_get_selection_end(doc_list[idx].sci) - editor_get_eol_char_len(idx));
last_line = MAX(first_line, last_line);
/* detection of HTML vs PHP code, if non-PHP set filetype to XML */
@@ -1981,7 +1982,7 @@
}
else
{
- gint eol_len = utils_get_eol_char_len(idx);
+ gint eol_len = editor_get_eol_char_len(idx);
if (count_uncommented > 0)
{
sci_set_selection_start(doc_list[idx].sci, sel_start - co_len - eol_len);
@@ -2021,7 +2022,7 @@
first_line = sci_get_line_from_position(doc_list[idx].sci, sel_start);
/* Find the last line with chars selected (not EOL char) */
last_line = sci_get_line_from_position(doc_list[idx].sci,
- sel_end - utils_get_eol_char_len(idx));
+ sel_end - editor_get_eol_char_len(idx));
last_line = MAX(first_line, last_line);
}
else
@@ -2136,7 +2137,7 @@
}
else
{
- gint eol_len = utils_get_eol_char_len(idx);
+ gint eol_len = editor_get_eol_char_len(idx);
sci_set_selection_start(doc_list[idx].sci, sel_start + co_len + eol_len);
sci_set_selection_end(doc_list[idx].sci, sel_end + co_len + eol_len);
}
@@ -2181,7 +2182,7 @@
static void auto_multiline(gint idx, gint pos)
{
ScintillaObject *sci = doc_list[idx].sci;
- gint style = SSM(sci, SCI_GETSTYLEAT, pos - 1 - utils_get_eol_char_len(idx), 0);
+ gint style = SSM(sci, SCI_GETSTYLEAT, pos - 1 - editor_get_eol_char_len(idx), 0);
gint lexer = SSM(sci, SCI_GETLEXER, 0, 0);
if ((lexer == SCLEX_CPP && (style == SCE_C_COMMENT || style == SCE_C_COMMENTDOC)) ||
@@ -2684,7 +2685,7 @@
first_line = sci_get_line_from_position(doc_list[idx].sci, first_sel_start);
/* Find the last line with chars selected (not EOL char) */
last_line = sci_get_line_from_position(doc_list[idx].sci,
- first_sel_end - utils_get_eol_char_len(idx));
+ first_sel_end - editor_get_eol_char_len(idx));
last_line = MAX(first_line, last_line);
if (pos == -1)
@@ -2738,7 +2739,7 @@
first_line = sci_get_line_from_position(doc_list[idx].sci, sel_start);
/* Find the last line with chars selected (not EOL char) */
last_line = sci_get_line_from_position(doc_list[idx].sci,
- sel_end - utils_get_eol_char_len(idx));
+ sel_end - editor_get_eol_char_len(idx));
last_line = MAX(first_line, last_line);
if (pos == -1)
@@ -2904,7 +2905,7 @@
/* skip blank lines */
if ((start + 1) == end ||
- sci_get_line_length(doc_list[idx].sci, line) == utils_get_eol_char_len(idx))
+ sci_get_line_length(doc_list[idx].sci, line) == editor_get_eol_char_len(idx))
return;
/* don't set the indicator on whitespace */
@@ -2948,4 +2949,244 @@
}
+/* Inserts the given colour (format should be #...), if there is a selection starting with 0x...
+ * the replacement will also start with 0x... */
+void editor_insert_color(gint idx, const gchar *colour)
+{
+ g_return_if_fail(DOC_IDX_VALID(idx));
+ if (sci_can_copy(doc_list[idx].sci))
+ {
+ gint start = sci_get_selection_start(doc_list[idx].sci);
+ const gchar *replacement = colour;
+
+ if (sci_get_char_at(doc_list[idx].sci, start) == '0' &&
+ sci_get_char_at(doc_list[idx].sci, start + 1) == 'x')
+ {
+ sci_set_selection_start(doc_list[idx].sci, start + 2);
+ sci_set_selection_end(doc_list[idx].sci, start + 8);
+ replacement++; /* skip the leading "0x" */
+ }
+ else if (sci_get_char_at(doc_list[idx].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_list[idx].sci, replacement);
+ }
+ else
+ sci_add_text(doc_list[idx].sci, colour);
+}
+
+
+const gchar *editor_get_eol_char_name(gint idx)
+{
+ if (! DOC_IDX_VALID(idx))
+ return "";
+
+ switch (sci_get_eol_mode(doc_list[idx].sci))
+ {
+ case SC_EOL_CRLF: return _("Win (CRLF)"); break;
+ case SC_EOL_CR: return _("Mac (CR)"); break;
+ default: return _("Unix (LF)"); break;
+ }
+}
+
+
+/* returns the end-of-line character(s) length of the specified editor */
+gint editor_get_eol_char_len(gint idx)
+{
+ if (! DOC_IDX_VALID(idx))
+ return 0;
+
+ switch (sci_get_eol_mode(doc_list[idx].sci))
+ {
+ case SC_EOL_CRLF: return 2; break;
+ default: return 1; break;
+ }
+}
+
+
+/* returns the end-of-line character(s) of the specified editor */
+const gchar *editor_get_eol_char(gint idx)
+{
+ if (! DOC_IDX_VALID(idx))
+ return "";
+
+ switch (sci_get_eol_mode(doc_list[idx].sci))
+ {
+ case SC_EOL_CRLF: return "\r\n"; break;
+ case SC_EOL_CR: return "\r"; break;
+ default: return "\n"; break;
+ }
+}
+
+
+static void fold_all(gint idx, gboolean want_fold)
+{
+ gint lines, first, i;
+
+ if (! DOC_IDX_VALID(idx) || ! editor_prefs.folding) return;
+
+ lines = sci_get_line_count(doc_list[idx].sci);
+ first = sci_get_first_visible_line(doc_list[idx].sci);
+
+ for (i = 0; i < lines; i++)
+ {
+ gint level = sci_get_fold_level(doc_list[idx].sci, i);
+ if (level & SC_FOLDLEVELHEADERFLAG)
+ {
+ if (sci_get_fold_expanded(doc_list[idx].sci, i) == want_fold)
+ sci_toggle_fold(doc_list[idx].sci, i);
+ }
+ }
+ editor_scroll_to_line(doc_list[idx].sci, first, 0.0F);
+}
+
+
+void editor_unfold_all(gint idx)
+{
+ fold_all(idx, FALSE);
+}
+
+
+void editor_fold_all(gint idx)
+{
+ fold_all(idx, TRUE);
+}
+
+
+void editor_replace_tabs(gint idx)
+{
+ gint search_pos, pos_in_line, current_tab_true_length;
+ gint tab_len;
+ gchar *tab_str;
+ struct TextToFind ttf;
+
+ if (! DOC_IDX_VALID(idx)) return;
+
+ sci_start_undo_action(doc_list[idx].sci);
+ tab_len = sci_get_tab_width(doc_list[idx].sci);
+ ttf.chrg.cpMin = 0;
+ ttf.chrg.cpMax = sci_get_length(doc_list[idx].sci);
+ ttf.lpstrText = (gchar*) "\t";
+
+ while (TRUE)
+ {
+ search_pos = sci_find_text(doc_list[idx].sci, SCFIND_MATCHCASE, &ttf);
+ if (search_pos == -1)
+ break;
+
+ pos_in_line = sci_get_col_from_position(doc_list[idx].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_list[idx].sci, search_pos);
+ sci_target_end(doc_list[idx].sci, search_pos + 1);
+ sci_target_replace(doc_list[idx].sci, tab_str, FALSE);
+ ttf.chrg.cpMin = search_pos + current_tab_true_length - 1; /* next search starts after replacement */
+ ttf.chrg.cpMax += current_tab_true_length - 1; /* update end of range now text has changed */
+ g_free(tab_str);
+ }
+ sci_end_undo_action(doc_list[idx].sci);
+}
+
+
+void editor_strip_line_trailing_spaces(gint idx, gint line)
+{
+ gint line_start = sci_get_position_from_line(doc_list[idx].sci, line);
+ gint line_end = sci_get_line_end_position(doc_list[idx].sci, line);
+ gint i = line_end - 1;
+ gchar ch = sci_get_char_at(doc_list[idx].sci, i);
+
+ while ((i >= line_start) && ((ch == ' ') || (ch == '\t')))
+ {
+ i--;
+ ch = sci_get_char_at(doc_list[idx].sci, i);
+ }
+ if (i < (line_end-1))
+ {
+ sci_target_start(doc_list[idx].sci, i + 1);
+ sci_target_end(doc_list[idx].sci, line_end);
+ sci_target_replace(doc_list[idx].sci, "", FALSE);
+ }
+}
+
+
+void editor_strip_trailing_spaces(gint idx)
+{
+ gint max_lines = sci_get_line_count(doc_list[idx].sci);
+ gint line;
+
+ sci_start_undo_action(doc_list[idx].sci);
+
+ for (line = 0; line < max_lines; line++)
+ {
+ editor_strip_line_trailing_spaces(idx, line);
+ }
+ sci_end_undo_action(doc_list[idx].sci);
+}
+
+
+void editor_ensure_final_newline(gint idx)
+{
+ gint max_lines = sci_get_line_count(doc_list[idx].sci);
+ gboolean append_newline = (max_lines == 1);
+ gint end_document = sci_get_position_from_line(doc_list[idx].sci, max_lines);
+
+ if (max_lines > 1)
+ {
+ append_newline = end_document > sci_get_position_from_line(doc_list[idx].sci, max_lines - 1);
+ }
+ if (append_newline)
+ {
+ const gchar *eol = "\n";
+ switch (sci_get_eol_mode(doc_list[idx].sci))
+ {
+ case SC_EOL_CRLF:
+ eol = "\r\n";
+ break;
+ case SC_EOL_CR:
+ eol = "\r";
+ break;
+ }
+ sci_insert_text(doc_list[idx].sci, end_document, eol);
+ }
+}
+
+
+void editor_set_font(gint idx, const gchar *font_name, gint size)
+{
+ gint style;
+
+ for (style = 0; style <= 127; style++)
+ sci_set_font(doc_list[idx].sci, style, font_name, size);
+ /* line number and braces */
+ sci_set_font(doc_list[idx].sci, STYLE_LINENUMBER, font_name, size);
+ sci_set_font(doc_list[idx].sci, STYLE_BRACELIGHT, font_name, size);
+ sci_set_font(doc_list[idx].sci, STYLE_BRACEBAD, font_name, size);
+ /* zoom to 100% to prevent confusion */
+ sci_zoom_off(doc_list[idx].sci);
+}
+
+
+void editor_set_line_wrapping(gint idx, gboolean wrap)
+{
+ document *doc = &doc_list[idx];
+
+ g_return_if_fail(DOC_IDX_VALID(idx));
+
+ doc->line_wrapping = wrap;
+ sci_set_lines_wrapped(doc->sci, wrap);
+}
+
+
+void editor_set_use_tabs(gint idx, gboolean use_tabs)
+{
+ document *doc = &doc_list[idx];
+
+ g_return_if_fail(DOC_IDX_VALID(idx));
+
+ doc->use_tabs = use_tabs;
+ sci_set_use_tabs(doc->sci, use_tabs);
+ /* remove indent spaces on backspace, if using spaces to indent */
+ SSM(doc->sci, SCI_SETBACKSPACEUNINDENTS, ! use_tabs, 0);
+}
Modified: trunk/src/editor.h
===================================================================
--- trunk/src/editor.h 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/editor.h 2008-05-15 13:43:29 UTC (rev 2588)
@@ -175,4 +175,30 @@
void editor_clear_indicators(gint idx);
+void editor_set_font(gint idx, const gchar *font_name, gint size);
+
+const gchar *editor_get_eol_char_name(gint idx);
+
+gint editor_get_eol_char_len(gint idx);
+
+const gchar *editor_get_eol_char(gint idx);
+
+void editor_fold_all(gint idx);
+
+void editor_unfold_all(gint idx);
+
+void editor_replace_tabs(gint idx);
+
+void editor_strip_line_trailing_spaces(gint idx, gint line);
+
+void editor_strip_trailing_spaces(gint idx);
+
+void editor_ensure_final_newline(gint idx);
+
+void editor_insert_color(gint idx, const gchar *colour);
+
+void editor_set_use_tabs(gint idx, gboolean use_tabs);
+
+void editor_set_line_wrapping(gint idx, gboolean wrap);
+
#endif
Modified: trunk/src/keybindings.c
===================================================================
--- trunk/src/keybindings.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/keybindings.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -1068,14 +1068,14 @@
{
gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
- document_fold_all(idx);
+ editor_fold_all(idx);
}
static void cb_func_menu_unfoldall(G_GNUC_UNUSED guint key_id)
{
gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
- document_unfold_all(idx);
+ editor_unfold_all(idx);
}
static void cb_func_build_action(guint key_id)
Modified: trunk/src/keyfile.c
===================================================================
--- trunk/src/keyfile.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/keyfile.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -846,8 +846,8 @@
if (DOC_IDX_VALID(new_idx))
{
- document_set_use_tabs(new_idx, use_tabs);
- document_set_line_wrapping(new_idx, line_wrapping);
+ editor_set_use_tabs(new_idx, use_tabs);
+ editor_set_line_wrapping(new_idx, line_wrapping);
doc_list[new_idx].auto_indent = auto_indent;
ret = TRUE;
}
Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/main.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -689,7 +689,7 @@
}
else
{
- const gchar *msg = _("Could not find file '%s'.");
+#define msg _("Could not find file '%s'.")
g_printerr(msg, filename); /* also print to the terminal */
g_printerr("\n");
Modified: trunk/src/prefs.c
===================================================================
--- trunk/src/prefs.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/prefs.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -822,7 +822,7 @@
for (i = 0; i < doc_array->len; i++)
{
if (doc_list[i].is_valid)
- document_set_use_tabs(i, editor_prefs.use_tabs);
+ editor_set_use_tabs(i, editor_prefs.use_tabs);
}
}
}
@@ -978,7 +978,7 @@
{
document_apply_update_prefs(i);
if (! editor_prefs.folding)
- document_unfold_all(i);
+ editor_unfold_all(i);
}
}
ui_document_show_hide(-1);
Modified: trunk/src/tools.c
===================================================================
--- trunk/src/tools.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/tools.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -42,6 +42,7 @@
#include "tools.h"
#include "support.h"
#include "document.h"
+#include "editor.h"
#include "sciwrappers.h"
#include "utils.h"
#include "ui_utils.h"
@@ -721,7 +722,7 @@
GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(ui_widgets.open_colorsel)->colorsel), &color);
hex = utils_get_hex_from_color(&color);
- document_insert_colour(idx, hex);
+ editor_insert_color(idx, hex);
g_free(hex);
}
#endif
Modified: trunk/src/treeviews.c
===================================================================
--- trunk/src/treeviews.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/treeviews.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -309,7 +309,7 @@
void treeviews_openfiles_update(gint idx)
{
gchar *basename;
- GdkColor *color = document_get_status(idx);
+ GdkColor *color = document_get_status_color(idx);
if (prefs.sidebar_openfiles_fullpath)
basename = DOC_FILENAME(idx);
Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/ui_utils.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -163,7 +163,7 @@
(doc_list[idx].use_tabs) ? _("TAB") : _("SP ")); /* SP = space */
g_string_append(stats_str, sp);
g_string_append_printf(stats_str, _("mode: %s"),
- document_get_eol_mode(idx));
+ editor_get_eol_char_name(idx));
g_string_append(stats_str, sp);
g_string_append_printf(stats_str, _("encoding: %s %s"),
(doc_list[idx].encoding) ? doc_list[idx].encoding : _("unknown"),
@@ -260,7 +260,7 @@
{
if (doc_list[i].sci)
{
- document_set_font(i, fname, size);
+ editor_set_font(i, fname, size);
}
}
pango_font_description_free(font_desc);
@@ -1195,7 +1195,7 @@
* document status. */
void ui_update_tab_status(gint idx)
{
- GdkColor *color = document_get_status(idx);
+ GdkColor *color = document_get_status_color(idx);
/* NULL color will reset to default */
gtk_widget_modify_fg(doc_list[idx].tab_label, GTK_STATE_NORMAL, color);
Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/utils.c 2008-05-15 13:43:29 UTC (rev 2588)
@@ -641,34 +641,6 @@
}
-/* returns the end-of-line character(s) length of the specified editor */
-gint utils_get_eol_char_len(gint idx)
-{
- if (idx == -1) return 0;
-
- switch (sci_get_eol_mode(doc_list[idx].sci))
- {
- case SC_EOL_CRLF: return 2; break;
- default: return 1; break;
- }
-}
-
-
-/* returns the end-of-line character(s) of the specified editor */
-const gchar *utils_get_eol_char(gint idx)
-{
- if (idx == -1) return '\0';
-
- switch (sci_get_eol_mode(doc_list[idx].sci))
- {
- case SC_EOL_CRLF: return "\r\n"; break;
- case SC_EOL_CR: return "\r"; break;
- case SC_EOL_LF:
- default: return "\n"; break;
- }
-}
-
-
const gchar *utils_get_eol_name(gint eol_mode)
{
switch (eol_mode)
Modified: trunk/src/utils.h
===================================================================
--- trunk/src/utils.h 2008-05-14 17:58:56 UTC (rev 2587)
+++ trunk/src/utils.h 2008-05-15 13:43:29 UTC (rev 2588)
@@ -68,10 +68,6 @@
gint utils_get_current_function(gint idx, const gchar **tagname);
-gint utils_get_eol_char_len(gint idx);
-
-const gchar *utils_get_eol_char(gint idx);
-
const gchar *utils_get_eol_name(gint eol_mode);
gboolean utils_atob(const gchar *str);
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