Re: Re: another fix
| From: | Pablo Dall'Oglio | 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); }
/* 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); }