cvs: php-gtk /ext/scintilla scintilla.overrides /main php_gtk_util.c

[email protected] ("Andrei Zmievski") Mon, 13 Aug 2001 04:52:49 -0000
Newsgroups php.gtk
Message-ID <cvsandrei997678369@cvsserver>
andrei		Mon Aug 13 00:52:49 2001 EDT

  Modified files:              
    /php-gtk/ext/scintilla	scintilla.overrides 
    /php-gtk/main	php_gtk_util.c 
  Log:
  
  Make several Scintilla functions easier to use by precalculating stuff
  internally or not asking the user for length of the input string. Patches from
  Markus and myself.
  
  
Index: php-gtk/ext/scintilla/scintilla.overrides
diff -u php-gtk/ext/scintilla/scintilla.overrides:1.1 php-gtk/ext/scintilla/scintilla.overrides:1.2
--- php-gtk/ext/scintilla/scintilla.overrides:1.1	Sat Aug 11 01:42:40 2001
+++ php-gtk/ext/scintilla/scintilla.overrides	Mon Aug 13 00:52:48 2001
@@ -6,3 +6,153 @@
 %%
 ignore-glob
   *_get_type
+%%
+override gtk_scintilla_add_text
+PHP_FUNCTION(gtk_scintilla_add_text)
+{
+	char *text;
+	int len;
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s#", &text, &len))
+		return;
+	
+	gtk_scintilla_add_text(GTK_SCINTILLA(PHP_GTK_GET(this_ptr)), len, text);
+
+	RETURN_NULL();
+}
+%%
+override gtk_scintilla_get_cur_line
+PHP_FUNCTION(gtk_scintilla_get_cur_line)
+{
+	int length, line_pos;
+	char *text;
+	GtkScintilla *scintilla = GTK_SCINTILLA(PHP_GTK_GET(this_ptr));
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
+		return;
+
+	length = gtk_scintilla_line_length(scintilla, gtk_scintilla_line_from_position(scintilla, gtk_scintilla_get_current_pos(scintilla))) + 1;
+	text = (char *)emalloc(length);
+
+	/* This function null-terminates the resulting string. */
+	line_pos = gtk_scintilla_get_cur_line(scintilla, length, text);
+
+	*return_value = *php_gtk_build_value("(s#i)", text, length-1, line_pos);
+}
+%%
+override gtk_scintilla_get_text
+PHP_FUNCTION(gtk_scintilla_get_text)
+{
+	int length;
+	char *text;
+	GtkScintilla *scintilla = GTK_SCINTILLA(PHP_GTK_GET(this_ptr));
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
+		return;
+	
+	length = gtk_scintilla_get_text_length(scintilla) + 1;
+	text = emalloc(length);
+
+	/* This function null-terminates the string. */
+	gtk_scintilla_get_text(scintilla, length, text);
+
+	RETURN_STRINGL(text, length-1, 0);
+}
+%%
+override gtk_scintilla_get_line
+PHP_FUNCTION(gtk_scintilla_get_line)
+{
+	int line, length;
+	char *text;
+	GtkScintilla *scintilla = GTK_SCINTILLA(PHP_GTK_GET(this_ptr));
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "i", &line))
+		return;
+	
+	length = gtk_scintilla_line_length(scintilla, line) + 1;
+	text = emalloc(length);
+	memset(text, 0, length);
+
+	/* Scintilla has a bug: when you try to get non-existant line, it
+	   overwrites the buffer. So, we avoid it by checking length. */
+	if (length > 1)
+		gtk_scintilla_get_line(scintilla, line, text);
+
+	RETURN_STRINGL(text, length-1, 0);
+}
+%%
+override gtk_scintilla_get_sel_text
+/* TODO: fix to properly handle rectangular selections */
+PHP_FUNCTION(gtk_scintilla_get_sel_text)
+{
+	long length;
+	char *text;
+	GtkScintilla *scintilla = GTK_SCINTILLA(PHP_GTK_GET(this_ptr));
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), ""))
+		return;
+	
+	length = gtk_scintilla_get_selection_end(scintilla) - gtk_scintilla_get_selection_start(scintilla) + 1;
+	text = emalloc(length);
+	text[length-1] = 0;
+
+	gtk_scintilla_get_sel_text(scintilla, text);
+
+	RETURN_STRINGL(text, length-1, 0);
+}
+%%
+override gtk_scintilla_replace_target
+PHP_FUNCTION(gtk_scintilla_replace_target)
+{
+	int length;
+	char *text;
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s#", &text, &length))
+		return;
+
+	length = gtk_scintilla_replace_target(GTK_SCINTILLA(PHP_GTK_GET(this_ptr)), length, text);
+
+	RETURN_LONG(length);
+}
+%%
+override gtk_scintilla_replace_target_re
+PHP_FUNCTION(gtk_scintilla_replace_target_re)
+{
+	int length;
+	char *text;
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s#", &text, &length))
+		return;
+
+	length = gtk_scintilla_replace_target_re(GTK_SCINTILLA(PHP_GTK_GET(this_ptr)), length, text);
+
+	RETURN_LONG(length);
+}
+%%
+override gtk_scintilla_search_in_target
+PHP_FUNCTION(gtk_scintilla_search_in_target)
+{
+	int length, pos;
+	char *text;
+
+	NOT_STATIC_METHOD();
+
+	if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s#", &text, &length))
+		return;
+
+	RETURN_LONG(gtk_search_in_target(GTK_SCINTILLA(PHP_GTK_GET(this_ptr)), length, text));
+}
Index: php-gtk/main/php_gtk_util.c
diff -u php-gtk/main/php_gtk_util.c:1.20 php-gtk/main/php_gtk_util.c:1.21
--- php-gtk/main/php_gtk_util.c:1.20	Mon Jul 30 20:38:58 2001
+++ php-gtk/main/php_gtk_util.c	Mon Aug 13 00:52:49 2001
@@ -18,7 +18,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-/* $Id: php_gtk_util.c,v 1.20 2001/07/31 00:38:58 fmk Exp $ */
+/* $Id: php_gtk_util.c,v 1.21 2001/08/13 04:52:49 andrei Exp $ */
 
 #include "php_gtk.h"
 
@@ -645,7 +645,7 @@
 			case 'l':
 				MAKE_STD_ZVAL(result);
 				ZVAL_LONG(result, (long)va_arg(*va, long));
-				break;
+				return result;
 
 			case 'f':
 			case 'd':