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':