[geany/geany] cc5e6d: rewrite_reflow: Reimplement `split_line` function to achieve consistency with the "Line breaking" option

Eugene Arshinov git-noreply at xxxxx
Sun Apr 21 01:45:09 UTC 2013


Branch:      refs/heads/master
Author:      Eugene Arshinov <earshinov at gmail.com>
Committer:   elextr <elextr at gmail.com>
Date:        Sun, 21 Apr 2013 01:45:09 UTC
Commit:      cc5e6d2a19e3ac434621d2d7ed867fd4caaff19b
             https://github.com/geany/geany/commit/cc5e6d2a19e3ac434621d2d7ed867fd4caaff19b

Log Message:
-----------
rewrite_reflow: Reimplement `split_line` function to achieve consistency with the "Line breaking" option


Modified Paths:
--------------
    src/keybindings.c

Modified: src/keybindings.c
56 files changed, 50 insertions(+), 6 deletions(-)
===================================================================
@@ -2104,12 +2104,56 @@ static gint get_reflow_column(GeanyEditor *editor)
    Return the number of lines added because of the splitting. */
 static gint split_line(GeanyEditor *editor, gint column)
 {
-	gint linescount = sci_get_line_count(editor->sci);
-	sci_set_anchor(editor->sci, -1);
-	sci_target_from_selection(editor->sci);
-	sci_lines_split(editor->sci, column * sci_text_width(editor->sci, STYLE_DEFAULT, " "));
-	/* use lines count to determine how many lines appeared after splitting */
-	return sci_get_line_count(editor->sci) - linescount;
+	ScintillaObject *sci = editor->sci;
+	gint start_line = sci_get_current_line(sci);
+	gint line = start_line;
+
+	while (TRUE)
+	{
+		gint lstart = sci_get_position_from_line(sci, line);
+		gint lend = sci_get_line_end_position(sci, line);
+		gint edge = sci_get_position_from_col(sci, line, column);
+		gboolean found;
+		gint pos;
+
+		/* don't split on a trailing space of a line */
+		if (sci_get_char_at(sci, lend - 1) == GDK_space)
+			lend--;
+
+		/* detect when the line is short enough and no more splitting is needed */
+		if (sci_get_col_from_position(sci, lend) < column)
+			break;
+
+		/* lookup split position */
+		found = FALSE;
+		for (pos = edge - 1; pos > lstart; pos--)
+		{
+			if (sci_get_char_at(sci, pos) == GDK_space)
+			{
+				found = TRUE;
+				break;
+			}
+		}
+		if (!found)
+		{
+			for (pos = edge; pos < lend; pos++)
+			{
+				if (sci_get_char_at(sci, pos) == GDK_space)
+				{
+					found = TRUE;
+					break;
+				}
+			}
+		}
+		if (!found)
+			break;
+
+		sci_set_current_position(sci, pos + 1, FALSE);
+		sci_cancel(sci); /* don't select from completion list */
+		sci_send_command(sci, SCI_NEWLINE);
+		line++;
+	}
+	return line - start_line;
 }
 
 



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list