Re: Re: another fix

From: Date: Thu, 07 Dec 2006 14:07:12 +0000
Subject: Re: Re: another fix
References: 1 2  Groups: php.gtk.dev 
Request: Send a blank email to php-gtk-dev+get-3538@lists.php.net to get a copy of this message
Hello, I attached to this email the last version of my scintilla.overrides. As I told before to Andrei, it's working but the code can be improved. thanks Pablo Em Qua, 2006-12-06 às 21:14 -0800, Andrei Zmievski escreveu: > Anant, > > Can you commit this? > > -Andrei > > > On Nov 6, 2006, at 1:51 PM, Pablo Dall'Oglio wrote: > > > is it good enough ? I needed get_sel_text so I addapted from php-gtk1 > > too :-) > > > > static PHP_METHOD(GtkScintilla, get_sel_text) > > { > > zend_bool free_text = FALSE; > > long length; > > char *text; > > GtkScintilla *scintilla = GTK_SCINTILLA(PHPG_GOBJECT > > (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); > > if (free_text) g_free(text); > > RETVAL_STRINGL(text, length-1, 0); > > } > > > > > > -- > > :: Pablo Dall'Oglio > > :: www.dalloglio.net > -- :: Pablo Dall'Oglio :: www.pablo.blog.br

/* vim: set ft=cpp: */ %% headers #include <gtkscintilla2/gtkscintilla.h> #include "ext/gtk+/php_gtk+.h" #include "php_gtk_api.h" %% ignore-glob *_get_type %% override gtk_scintilla_get_text PHP_METHOD { int length, result; char *text; length = 0; NOT_STATIC_METHOD(); if(!php_gtk_parse_args(ZEND_NUM_ARGS(), "|i", length)) { return; } if(length==0) { length = gtk_scintilla_get_length(GTK_SCINTILLA(PHPG_GOBJECT(this_ptr))); length++; } text = safe_emalloc(length, sizeof(char), 0); result = gtk_scintilla_get_text(GTK_SCINTILLA(PHPG_GOBJECT(this_ptr)), length, text); if(result) { RETVAL_STRINGL(text, length-1, 1); } efree(text); } %% override gtk_scintilla_set_text PHP_METHOD { char *text, *utf8; zend_bool free_text, free_utf8 = TRUE; gsize len = 0; NOT_STATIC_METHOD(); if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "u", &utf8, &free_utf8)) return; text = phpg_from_utf8(utf8, strlen(utf8), &len, &free_text TSRMLS_CC); gtk_scintilla_set_text(GTK_SCINTILLA(PHPG_GOBJECT(this_ptr)), text); if (free_utf8) { g_free(utf8); } if (free_text) { g_free(text); } } %% override gtk_scintilla_get_cur_line PHP_METHOD { long length, line_pos; char *text; gchar *cp_ret; gsize cp_len; zend_bool free_result; NOT_STATIC_METHOD(); if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) return; GtkScintilla *scintilla = GTK_SCINTILLA(PHPG_GOBJECT(this_ptr)); length = gtk_scintilla_line_length(scintilla, gtk_scintilla_line_from_position(scintilla, gtk_scintilla_get_current_pos(scintilla))) + 1; text = (char *)emalloc(length); line_pos = gtk_scintilla_get_cur_line(scintilla, length, text); cp_ret = phpg_from_utf8(text, strlen(text), &cp_len, &free_result TSRMLS_CC); if (cp_ret) { RETVAL_STRINGL((char *)cp_ret, cp_len, 1); } else { php_error(E_WARNING, "%s::%s(): could not convert return value from UTF-8", get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C)); } if (free_result) g_free(cp_ret); } %% override gtk_scintilla_get_sel_text PHP_METHOD { zend_bool free_text = FALSE; long length; char *text; GtkScintilla *scintilla = GTK_SCINTILLA(PHPG_GOBJECT(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); if (free_text) g_free(text); RETVAL_STRINGL(text, length-1, 0); }
« previous php.gtk.dev (#3538) next »